2009-12-15 117 views
1

我们正在运行无状态会话Bean以从各个位置检索一些数据。无状态会话bean结果缓存?

实现此SLSB缓存的最佳方式是什么?

使用拦截器?使用JBossCache?

我们使用的是JBoss 5.0.1。

回答

1

从技术上讲,您可以在无状态会话bean中保留状态,只是状态可以在调用之间由容器清除。因此,您不应该将缓存本身保留在bean中,因为它可能会消失。

由于您已经使用了JBoss Appserver,因此JBossCache在这里看起来像是个明显的赢家。您可以使用jboss服务描述符配置JBossCache实例,然后您的EJB可以从JMX/JNDI中查找缓存实例。它全部包含在JBossAS中,所以不需要额外的依赖关系。

如果您感兴趣的话,使用JBossCache还可以为您提供跨群集分布的缓存额外奖励。

+1

是否有任何现有的拦截器来实现这一点? (例如,将使用方法参数作为缓存键的拦截器......) 我不希望将业务代码与缓存代码混合在一起。 – jruillier 2009-12-16 09:51:50

+0

我不知道这种现成的东西,但JBoss EJB拦截器很容易编写,所以你可以推出自己的。 – skaffman 2009-12-16 09:55:56

0

无用会话bean本身无法在调用之间保存数据,因为名称说它是无状态的。然而。你可以创建一个有状态的会话bean来保存你的缓存,并将这个bean传递给你的无状态bean方法。

void someMethod(StateFulBean sfb){ 
    Cache cahce = sfb.getCache(); 
    ... 

} 

当使用EBJ 3.1,您还可以使用Singleton注解并注入高速缓存作为一个单身到您的无状态会话bean。

+0

EJB中引用的“状态”是对话状态,而不是对象状态。 SLSB可以拥有尽可能多的状态,只是在同一个bean的两个不同调用之间无法存活的状态。 – skaffman 2009-12-15 17:23:13

+0

我指的是谈话状态。也许我没有表达清楚,但因为我不是母语英语的人,所以我请求你原谅。 – Sylar 2009-12-16 07:53:10

相关问题