我有一个ConfigParameter
SLSB,可以从ejb-jar.xml
文件中读取配置值。
此类只有私有字段,并且每个字段都有相应的getter方法。在我的应用程序中,我有很多其他使用ConfigParameter
实例来读取配置值的EJB。
现在,我认为将ConfigParameter
设为@Singleton
是个好主意,因为它的状态在整个应用程序中共享。
但在ejb-jar.xml
我只能将session-type
设置为Stateful
或Stateless
。该文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
<enterprise-beans>
<session>
<ejb-name>ConfigParameter</ejb-name>
<ejb-class>myapp.util.ConfigParameter</ejb-class>
<session-type>Stateless</session-type> <!-- make this a Singleton -->
<env-entry>
<env-entry-name>adminRoleName</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>admin</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
</ejb-jar>
我的问题是:
session-type
设置为Singleton?答案 0 :(得分:3)
您正在使用EJB 3.0。 Singleton EJB是在EJB 3.1中引入的。如果要在ejb-jar.xml中定义它,则应定义适当的版本(请注意版本属性,并将XSD位置更改为 3.1 )
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
或者只是在EJB类本身上使用@Singleton
注释。
是的 - 我肯定会说这是合适的将应用程序范围的配置bean标记为Singleton。
答案 1 :(得分:0)
虽然Singleton EJB
是一个不错的选择,但我想提出另一个想法供我考虑。根据您需要的值以及使用位置,这可能是也可能不是更好的方法。
由于您的ConfigParameter
Singleton EJB只是一个通过@Resource
注释从JNDI检索其值的POJO,因此您可以使用模块或应用程序范围的环境条目({{1 }},java:module
)而不是。这可以消除对这个额外EJB类的需求;相反,您可以在每个需要值的EJB中使用java:app
注释。为此,只需使用前缀为@Resource
或@Resource
:java:module
的名称,在需要值的EJB / Web组件中使用java:app
注释。