【问题标题】:How to modify web environment entry in GlassFish 4如何在 GlassFish 4 中修改 Web 环境条目
【发布时间】:2014-02-18 01:57:38
【问题描述】:

在我的web.xml 和我的webapp 应用程序中,我有以下元素:

<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>

此 Web 应用程序中的 EJB 可以读取它:

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 更改该值:

martin@bono:~/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.

martin@bono:~/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.

不幸的是,我的 EJB 仍然打印旧值“Hello World”,即使在重新启用此 Web 应用程序或重新启动 Web 服务器之后也是如此。

我还尝试使用set-web-env-entry 获取未在web.xml 中定义的名称,并且还使用了--ignoredescriptoritem 参数,但没有任何帮助。枚举整个环境也没有显示任何额外或更改的 Web 环境条目,但显示了旧的以及许多与此问题无关的其他对象:

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

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

我做错了什么?

【问题讨论】:

  • 我没有模块,只有 Web 应用程序。我已经尝试重新部署它,它也应该重新启动它。
  • 我更改了&lt;env-entry-value&gt; 的值,EJB 将其打印出来。但我想访问使用asadmin 设置的值。
  • 我也试过假的。我已经尝试了所有组合。
  • 我帮不了你,只是投了赞成票,祝你好运
  • 经过反复试验,我想为你提高this one,对不起,欢迎!

标签: java jndi glassfish-4


【解决方案1】:

这似乎是一个错误 - 但我有另一个解决方案可以满足您的需求。您可以使用 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 控制台更改资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多