从远程客户端</env-entry>获取并设置<env-entry>

时间:2012-02-02 12:55:04

标签: java-ee ejb jndi

我有远程接口TimeService的EJB TimeServiceEJB。在我的EJB模块的Deploy描述符中有:

<ejb-name>TimeServiceEJB</ejb-name>
...
<env-entry>
    <description>... </description>
    <env-entry-name>variable</env-entry-name>
    <env-entry-type>java.lang.Integer</env-entry-type>
    <env-entry-value>10</env-entry-value>
</env-entry>

我需要从客户端应用程序获取此变量并能够编辑它。我试着这样做:

Properties p = new Properties();
p.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
p.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
p.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
p.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
p.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext iniCtx = new InitialContext(p);
Integer variable = (Integer) iniCtx.lookup("java:comp/ejb/TimeServiceEJB/variable");

但我一无所获。试图以不同的方式查找(“java:global / ejb / TimeServiceEJB / variable”,“java:comp / env / TimeServiceEJB / variable”,“java:global / ear-name / module-name / TimeServiceEJB /) - 总是有“javax.naming.NameNotFoundException:没有对象绑定...”

尝试通过注释@Resource(name =“variable”,mappedName =“env / variable”)设置此变量的mappingName,并通过“env / variable”进行查找,但得到了NameNotFoundException。

有什么想法,如何获得这个变量?第二个问题是:我可以编辑它的价值吗?

1 个答案:

答案 0 :(得分:2)

  

有什么想法,如何获得这个变量?

环境条目仅在应用程序组件的命名上下文中可见(即来自EJB中的java:comp/env或声明它的Web模块中的InitialContext。 (例外:Java EE 6提供了声明和访问模块,应用程序和全局范围环境条目的方法,但这些条目需要特定的环境条目前缀。有关详细信息,请参阅Java EE 6 specification中的EE.5.2.2。)< / p>

  

第二个问题是:我可以编辑它的值吗?

在运行时无法在JNDI中修改环境条目值。我建议在EJB上公开一个单独的方法来获取并在本地设置这个值。