2014-01-27 30 views
10

在我web.xml OD我webapp應用我有以下元素:如何修改網絡環境條目在GlassFish中4

<env-entry> 
    <env-entry-name>aMessage</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>Hello World</env-entry-value> 
</env-entry> 

EJB在此Web應用程序可以讀取它:

final InitialContext context = new InitialContext(); 
final Context env = (Context) context.lookup("java:comp/env"); 
System.out.println("MSG: " + env.lookup("aMessage")); // prints Hello World 

現在我試圖用asadmin改變該值:

[email protected]:~/glassfish4/glassfish/bin$ ./asadmin set-web-env-entry --name=aMessage --value=test webapp 
Previous env-entry setting of aMessage for application/module webapp was overridden. 
Command set-web-env-entry executed successfully. 

[email protected]:~/glassfish4/glassfish/bin$ ./asadmin list-web-env-entry webapp 
Reported 1 env-entry setting 
aMessage (java.lang.String) = test ignoreDescriptorItem=true // 
Command list-web-env-entry executed successfully. 

不幸的是,即使在重新啓用此webapp或重新啓動web服務器之後,我的EJB仍會打印舊值「Hello World」。

我也試過set-web-env-entry的名字沒有在web.xml中定義,也有--ignoredescriptoritem參數,但沒有什麼幫助。歷數整個大環境還沒有顯示出額外的或改變網絡環境條目,但顯示他老以及許多其他對象都沒有涉及這個問題:

final NamingEnumeration<Binding> enu = env.listBindings(""); 

while (enu.hasMore()) { 
    final Binding binding = enu.next(); 
    System.out.println(binding); 
} 

我做錯了嗎?

+0

我沒有模塊,只有web應用程序。我試圖重新部署它,它也應該重新啓動它。 –

+0

我已經更改了'的值'並且EJB會打印它。但我想通過'asadmin'訪問設置的值。 –

+0

我也試過假。我試過所有組合。 –

回答

0

這似乎是一個錯誤 - 但我有另一種解決方案,以滿足您的需求。您可以使用glassfish中的自定義資源。您必須聲明自定義資源domain.xml中

<resources> 
 
    <custom-resource factory-class="org.glassfish.resources.custom.factory.PropertiesFactory" res-type="java.util.Properties" jndi-name="test/properties"> 
 
     <property name="aMessage" value="Hello World"></property> 
 
    </custom-resource> 
 
</resources>

,那麼你可以在代碼



public class Environment 
{ 

    public String getProperty() { 

     InitialContext ctx = new InitialContext(); 
     properties = (Properties) ctx.lookup("test/properties"); 
     if(properties == null) { 
      return "default value - hello"; 
     } 

     return properties.getProperty("aMessage");  

    } 

} 

這種方法的一個缺點是,定製的資源是全球性的使用爲整個域。但是這個解決方案的優點是可以通過使用asadmin和admin web控制檯來更改資源。