调用Web服务客户端时的并发性

时间:2011-07-21 11:17:11

标签: java web-services weblogic jax-ws

我有一个webapp,它使用一些webservice客户端来获取它显示的数据。

当负载不是很高时,app工作正常。

不幸的是,当负载较大时,服务器会因为过载而过载 以下卡住线程......

知道可能是什么原因?

]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:
    com.sun.org.apache.xml.internal.resolver.Catalog.parseCatalog(Catalog.java:660)
    com.sun.xml.ws.util.xml.XmlUtil.createDefaultCatalogResolver(XmlUtil.java:251)
    com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:265)
    com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:228)
    weblogic.wsee.jaxws.spi.WLSServiceDelegate.<init>(WLSServiceDelegate.java:52)
    weblogic.wsee.jaxws.spi.WLSProvider$ServiceDelegate.<init>(WLSProvider.java:371)
    weblogic.wsee.jaxws.spi.WLSProvider.createServiceDelegate(WLSProvider.java:79)
    weblogic.wsee.jaxws.spi.WLSProvider.createServiceDelegate(WLSProvider.java:62)
    javax.xml.ws.Service.<init>(Service.java:56)

1 个答案:

答案 0 :(得分:3)

看起来服务客户端正在超时解析WSDL。

确保WSDL及其导入的所有依赖项都在本地加载,而不是从服务主机通过网络获取。您可以通过constructor that takes a URL提供本地WSDL的路径;您仍然需要检查WSDL以确保它导入的任何模式都由相对URI引用。

还要确保通过使其成为应用程序范围来重用Service实例。由于解析WSDL很昂贵,因此您希望尽可能少地执行此操作。检查你的JAX-WS实现的Service是否是线程安全的(我不知道它们不是一个实现,但需要检查)。服务创建的ports各不相同 - 在某些实现中,这些是线程安全的;在某些情况下,他们不是。