Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将EJB作为参数传递给帮助器类是错误的吗?_Java_Ejb 3.0_Ejb - Fatal编程技术网

Java 将EJB作为参数传递给帮助器类是错误的吗?

Java 将EJB作为参数传递给帮助器类是错误的吗?,java,ejb-3.0,ejb,Java,Ejb 3.0,Ejb,我需要创建一个缓存来存储需要从数据库更新的特定值。因为这个缓存需要是单一的,所以某种单例实现似乎是合适的 问题是这个缓存还需要通过EJB访问数据库,而EJB不能被注入,因为缓存存在于上下文之外(是的,我期待EJB3.1中的@singleton注释) 显而易见的解决方案是将EJB作为一个参数传递到缓存中,但是在上下文之外传递EJB感觉是错误的,尽管我不能说为什么。这是公认的做法吗?EJB的主要优点是在容器内部。如果你把它放在外面,你就失去了容器提供的所有优势。为什么不在EJB中创建一个返回所需数据

我需要创建一个缓存来存储需要从数据库更新的特定值。因为这个缓存需要是单一的,所以某种单例实现似乎是合适的

问题是这个缓存还需要通过EJB访问数据库,而EJB不能被注入,因为缓存存在于上下文之外(是的,我期待EJB3.1中的@singleton注释)


显而易见的解决方案是将EJB作为一个参数传递到缓存中,但是在上下文之外传递EJB感觉是错误的,尽管我不能说为什么。这是公认的做法吗?

EJB的主要优点是在容器内部。如果你把它放在外面,你就失去了容器提供的所有优势。为什么不在EJB中创建一个返回所需数据的方法呢。例如,您可以执行JNDI查找并调用该方法。这样,EJB将留在容器中,您将获得数据。

请注意,您通常不会“在上下文之外”传递EJB本身。您通常传递的是一个“存根”。此存根可以作为任何其他普通对象引用传递。对它的任何调用都将重定向回EJB容器中的实际bean实例

因此,如果您在web模块中有一个缓存,有一个注入EJB的支持bean(或者执行JNDI查找),并将该引用传递给一个(静态)缓存,那么我看不出这有什么根本性的问题


出于所有目的,@Singleton注释确实是为类似的东西而做的。希望您能尽快使用它;)

因为缓存需要对该无状态会话bean的所有实例都是公共的。然后您可能会尝试从@Singleton执行您期望的操作。自己做一个单身豆。