您知道创建一个 webservice 客户端服务实例的成本有多大吗?
JavaWebService service = new JavaWebService();
SomePort port = service.getJavaWebServicePort();
创建服务一次,然后在多线程环境(webapp)中重用相同的端口并不危险?
请注意,端口 getPort 和端口本身不是线程安全的,而且每次创建服务时,如果这是一项成本高昂的操作,则可能会出现问题。
任何想法 ?
THanks
在 JAX-WS 参考实现 (Metro) 中,创建JavaWebService
成本低廉(在我们生成的客户端中,我们往往发现这需要大约 20 毫秒)。
第一次创作SomePort
相当昂贵(对我们来说大约 200 毫秒);随后调用getSomePort()
一样的JavaWebService
实例要快得多(对我们来说大约 3 毫秒)。
因此,创建一个实现JavaWebService
每次它需要得到一个SomePort
将带来一定程度的费用。简而言之,这个问题的答案是“相当昂贵”。
然而,即使上面的方法SomePort
不是线程安全的,方法JavaWebService
是。因此,合理的使用模式(至少对于 Metro - 线程安全是由于缺乏规范而特定于实现的)是重用JavaWebService
因为你只会承担昂贵的费用getSomePort()
打电话一次。
Update
这与来自 Oracle 德国的员工 Andreas Leow 的两篇文章一致,这是 @PapaLazarou 在下面的评论中引用的帖子中的发帖者之一,他写了关于Service
object,
您只能创建一个静态Service
每个 WSDL 的实例:任何单个Service
对象是完全线程安全的,并且可以由任意数量的并发线程共享。
以及关于端口的使用,
虽然我几乎 100% 确定 CXF JAX-WS 端口是线程安全的,但 Metro 的Port
对象肯定是not线程安全。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)