加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何修改GlassFish中的Web环境条目4

发布时间:2020-12-14 05:18:43 所属栏目:Java 来源:网络整理
导读:在我的web.xml中,我的webapp应用程序我有以下元素: env-entry env-entry-nameaMessage/env-entry-name env-entry-typejava.lang.String/env-entry-type env-entry-valueHello World/env-entry-value/env-entry 这个Web应用程序中的EJB可以读取它: final In
在我的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.

不幸的是,即使在重新启用此webapp或重新启动Web服务器之后,我的EJB仍会打印旧值“Hello World”.

我还试图为web.xml中未定义的名称设置web-env-entry,并且还使用–ignoredescriptoritem参数进行了设置,但没有任何帮助.枚举整个环境也没有显示任何额外的或改变的Web环境条目,但显示他的旧的加上许多其他与此问题无关的对象:

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

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

我做错了什么?

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读