3

我有一个在 Java EE App Server 中运行的应用程序,它需要调用合作伙伴公司的 Web 服务。

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

我注意到对 Web 服务的第一次调用很慢,我相信这是因为它正在验证 WSDL。后续调用很快。

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

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

  • 你会为游泳池烦恼吗?
  • 您将如何克服对 Web 服务的第一次调用缓慢的问题?
  • 创建该池的最佳方法是什么,这样我就必须做最少的编程(即我想使用库/API /什么,这样我就不必重新发明轮子并编写一些代码毛茸茸的虫子)。
4

3 回答 3

4

Apache Commons Pool可能正是我所追求的。

它是可配置的,似乎已经考虑了一切。

于 2012-07-15T22:22:00.920 回答
0

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

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

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

于 2012-07-14T07:50:36.640 回答
0

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

于 2012-07-15T22:25:33.460 回答