Web services JavaEE应用服务器中的JAX-WS客户端池

Web services JavaEE应用服务器中的JAX-WS客户端池,web-services,jakarta-ee,jax-ws,actor,Web Services,Jakarta Ee,Jax Ws,Actor,我有一个在JavaEE应用服务器上运行的应用程序,它需要调用合作公司的web服务 我使用JDK(1.6)中的wsimport.exe生成了客户机类。我实例化服务并获取端口以调用web服务 我注意到对web服务的第一次调用很慢,我相信这是因为它正在验证WSDL。随后的通话速度很快 我可以在本地保存WSDL,显然这将加快第一次调用的速度 为了优化我的应用程序,我想我可以创建一个客户端池。这还有一个额外的优势,我在应用程序中有一些限制——假设我有一个5个客户端的池,那么最多我将为5个客户端使用内存。如

我有一个在JavaEE应用服务器上运行的应用程序,它需要调用合作公司的web服务

我使用JDK(1.6)中的wsimport.exe生成了客户机类。我实例化服务并获取端口以调用web服务

我注意到对web服务的第一次调用很慢,我相信这是因为它正在验证WSDL。随后的通话速度很快

我可以在本地保存WSDL,显然这将加快第一次调用的速度

为了优化我的应用程序,我想我可以创建一个客户端池。这还有一个额外的优势,我在应用程序中有一些限制——假设我有一个5个客户端的池,那么最多我将为5个客户端使用内存。如果服务器上的负载突然增加,我不必担心无限数量的客户端会导致内存不足错误。根据过去的经验,我假设web服务客户端使用大量内存

  • 你愿意为游泳池费心吗
  • 您如何克服对web服务的第一次调用速度慢的问题
  • 创建该池的最佳方法是什么,这样我就可以进行最少的编程(例如,我想使用库/API/任何东西,这样我就不必重新设计程序和编写一些毛茸茸的bug)

    • 我的一位同事建议您可以在EJB中的字段上使用
      @webservicef
      注释。其思想是服务器将向客户机注入一个引用,从中可以为调用EJB的每个线程创建一个端口

      我假设注入的引用来自一个池,尽管规范似乎没有提到这一点。注释的Javadoc明确提到:

      “注入的引用不是线程安全的”

      这可能正是我想要的


      它是可配置的,似乎已经考虑了所有问题。

      使用链接中所示的主/从设置可以很好地工作,尽管比另一个答案中列出的Apache Commons池稍微复杂一些。AKKA还使用一个执行池,它有自己的线程,这在Java EE世界中是不被严格允许的,尽管我认为,因为一个经过良好测试的框架负责线程,所以没有危险,无论如何,它不应该干扰应用服务器对线程的控制,因为AKKA处理的线程数量非常少。

      我很高兴来到这里问这个问题,因为我有很多有用的答案!说真的,从来没有人从JavaEE服务器调用过web服务吗?也许那太老了,斯库尔…这不管用。注入的服务始终是新的,在本地笔记本电脑上获取端口的调用平均需要15毫秒,其中webservice在该笔记本电脑上运行,WSDL部署在webserver上,而不是在项目内部。这表明在本地使用WSDL是绝对必要的。不要选择此选项,因为尽管它很有趣,但代码比其他解决方案更复杂。效果很好-这是三个选项中最好的。