Webservice——客户端服务实例化

2024-03-03

您知道创建一个 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(使用前将#替换为@)

Webservice——客户端服务实例化 的相关文章

随机推荐