2012-02-02 50 views
1

我有具有遠程接口TimeService的EJB TimeServiceEJB。在我的EJB模塊的部署描述符有:從遠程客戶端獲取並設置<env-entry>

<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:No object bound for ...」

試圖通過annotaion @Resource(name =「variable」,mappedName =「env/variable」)設置此變量的mappingName,並通過「 ENV /變量」,但得到的NameNotFoundException

是否有任何想法,如何讓這個變量,第二個問題是:??我可以修改它的值

回答

2

是否有任何想法,如何讓這個變量?

環境條目僅在應用程序組件的命名上下文中可見(即, 從InitialContext內部聲明的EJB或Web模塊中)。 (例外:Java EE 6的提供方式申報和接入模塊,應用和全球範圍的環境條目,但那些需要特定的環境條目的前綴更多信息,請參閱從Java EE 6 specification EE.5.2.2。)

第二個問題是:我可以編輯它的值嗎?

無法在運行時在JNDI中修改環境條目值。我建議在您的EJB上公開一個單獨的方法,在本地獲取並設置此值。

+0

thanx for answer! – Peter 2012-02-06 08:57:17