无状态会话bean结果缓存?
问题描述:
我们正在运行无状态会话Bean以从各个位置检索一些数据。无状态会话bean结果缓存?
实现此SLSB缓存的最佳方式是什么?
使用拦截器?使用JBossCache?
我们使用的是JBoss 5.0.1。
答
从技术上讲,您可以在无状态会话bean中保留状态,只是状态可以在调用之间由容器清除。因此,您不应该将缓存本身保留在bean中,因为它可能会消失。
由于您已经使用了JBoss Appserver,因此JBossCache在这里看起来像是个明显的赢家。您可以使用jboss服务描述符配置JBossCache实例,然后您的EJB可以从JMX/JNDI中查找缓存实例。它全部包含在JBossAS中,所以不需要额外的依赖关系。
如果您感兴趣的话,使用JBossCache还可以为您提供跨群集分布的缓存额外奖励。
答
无用会话bean本身无法在调用之间保存数据,因为名称说它是无状态的。然而。你可以创建一个有状态的会话bean来保存你的缓存,并将这个bean传递给你的无状态bean方法。
void someMethod(StateFulBean sfb){
Cache cahce = sfb.getCache();
...
}
当使用EBJ 3.1,您还可以使用Singleton注解并注入高速缓存作为一个单身到您的无状态会话bean。
是否有任何现有的拦截器来实现这一点? (例如,将使用方法参数作为缓存键的拦截器......) 我不希望将业务代码与缓存代码混合在一起。 – jruillier 2009-12-16 09:51:50
我不知道这种现成的东西,但JBoss EJB拦截器很容易编写,所以你可以推出自己的。 – skaffman 2009-12-16 09:55:56