1

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

我的问题 :

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

我们确定了必填字段,并且只为所有四个表创建了一个公共 WSDL。当用户尝试保存记录时,此时我只需要发起 Web 服务调用。(事件库)这里我们正在暂停同步 Web 服务。即对于每个请求系统将等待来自另一端的响应。

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

那么如何处理这种情况,因为已经有一个线程忙于服务器的响应。那么,如何像我们在同步中一样同时提出多个请求。

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

(对不起,我的英语不好)

4

1 回答 1

1

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

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

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

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

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

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

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

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


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

状态的相关资料:

是否可以在一个 EJB 3 bean 中同时使用 @WebService、@Stateless 和 @Singleton?

于 2013-09-13T12:14:39.560 回答