1

我们有一个公开大量 Web 服务的应用程序服务器。我们正在运行一个 tomcat,它使用 JSF 应用程序中的那些 web 服务来提供用户界面。假设我们有一个 bean,它有一个方法“getWebservice()”,它返回 jaxws 用来与 web 服务通信的代理类。这使我们能够以最小的努力与 web 服务进行交互:使用 wsimport 生成,然后使用 #{myBean.webservice.myProperty} 等

但是,正如您所看到的,当重用公开的方法时,这将需要大量的 Web 服务交互。在我们的用例中,大多数方法都是相当静态的,至少在 @RequestScoped bean 的持续时间内,因此大多数方法的交互应该在调用后被缓存(至少对于一个请求)。

目前我们的设置是在 bean 中创建包装服务,每个包装都做同样的事情:

if (methodResponse == null)
     methodResponse = getWebservice().getMethod();
return methodResponse;

您可以看到这很快就会变得非常烦人。有没有办法注释 jaxws 缓存方法?或者我可以基于接口生成我自己的代理类,并以某种方式将其“链接”到 jaxws 使用的代理(并执行通用缓存),还是我可以创建自己的执行缓存的注释?

4

1 回答 1

1

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

查看此博客文章以查看完整的分步说明并下载示例代码。

于 2012-06-20T10:45:49.000 回答