Java JAX-WS web服务线程安全和性能问题

Java JAX-WS web服务线程安全和性能问题,java,multithreading,web-services,thread-safety,jax-ws,Java,Multithreading,Web Services,Thread Safety,Jax Ws,我从其他几篇文章以及我对JAX-WSWeb服务的理解中了解到它们不是线程安全的。我的web服务将被100多个客户端调用,我们需要能够每秒处理大约200个事务 我的web服务将与数据库交互以执行其工作,如果我在访问数据库的代码周围引入synchronized关键字,我基本上将确保一次只有一个线程访问数据库,我想知道在这种情况下我是否仍能达到所需的吞吐量。提前感谢你的帮助 我被告知将数据库访问工作实际移动到另一个类中,并在方法级别实例化该类,这样我就不需要使用synchronized关键字,并且仍然

我从其他几篇文章以及我对JAX-WSWeb服务的理解中了解到它们不是线程安全的。我的web服务将被100多个客户端调用,我们需要能够每秒处理大约200个事务

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


我被告知将数据库访问工作实际移动到另一个类中,并在方法级别实例化该类,这样我就不需要使用synchronized关键字,并且仍然可以实现线程安全。这是否正确?

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

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

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

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

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

    很抱歉,我还没有探讨过这个选项。。我马上就去。。顺便说一句,使用无状态EJB,您仍然可以以与平台无关的方式将web服务类似地公开给您的客户机?从客户机的角度来看,这仍然是与平台无关的。只是端点实例的特性和生命周期会有所不同。基本上,将所有JAX-WS注释放在@Stateless bean上。谢谢你的回复@Chase我一直在寻找更多关于这方面的回复。。我会检查这一点,并接受你的回答,如果这对我的工作…谢谢@zaske。我将在实施解决方案时研究这些建议。