我们有一个公开大量web服务的应用服务器。我们正在运行一个tomcat,它在JSF应用程序中使用这些web服务来提供用户界面。假设我们有一个bean,它有一个方法“getWebservice()”,它返回jaxws用来与webservice通信的代理类。这允许我们以最小的努力与web服务交互:使用wsimport生成,然后使用#{myBean.webservice.myProperty}等
但是,正如您所看到的,在重用公开的方法时,这需要很多的Web服务交互。在我们的用例中,大多数方法都是静态的,至少在@RequestScoped bean的持续时间内,因此大多数方法的交互应该在被调用时缓存(至少对于一个请求)。
目前我们的设置是在bean中创建包装器服务,每个包装器都完全相同:
if (methodResponse == null)
methodResponse = getWebservice().getMethod();
return methodResponse;
你可以看到这很快就会非常烦人。有没有办法为缓存注释jaxws方法?或者我可以基于接口生成自己的代理类,并以某种方式将其“链接”到jaxws使用的代理(并执行通用缓存),还是可以创建自己的执行缓存的注释?
答案 0 :(得分:1)
您可以在 Web服务客户端代理对象周围创建另一个缓存Proxy
,并为其提供InvocationHandler
,以缓存方法调用的结果。
查看this blog post以查看完整的分步说明并下载示例代码。