Как изменить запись веб-среды в GlassFish 4

В моем web.xml приложении my 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>

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:

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

К сожалению, мой EJB по-прежнему печатает старое значение "Hello World" даже после повторного включения этого webapp или перезапуска веб-сервера.

Я также пробовал 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);
}

Что я делаю неправильно?

Ответ 1

Кажется, это ошибка, но у меня есть другое решение для ваших нужд. Вы можете использовать пользовательские ресурсы, которые доступны в стеклянной платке. Вы должны объявить пользовательский ресурс в 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>