我现在需要创建一个缓存来存储某些需要从数据库更新的值。由于这个缓存需要是单一的,某种单例实现似乎是合适的。
问题是这个缓存还需要通过 EJB 访问数据库,这不能被注入(inject),因为缓存存在于上下文之外(是的,我期待 EJB3.1 中的@singleton 注释).
明显的解决方案是将 EJB 作为参数传递到缓存中,但在上下文之外传递 EJB 感觉不对,但我说不出原因。这是公认的做法吗?
最佳答案
请注意,您通常不会“在上下文之外”传递 EJB 本身。您通常传递的是“ stub ”。这个 stub 可以像任何其他普通对象引用一样传递。对它的任何调用都将重定向回 EJB 容器中的实际 bean 实例。
因此,如果您在 web 模块中有一个缓存,有一个注入(inject)了 EJB 的支持 bean(或执行 JNDI 查找)并将该引用传递给(静态)缓存,那么我看不出根本问题
出于所有意图和目的,@Singleton 注释确实是为这样的事情而创建的。希望您能尽快使用它 ;)
关于java - 将 EJB 作为参数传递给辅助类是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5076332/