JSF中的JAXWS缓存

时间:2012-06-20 08:57:09

标签: java jsf jax-ws

我们有一个公开大量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使用的代理(并执行通用缓存),还是可以创建自己的执行缓存的注释?

1 个答案:

答案 0 :(得分:1)

您可以在 Web服务客户端代理对象周围创建另一个缓存Proxy,并为其提供InvocationHandler,以缓存方法调用的结果。

查看this blog post以查看完整的分步说明并下载示例代码。