получить и установить <env-entry> с удаленного клиента - PullRequest
1 голос
/ 02 февраля 2012

У меня есть EJB TimeServiceEJB с удаленным интерфейсом TimeService.В дескрипторе Deploy моего EJB-модуля есть:

<ejb-name>TimeServiceEJB</ejb-name>
...
<env-entry>
    <description>... </description>
    <env-entry-name>variable</env-entry-name>
    <env-entry-type>java.lang.Integer</env-entry-type>
    <env-entry-value>10</env-entry-value>
</env-entry>

Мне нужно получить эту переменную из клиентского приложения и иметь возможность ее редактировать.Я пытаюсь сделать это так:

Properties p = new Properties();
p.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
p.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
p.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
p.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
p.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext iniCtx = new InitialContext(p);
Integer variable = (Integer) iniCtx.lookup("java:comp/ejb/TimeServiceEJB/variable");

Но я ничего не получил.Пытался искать по-разному («java: global / ejb / TimeServiceEJB / variable», «java: comp / env / TimeServiceEJB / variable», «java: global / ear-name / module-name / TimeServiceEJB /) - всегда имел"javax.naming.NameNotFoundException: объект не привязан для ..."

Попытка установить mappingName этой переменной с помощью annotaion @Resource (name = "variable", mappedName = "env / variable") и поискаот "env / variable", но получил NameNotFoundException.

Есть ли идеи, как получить эту переменную? И второй вопрос: могу ли я отредактировать ее значение?

1 Ответ

2 голосов
/ 02 февраля 2012

Есть ли идеи, как получить эту переменную?

Записи среды видны только в контексте именования компонента приложения (т. Е. java:comp/env из InitialContext в EJBили веб-модуль, где он объявлен).(Исключение: Java EE 6 предоставляет способы объявления и доступа к записям модуля, приложения и глобальной среды, но для них требуются специальные префиксы записи среды. См. EE.5.2.2 из спецификации Java EE 6 длядополнительная информация.)

И второй вопрос: могу ли я изменить его значение?

Невозможно изменить значения записи среды в JNDI во время выполнения.Я бы предложил использовать для вашего EJB отдельный метод, который получает и устанавливает это значение локально.

...