2012-07-12 44 views
2

我有一个运行在Java EE应用服务器上的应用程序,它需要调用合作伙伴公司的Web服务。Java EE应用服务器中的JAX-WS客户机池

从我的JDK(1.6)使用wsimport.exe我已经生成客户端类。我实例化服务并获取端口以调用Web服务。

我注意到第一次调用Web服务的速度很慢,我被引导认为这是因为它正在验证WSDL。随后的通话很快。

我可以在本地保存WSDL,显然这会加速第一次调用。

为了优化我的应用程序,我想我可以创建一个客户端池。这有另外的好处,我有一些限制在应用程序 - 可以说我有一个5个客户端池,那么我最多会为5个客户端使用内存。如果我的服务器上的负载突然增加,我不必担心无限数量的客户端会导致内存不足错误。根据以往的经验,我假设网络服务客户端使用大量内存...

  • 您是否打算使用游泳池?
  • 如何让第一次调用Web服务的速度变慢?
  • 什么是创建该池的最佳方式,以便我必须执行最少量的编程(即,我想使用库/ API /任何,以便我不必重新发明轮子并编写一些毛虫)。
+0

我很高兴我来问这个问题,因为我被有用的答案淹没了!严重的是,从来没有人从Java EE服务器调用过Web服务?也许这是太旧的skool ... – 2012-07-15 22:26:57

回答

3

Apache Commons Pool可能是我什么了。

它是可配置的,似乎已经想到了一切。

+0

工作得很好 - 这是三种选择中最好的。 – 2012-07-26 22:35:57

0

我的同事建议您可以在EJB中的字段上使用@WebServiceRef批注。这个想法是服务器会向客户端注入一个引用,从中可以为每个调用EJB的线程创建一个端口。

我假设注入引用来自一个池,虽然规范似乎没有谈论这一点。对于标注的Javadoc明确提到:

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

+0

这是行不通的。注入的Service始终是新的,并且在本地便携式计算机上平均需要15ms的时间来访问该端口,而该服务器正在该便携式计算机上运行,​​并且WSDL部署在Web服务器上而不是项目内部。这表明在本地使用WSDL是绝对必要的。 – 2012-07-19 07:23:01

0

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

+0

不选择这个,因为它有趣,代码比其他解决方案更复杂。 – 2012-07-26 22:35:32

相关问题