我正处于需要创建缓存以存储需要从数据库更新的某些值的情况。由于这个缓存需要是单一的,因此某种单例实现似乎是合适的。
问题是这个缓存还需要通过EJB访问数据库,由于缓存存在于上下文之外,因此无法注入(是的,我期待EJB3.1中的@singleton注释) )。
显而易见的解决方案是将EJB作为参数传递到缓存中,但是在上下文之外传递EJB会感觉不对,但我不能说为什么。是接受的做法吗?
答案 0 :(得分:6)
请注意,您通常不会“在上下文之外”传递EJB本身。你通常传递的是一个“存根”。此存根可以作为任何其他常规对象引用传递。对它的任何调用都将重定向回EJB容器中的实际bean实例。
因此,如果您在Web模块中有一个缓存,请使用EJB注入支持bean(或执行JNDI查找)并将该引用传递给(静态)缓存,那么我没有看到根本问题那个。
出于所有目的和目的,@ Singleton注释确实是为这样的东西做的。希望你能尽快使用它;)
答案 1 :(得分:0)
EJB的主要优点是容器内部。如果你将它传递到外面,你将失去容器提供的所有优点。为什么不在EJB中创建一个返回所需数据的方法。你可以做,例如,JNDI查找并调用该方法。通过这种方式,EJB将保留在容器中,您将获得数据。