我们有一个测试系统,在每次主要测试之前启动VirtualBox VM快照.快照包含特定于测试的测试系统的状态.
这是一项内存密集型测试.
有一个想法是将每日测试运行转移到Amazon EC2 Large实例(7.5G RAM).
我的理解是,EC2本身就是一名主管.它是否允许其他VM软件(VirtualBox)在它下面启动?
(已解决!通过FAKING SYSTEM RANDOM GENERATOR,见下文)
我正在为我的开发/构建团队设置VM映像.在该VM内部,应该运行Weblogic域.我使用Ububtu服务器发行版,WLS 9.2MP3 + ALSB.
一切正常,速度很快,但在开始时WLS会在可测量的时间内停止两次.两站总共延迟约10分钟.对于部署需要重新启动服务器的任务,这非常烦人.:-(
睡眠时间不是恒定的,有时服务器启动非常快,有时一般,有时10分钟或更长时间.
有趣的是,如果我在查看停止的服务器时按Enter键,它会更快地唤醒,有时几秒钟之后.WLST(Weblogic Jython shell)在VM中执行时也会挂起很长时间.虽然它没有对Enter作出反应.
这里必须是一些使用VM运行WLS的开发人员.我想知道其他人是否有同样的问题?有人能够解决它吗?
这是服务器输出(仅用于案例):
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_12-b04)
Java HotSpot(TM) Client VM (build 1.5.0_12-b04, mixed mode)
Starting WLS with line:
/shared2/beahome/jdk150_12/bin/java -client -Xmx256m -XX:MaxPermSize=128m -Xverify:none -da -Dplatform.home=/shared2/beahome/weblogic92
-Dwls.home=/shared2/beahome/weblogic92/server -Dwli.home=/shared2/beahome/weblogic92/integration -Dweblogic.management.discover=true -Dwl
w.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/shared2/beahome/patch_weblogic923/profiles/default/sysext_
manifest_classpath -Dweblogic.management.username=admin -Dweblogic.management.password=wlsadmin -Dweblogic.Name=LOGMGR-admin -Djava.security
.policy=/shared2/beahome/weblogic92/server/lib/weblogic.policy weblogic.Server
<1-Apr-2010 12:47:22 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000395> <Following extensions directory contents added to the end
of the classpath:
/shared2/beahome/weblogic92/platform/lib/p13n/p13n-schemas.jar:/shared2/beahome/weblogic92/platform/lib/p13n/p13n_common.jar:/shared2/beahom
e/weblogic92/platform/lib/p13n/p13n_system.jar:/shared2/beahome/weblogic92/platform/lib/wlp/netuix_common.jar:/shared2/beahome/weblogic92/pl
atform/lib/wlp/netuix_schemas.jar:/shared2/beahome/weblogic92/platform/lib/wlp/netuix_system.jar:/shared2/beahome/weblogic92/platform/lib/wl
p/wsrp-common.jar> …Run Code Online (Sandbox Code Playgroud) 有一个Oracle数据库模式(数据非常小,但仍然有大约10-15个表).它包含一种配置(路由表).
有一个应用程序必须不时轮询此架构.不得使用通知.
如果架构中没有更新数据,则应用程序应使用其当前的内存中版本.
如果任何表有任何更新,应用程序应将所有表重新加载到内存中.
从给定的关键点(时间或事务ID)开始,检查整个模式以进行更新的最有效方法是什么?
我想象Oracle会为每个架构保留一个事务ID.然后应该有一种方法来查询这样的ID并使其与下次轮询进行比较.
我发现了这个问题,在行级别上存在这样的伪列:
我认为在架构级别上存在类似的东西.
有人可以指点我正确的方向吗?
我有一个查询
......在哪里PRT_STATUS ='ONT'......
prt_status字段定义为CHAR(5).所以它总是用空格填充.查询不匹配任何结果.要使此查询起作用,我必须这样做
......在哪里rtrim(PRT_STATUS)='ONT'
哪个确实有效.
那很烦人.
同时,我有几个纯java DBMS客户端(Oracle SQLDeveloper和AquaStudio)对第一个查询没有问题,它们返回正确的结果.TOAD也没有问题.
我认为他们只是简单地将连接置于某种兼容模式(例如ANSI),因此Oracle知道CHAR(5)需要与后续字符进行比较.
如何使用我在应用程序中获得的Connection对象?
更新我无法更改数据库架构.
解决方案确实是Oracle将字段与传入参数进行比较的方式.
完成绑定后,字符串将通过PreparedStatement.setString()传递,它将类型设置为VARCHAR,因此Oracle使用未填充的比较 - 并且失败.
我尝试使用setObject(n,str,Types.CHAR).失败.反编译显示Oracle忽略CHAR并再次将其作为VARCHAR传递.
最终有效的变体是
setObject(n,str,OracleTypes.FIXED_CHAR);
Run Code Online (Sandbox Code Playgroud)
它使代码不可移植.
UI客户端因其他原因而成功 - 它们使用字符文字,而不是绑定.当我键入PRT_STATUS ='ONT'时,'ONT'是一个文字,因此使用填充方式进行比较.
玩具服务如下
@WebService(targetNamespace="http://www.example.org/stock")
@SOAPBinding(style=Style.RPC,parameterStyle=ParameterStyle.WRAPPED)
public class GetStockPrice {
@WebMethod(operationName="GetStockPrice",action="urn:GetStockPrice")
@WebResult(partName="Price")
public Double getPrice(
@WebParam(name="StockName")
String stock
) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
JAX-WS生成的客户端创建SOAP消息,其中StockName参数没有命名空间:
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:GetStockPrice xmlns:ns2="http://www.example.org/stock">
<StockName>IBM</StockName>
</ns2:GetStockPrice>
</S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)
我希望并希望StockName生成为
<ns2:StockName>IBM</ns2:StockName>
Run Code Online (Sandbox Code Playgroud)
即在目标名称空间中,而不是在匿名名称空间中(ns2不是默认的,据我所知,从消息中可以看出).
我想知道如何让JAX-WS将目标命名空间添加到消息的嵌套元素中?
尝试将名称空间指定给WebParam注释时没有任何改变,因为在使用RPC时会忽略此参数.
或者......这是否意味着RPC风格的参数始终是匿名的?
UPDATE
傻我.部分解决了.我必须做的是
那是:
@WebService(targetNamespace="http://www.example.org/stock")
@SOAPBinding(style=Style.DOCUMENT,parameterStyle=ParameterStyle.WRAPPED)
public class GetStockPrice {
@WebMethod(operationName="GetStockPrice",action="urn:GetStockPrice")
@WebResult(partName="Price")
public Double getPrice(
@WebParam(name="StockName",targetNamespace="http://www.example.org/stock")
String stock
) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,客户端仍然希望返回值没有任何命名空间,即使我尝试声明提供一个.这令人困惑.
我有一个部署在Tomcat上的有状态Web服务.它由工厂服务和主要的API服务组成,工作得很好.工厂服务将W3CEndpointReference返回到主API实例,客户端使用该会话.
现在,我正在尝试运行与独立应用程序相同的服务.在这种情况下,工厂返回的W3CEndpointReference突然开始指向工厂URI,而不是主服务URI.
当比较针对Tomcat和standalone的运行引用时,很明显独立引用具有错误的URI.具体来说,它指向工厂URI,而不是主API.
这是正确的参考:
...
<ns3:Address>http://localhost:8080/td2ws/api</ns3:Address>
...
Run Code Online (Sandbox Code Playgroud)
这是在独立进程上调用工厂时的引用:
<Address>http://localhost:9009/td2ws/factory</Address>
Run Code Online (Sandbox Code Playgroud)
我理解servlet上下文中的一些代码知道服务类(Td2Ws)和它的URI之间的对应关系,并相应地调整引用.但是,这段代码在独立进程中不起作用.我甚至可以怀疑代码使用sun-jaxws.xml,但我不知道如何"打开它".
如何在独立应用程序工作中创建有状态Web服务?
以下是代码的相关部分:
工厂服务(无国籍):
@WebService(targetNamespace="http://server.td2ws.sf.net/")
public class Td2WsFactory {
@WebMethod(operationName="StartSession", action="urn:StartSession")
@WebResult(name="Reference")
public W3CEndpointReference startSession() {
StatefulWebServiceManager<Td2Ws> manager = Td2Ws.getManager();
// for standalone execution only
if( manager == null ) {
manager = new StatefulInstanceResolver<Td2Ws>(Td2Ws.class);
Td2Ws.setManager(manager);
}
Td2Ws session = new Td2Ws();
return manager.export(W3CEndpointReference.class,session);
}
}
Run Code Online (Sandbox Code Playgroud)
有状态API:
@Stateful
@WebService(targetNamespace="http://server.td2ws.sf.net/")
@Addressing
public class Td2Ws {
private static StatefulWebServiceManager<Td2Ws> manager;
public static void setManager(StatefulWebServiceManager<Td2Ws> manager ) {
Td2Ws.manager = manager;
}
public static …Run Code Online (Sandbox Code Playgroud) 我有一组构建文件,其中一些调用其他文件 - 首先导入它们.行尾构建可能具有或不具有特定目标(例如"copyother").如果该目标是在行尾构建脚本中定义的,我想从我的主构建文件中调用它.我该怎么做?
部分调用脚本:
<!-- Import project-specific libraries and classpath -->
<property name="build.dir" value="${projectDir}/build"/>
<import file="${build.dir}/build_libs.xml"/>
...
<!-- "copyother" is a foreign target, imported in build_libs.xml per project -->
<target name="pre-package" depends=" clean,
init,
compile-src,
copy-src-resources,
copy-app-resources,
copyother,
compile-tests,
run-junit-tests"/>
Run Code Online (Sandbox Code Playgroud)
我不希望每个项目都定义"copyother"目标.我怎样才能进行有条件的蚂蚁通话?
我想实现一个自定义的类类,其中大部分功能都委托给嵌套的Map委托实例.而且,我希望这个类看起来像一个Map到一个"真正的"Java类.因此我尝试执行以下操作:
class ConfigurationMap implements Map {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
// my methods here
...
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用:-(Groovy要求类实现Map接口方法,尽管在运行时它们将由missedMissing()处理.如果我删除implements子句:
class ConfigurationMap {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
Run Code Online (Sandbox Code Playgroud)
它适用于Groovy(即实例的行为类似于Map),但我不能将它用作Java代码中的Map:
ConfigurationMap cm = ConfigParser.parseConfig("foo.cfg");
assertEquals(0,cm.size()); // size() method is not defined :-(
Run Code Online (Sandbox Code Playgroud)
并建议我如何保持我的课程简短(即不明确地实现Map),并仍然使该类看起来像Map到Java?
java ×3
jax-ws ×2
oracle ×2
virtualbox ×2
amazon-ec2 ×1
ant ×1
antcall ×1
char ×1
conditional ×1
groovy ×1
interface ×1
jdbc ×1
rpc ×1
schema ×1
sql ×1
sql-update ×1
stateful ×1
target ×1
testing ×1
timestamp ×1
vmware ×1
web-services ×1
weblogic ×1