Поиск EJB с использованием InitialContext в Weblogic 10.x.x

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

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

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

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

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


person kardanov    schedule 17.08.2011    source источник
comment
Я ответил на это в другом месте: stackoverflow.com/questions/676926/giving-an-ejb-a-jndi/   -  person Nuno Furtado    schedule 17.08.2011
comment
Спасибо @Nuno. Это работает только для удаленного интерфейса? Или тоже местные?   -  person kardanov    schedule 17.08.2011
comment
Не уверен в этом, так как я работал только с удаленными интерфейсами.   -  person Nuno Furtado    schedule 25.08.2011


Ответы (1)


Я бы обновил ваш класс 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
person Community    schedule 17.08.2011
comment
Спасибо, @Jeff, я только что попробовал (с локальным интерфейсом) и получил следующее исключение: (у меня нет полной трассировки стека, но основная часть есть) оставшееся имя: env/ejb/DataAccessBean. У тебя есть идеи? - person kardanov; 17.08.2011
comment
рад помочь по электронной почте - [email protected]. Мы можем опубликовать решение здесь, когда мы закончим... - person Jeff West; 17.08.2011
comment
Кроме того, если вы пытаетесь получить доступ к EJB из-за пределов EAR, где EJB развернут, или если EJB развернут в своем собственном ejb-jar, вам нужно будет подать в суд на удаленный метод. - person Jeff West; 17.08.2011
comment
Спасибо. Пока мне достаточно использования удаленного интерфейса, но это странно, потому что я звоню с того же EAR. Если у вас будут какие-либо идеи по поводу проблемы, было бы неплохо, если бы вы дали мне знать. - person kardanov; 18.08.2011
comment
Сгенерированное имя JNDI работает только с классом удаленного интерфейса. Локальный интерфейс не добавляется в JNDI в WebLogic 10.3.x. Я описываю это более подробно здесь - person pharsicle; 17.04.2013