由于WS客户端服务和端口的初始化需要很长时间,所以我喜欢在启动时初始化它们并重用相同的端口实例.初始化看起来像这样:
private static RequestContext requestContext = null;
static
{
MyService service = new MyService();
MyPort myPort = service.getMyServicePort();
Map<String, Object> requestContextMap = ((BindingProvider) myPort).getRequestContext();
requestContextMap = ((BindingProvider)myPort).getRequestContext();
requestContextMap.put(BindingProvider.USERNAME_PROPERTY, uName);
requestContextMap.put(BindingProvider.PASSWORD_PROPERTY, pWord);
rc = new RequestContext();
rc.setApplication("test");
rc.setUserId("test");
}
Run Code Online (Sandbox Code Playgroud)
我班上某个地方的电话:
myPort.someFunctionCall(requestContext, "someValue");
Run Code Online (Sandbox Code Playgroud)
我的问题:这个调用是否是线程安全的?
我创建了一个端口池(webservice客户端),因为在每次请求时动态创建客户端会导致瓶颈
现在我注意到webservice客户端持有对请求和响应的引用......
这是正常的......?
不幸的是,对于这个web服务来说,有效载荷非常大,就像这样,即使暂时不使用,池也会保留对某些不再使用的响应的引用...增加堆...
收到回复后有没有办法清理这些引用?
更新:使用Apache CXF客户端我没有这个问题但是pb.仍然对weblogic客户开放..