我有一个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)
答案 0 :(得分:3)
看起来服务客户端正在超时解析WSDL。
确保WSDL及其导入的所有依赖项都在本地加载,而不是从服务主机通过网络获取。您可以通过constructor that takes a URL提供本地WSDL的路径;您仍然需要检查WSDL以确保它导入的任何模式都由相对URI引用。
还要确保通过使其成为应用程序范围来重用Service
实例。由于解析WSDL很昂贵,因此您希望尽可能少地执行此操作。检查你的JAX-WS实现的Service
是否是线程安全的(我不知道它们不是一个实现,但需要检查)。服务创建的ports各不相同 - 在某些实现中,这些是线程安全的;在某些情况下,他们不是。