【发布时间】:2009-08-24 13:13:49
【问题描述】:
我需要实现一个简单的 DAO bean,它还缓存从数据库读取的数据。这个 DAO bean 被无状态 bean 使用。
因为 EJB3.0 不支持单例 bean,那么实现这样的 DAO bean 的正确方法是什么?只使用静态变量来保留缓存可以吗?
我们正在使用 Oracle AS,不打算使用集群。
【问题讨论】:
我需要实现一个简单的 DAO bean,它还缓存从数据库读取的数据。这个 DAO bean 被无状态 bean 使用。
因为 EJB3.0 不支持单例 bean,那么实现这样的 DAO bean 的正确方法是什么?只使用静态变量来保留缓存可以吗?
我们正在使用 Oracle AS,不打算使用集群。
【问题讨论】:
以某种跨应用服务器的方式执行此操作的“正确”方法是使用 jmx mbean 进行缓存行为。 mbean 是单例(每个应用服务器),可以执行线程和锁定等操作。当然,根据您使用的应用服务器,mbeans 在实践中可能或多或少难以使用。
【讨论】:
大多数应用程序服务器和 JPA 实现都提供了某种由用户控制的内置缓存机制。可能值得研究在不必构建单例的情况下完成您想要的事情的方法。
单例和 J2EE 的主要问题之一是在集群环境中没有简单的方法来处理它们。
话虽如此,我确实找到了一个article,它为可能在JBoss 下做你想做的事情提出了一些建议,并提到了一个新的@Singleton EJB3.1 注释,所以这可能是一种可能性。如果这对你有用,你应该写下你做了什么作为这个问题的另一个答案。
【讨论】:
如果您在 Weblogic 服务器上运行,实际上可以实现一个也支持集群的单例 bean。我不相信这个功能存在于其他应用服务器上。
【讨论】: