3

我从其他一些帖子和我对 JAX-WS Web 服务的理解中了解到它们不是线程安全的。我的 Web 服务将被 100 个客户端调用,我们需要能够处理大约 200 个事务/秒。

我的 Web 服务将与数据库交互以执行其工作,如果我在访问数据库的代码周围引入 synchronized 关键字,我基本上将确保一次只有一个线程访问数据库,我想知道我是否仍然能够在这种情况下达到所需的吞吐量。在此先感谢您的帮助。

我被告知实际上将数据库访问工作移到另一个类中并在方法级别实例化该类,这样我就不需要使用同步关键字并且仍然实现线程安全。那是对的吗?

4

2 回答 2

2

如果您需要事务和线程安全,为什么不直接使用 EJB 作为您的 JAX-WS 端点?

于 2012-07-13T17:14:06.227 回答
1

我们需要有关该应用程序的更多信息。

一般来说 - 对于你描述的情况下的性能+我推荐的数据库访问。

  1. 仔细规划您的数据库 - 尽可能/有意义的索引,使用视图等......
  2. 尝试使用具有良好锁定机制(每行锁定)的数据库。这样,当两个请求访问不同的行时,您将不会受到整个表锁定的影响。
  3. 让您的交易尽可能短。如果使用 EJB - 确保“读取数据”方法的事务范围不是Required 或RequiredNew(这可能会导致打开事务)。
  4. 如果您确实使用同步 - 小心使用正确的锁。不要试图自动使用“同步”作为最容易编码的方法。尽可能考虑使用 ReaderWriterLock。
  5. 考虑在可能的情况下使用缓存,但要仔细计划这一点,以便您的流程处理“相关”数据。

从这些方向开始——我想你会看到你可以像这样实现你的绩效目标。

于 2012-07-13T17:52:10.553 回答