WebSphere в приложении. xml и внедрение @Resource - PullRequest
0 голосов
/ 01 мая 2020

Я не могу внедрить записи среды из приложения . xml, используя аннотацию @Resource в моем приложении WebSphere 8.5.5. (Я не хочу перемещать запись до уровня компонента ejb-jar. xml.) Что мне не хватает?

приложение. xml:

<application
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"
        version="6">

    <env-entry>
        <env-entry-name>fileName</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>theValue</env-entry-value>
    </env-entry>

При этом I do см. "FileName", определенное как "theValue" в разделе консоли администратора WebSphere Записи среды для приложения . Пока я не могу понять, как получить к нему доступ из моего EJB.

StartupBean. java:

@Singleton
@Startup
public class StartupBean {
    @Resource(name = "fileName")
    private String fileName = "default";

fileName всегда «по умолчанию», а не «theValue».

Я попытался выполнить поиск вручную, используя "java: comp" и "java: app" (как предложено this thread ), но оба бросили NamingException

Context ctx = new InitialContext();
fileName = (String) ctx.lookup("java:comp/env/fileName");
fileName = (String) ctx.lookup("java:app/env/fileName");

1 Ответ

1 голос
/ 01 мая 2020

Ресурсы, объявленные в application.xml, должны использовать префикс java:app/env или java:global/env, поэтому он должен выглядеть следующим образом:

<env-entry>
    <env-entry-name>java:app/env/fileName</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>theValue</env-entry-value>
</env-entry>

Тогда внедрение в поле будет следующим:

@Resource(name = "java:app/env/fileName")
private String fileName = "default";
...