Oc4j: вызов локального EJB из веб-приложения в том же EAR - PullRequest
0 голосов
/ 17 января 2012

У меня EAR-приложение содержит два модуля.

Модуль EJB и веб-модуль.

В веб-модуле я пытаюсь получить ссылку на какой-нибудь EJB SLSB, я неt используется инъекция , так как класс, в котором мне нужно вызвать метод, не управляется .

Я использую следующий код из веб-модуля:

IFooBarService service = InitialContext.doLookup("IFooBarService");

IFooBarService: локальный интерфейс, который определен как (в модуле ejb):

@Local
public interface IFooBarService
{
    // ...
}

Я что-то пропустил?(я должен предоставить информацию об окружающей среде?)

Ответы [ 2 ]

1 голос
/ 17 января 2012

Вы уверены, что IFooBarService - это имя JNDI, к которому привязан сервис IFooBarService? Например, JBoss показывает имена JNDI в журнале загрузки. Затем вы можете использовать его для поиска.

В общем, если вы хотите, чтобы ваше приложение было переносимым, вам не следует полагаться на серверный механизм для генерации имен JNDI, поскольку спецификация Java EE имеет свои собственные. Вы должны быть в состоянии сделать:

IFooBarService service = InitialContext.doLookup("java:comp/env/IFooBarService");

Если вы используете более новые версии Java EE (Java EE 6) и хотите найти EJB, который находится в том же приложении, но в другом модуле, вы можете сделать:

IFooBarService service = InitialContext.doLookup("java:app/[module name]/IFooBarService");

Подробнее о стандартных именах здесь .

0 голосов
/ 18 января 2012

Отсюда: https://forums.oracle.com/forums/thread.jspa?threadID=476903

Решение:

fooBarService = (FooBarService) ((StatelessSessionDefaultLocalHome)
    new InitialContext().lookup("EJBModuleName_FooBarServiceLocal")).create();
...