并发调用Oracle WebLogic 10.3 Web服务问题

时间:2012-01-27 11:19:38

标签: web-services concurrency weblogic

我在Oracle WebLogic 10.3上有一个Web服务(在java中),可以执行各种数据库查询。最近我开始进行压力测试。它通过了重复测试(连续几次调用WS 1000次),但是当并发测试开始时会出现问题。多达2个并发调用会导致错误。在进行适当的测试时,结果看起来像WS根本无法处理并发调用,显然不应该这样。错误包括空指针异常,关闭连接或准备好的语句等。我特别难以理解,因为我无法找到任何可能影响这种情况的配置选项但是我对WLS的了解非常有限。

提前感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

这样就有了明确的答案。

当在WLS上对给定的Web服务(在这种情况下使用SOAP / JAX-WS)进行多次并发调用时,使用相同的对象(不使用池或队列),因此实现必须是线程安全的

编辑:

澄清: 假设JDeveloper生成的WebService实现类中有一个class属性。如果在Web方法中修改此属性(然后使用它),则在同时调用方法(即调用WS)时将导致同步问题。当我第一次开始创建Web服务时,虽然为每个WS调用重新创建了整个WebService对象,但似乎并非如此。

答案 1 :(得分:0)

你标记为正确的答案是完全错误的。

不应该使用Web服务方法以保证线程安全。

weblogic的Web服务实现是多线程的。

就像servlet一样

“Servlet是多线程的。基于Servlet的应用程序必须正确识别和处理它。如果大部分代码同步,应用程序将有效地变为单线程,并且吞吐量会急剧下降。”

http://www.ibm.com/developerworks/websphere/library/bestpractices/avoiding_or_minimizing_synchronization_in_servlets.html

您可能希望根据您的操作同步WS中的代码。

Does it make sense to synchronize web-service method?

相关问题