使用JAX-WS的并发Web服务请求

时间:2013-09-13 11:48:37

标签: java multithreading web-services jax-ws

我需要为我的问题设计一个解决方案。所以,请帮助我。

我的问题:

我们有一个Web项目。在那里我们使用了四个表,分别叫做A,B,C,D。 对于每个表,我们创建了一个前端页面,并提供了一个按钮,用于将记录保存到各个表中。 现在我们需要使用Web服务集成将每个记录数据共享给另一个应用程序。 我对JAX-WS Web服务有所了解。

我们识别了必需的字段,并且我们只为所有四个表创建了一个通用的WSDL。 当用户尝试保存记录时,我只需要提出Web服务调用。(事件库) 在这里,我们正在停止同步Web服务。即对于每个请求,系统都会等待来自另一端的响应。

假设,首先我尝试将记录保存在表A中。所以,我填写了表单A中的所有必填字段,我试图点击保存按钮。记录保存在数据库中以及向其他端发送Web服务请求,向服务器发送记录并等待响应..... 如果在这个意思中,如果我再次尝试发送另一个记录为同一表格A(或)表格B的新记录。

然后如何处理这种情况,因为已经有一个线程忙于服务器的响应。那么,如何同步地提出多个请求。

请向我建议我可以应用的可能解决方案。 一个建议对我很有帮助。

(抱歉我的英语不好)

1 个答案:

答案 0 :(得分:1)

看看你的情景,我发现你有类似的东西:

数据库 - > Web JAX-WS服务器 - >多个JAX-WS客户端

当您从客户端调用WS服务器时,会创建一个新线程来处理请求并处理每个客户端的响应。 Web服务器是“多线程”并且支持多个客户端同时呼叫。您的问题可能是在WS服务之后。

如果使用您的WS,您尝试使用两个客户端读取同一个表,则没有问题,但如果一个客户端在其他读取或两个或更多客户端更新表时尝试保存,则可能是事务锁定问题。 / p>

根据数据库配置,您应该配置事务隔离选项并谨慎处理数据库连接,仅在绝对需要时才打开和关闭事务

例如,如果您使用带有InnDB(http://dev.mysql.com/doc/refman/5.0/es/innodb-transaction-isolation.html)的MySQL并且在执行查询时您的事务隔离是“SERIALIZABLE”,则表将被锁定,直到事务结束并且任何其他客户端等待直到事务被释放或者提出超时。

但是如果你有“REPEATABLE READ”,那么只有一个交易所引用的记录会被锁定到其他交易。在某些环境中这可能是“好的”但是两个适用于同一行的SQL语句可能会导致死锁。 * MySQL InnDB的默认值

此外,您应该使用READ COMMITED或READ UNCOMMITED来允许读取所有表并修改不同的记录。另外,为了处理相同的记录而且始终存在最小的问题,建议:“仅在最短的时间内打开您的交易”


检查WS客户端是否存在在创建第二个请求时销毁第一个请求的单例模式。还要检查您是否正在使用带状态的WS,在用户会话中保留会话或其他服务器端对象,这些对象对于不同的请求是相同的。

与Stateles相关:

Is it possible to use @WebService, @Stateless and @Singleton altogether in one EJB 3 bean?