我在Oracle WebLogic 10.3上有一个网络服务(用java编写),它可以执行各种数据库查询。最近我开始了压力测试。它通过了重复测试(连续调用WS 1000次),但是当并发测试开始时,问题就出现了。进行多达2个并发调用会导致错误。当做适当的测试时,结果看起来WS根本不能处理并发调用,显然不应该是这样的。错误包括空指针异常,关闭的连接或准备好的语句等。我对此感到有点困惑,特别是因为我无法找到任何类型的配置选项来影响这一点,但话又说回来,我对WLS的知识相当有限。
感谢您提前给我提建议。
发布于 2013-03-12 21:19:23
这样就有了一个明确的答案。
当对WLS上的给定Web服务(在本例中使用SOAP/JAX-WS )有多个并发调用时,将使用相同的对象(不使用池或队列),因此实现必须是线程安全的。
编辑:
为了说明这一点:假设在JDeveloper生成的WebService实现类中有一个类属性。如果你在你的web方法中修改这个属性(然后使用它),那么当这个方法被并发调用(即WS被调用)时,就会导致同步问题。当我第一次开始创建web服务时,我认为每个WS调用都会重新创建整个WebService对象,但事实似乎并非如此。
发布于 2013-03-12 21:26:47
你标记为正确的答案是完全错误的。
不应该为了线程安全而创建webservice方法。
weblogic的Webservice实现是多线程的。
这就像是servlet
Servlet是多线程的。基于Servlet的应用程序必须正确识别和处理这一点。如果同步了大段代码,应用程序将有效地变为单线程,吞吐量会急剧下降。
您可能希望同步WS中的代码,具体取决于您所做的工作。
https://stackoverflow.com/questions/9032533
复制相似问题