我在Oracle WebLogic 10.3上有一个Web服务(在java中),可以执行各种数据库查询。最近我开始进行压力测试。它通过了重复测试(连续几次调用WS 1000次),但是当并发测试开始时会出现问题。多达2个并发调用会导致错误。在进行适当的测试时,结果看起来像WS根本无法处理并发调用,显然不应该这样。错误包括空指针异常,关闭连接或准备好的语句等。我特别难以理解,因为我无法找到任何可能影响这种情况的配置选项但是我对WLS的了解非常有限。
提前感谢您的任何建议。
答案 0 :(得分:0)
这样就有了明确的答案。
当在WLS上对给定的Web服务(在这种情况下使用SOAP / JAX-WS)进行多次并发调用时,使用相同的对象(不使用池或队列),因此实现必须是线程安全的
编辑:
澄清: 假设JDeveloper生成的WebService实现类中有一个class属性。如果在Web方法中修改此属性(然后使用它),则在同时调用方法(即调用WS)时将导致同步问题。当我第一次开始创建Web服务时,虽然为每个WS调用重新创建了整个WebService对象,但似乎并非如此。
答案 1 :(得分:0)
你标记为正确的答案是完全错误的。
不应该使用Web服务方法以保证线程安全。
weblogic的Web服务实现是多线程的。
就像servlet一样
“Servlet是多线程的。基于Servlet的应用程序必须正确识别和处理它。如果大部分代码同步,应用程序将有效地变为单线程,并且吞吐量会急剧下降。”
您可能希望根据您的操作同步WS中的代码。