Поиск EJB с использованием InitialContext в Weblogic 10.x.x - PullRequest
6 голосов
/ 17 августа 2011

Не могли бы вы рассказать мне, как искать EJB в Weblogic?
У меня есть следующий компонент:

@Stateless
@EJB(name = "DataAccess", beanInterface = DataAccessLocal.class)
public class DataAccess implements DataAccessLocal {
    ...
}

Мне нужен этот компонент в другом классе, который не является частью управляемого содержимого (просто простой класс), поэтому я думаю, что это должно быть сделано так:

DataAccessLocal dataAccess = DataAccessLocal.class.cast((new InitialContext()).lookup("%SOME_JNDI_NAME%"));

Вопрос в том, что следует использовать в качестве% SOME_JNDI_NAME% в случае Weblogic 10.xx AS?
Любая помощь будет оценена.

1 Ответ

9 голосов
/ 17 августа 2011

Я бы обновил ваш класс EJB, чтобы он выглядел так:

@Stateless(name="DataAccessBean", mappedName="ejb/DataAccessBean")
@Remote(DataAccessRemote.class)
@Local(DataAccessLocal.class)
public class DataAccess implements DataAccessLocal, DataAccessRemote {
    ...
}

Поиск EJB из класса, развернутого в том же EAR (с использованием локального интерфейса):

InitialContext ctx = new InitialContext(); //if not in WebLogic container then you need to add URL and credentials.
// use <MAPPED_NAME>
Objet obj = ctx.lookup("java:comp/env/ejb/DataAccessBean");

EJB-инъекция обычно предпочтительна, и вы можете сделать это следующим образом:

@EJB(name="DataAccessBean")
DataAccessLocal myDataAccessBean;

Если вы пытаетесь использовать EJB удаленно, вам нужно будет использовать удаленный интерфейс и следующее имя JNDI:

DataAccessBean#<package>.DataAccessRemote
...