не могу найти мой компонент с помощью метода InitialContext.lookup () - PullRequest
1 голос
/ 28 ноября 2010

Я попытался использовать API Struts 1.3 для создания небольшого приложения с EJB 3.0.К сожалению, я не могу использовать аннотацию @EJB для вызова моего объекта bean из моего класса действий.Я решил эту проблему, используя различные обходные пути (первое - это использование моего глобального jndi-имени моего bean-компонента, а другое - сначала вызвать другой класс и использовать аннотацию @EJB из этого класса).Тем не менее эти два обходных пути имеют существенные недостатки.Я хотел бы позвонить своему EJB прямо из моего урока действий.Я прочитал множество примеров, используя имя JNDI "java: comp / env / beanName", но до сих пор не выяснил, как это сделать, и получить имя не найдено.Пусть полное имя локального класса EJB будет com.ejb.myEjbPackage.MyEJBLocal, как я могу вызвать его с помощью поиска в контексте?(Могу ли я сделать это без изменения любого из дескрипторов web.xml и sun-web.xml?) Я использую сервер Glassfish и IDE Netbeans.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

@ EJB не будет работать в стандартном pojo, это может быть сделано только в управляемом объекте (то есть другом сессионном компоненте)

Итак ...

Вот ваш компонент

@Stateless(mappedName="beanName")
public class beanName implements beanNameRemote {

Вот ваш поиск

Context context = new InitialContext();  //default lookup pulls from jndi properties file
context.lookup("beanName");

Вы можете продолжить чтение mappedName, чтобы узнать, хотите ли вы его использовать или нет.

1 голос
/ 21 декабря 2010

Я нашел ответ: Если вы не можете использовать аннотацию EJB в классе, для которого вы хотите вызвать компонент, то: Если вы не хотите связываться с XML-дескрипторами для определения вашего компонента, вы должны сделать это в самом классе компонента. Поэтому я использовал следующую аннотацию в классе GameBean

     @Stateless
     @EJB(name="ejb/GameBean",beanInterface=GameBeanLocal.class,beanName="GameBean")
     public class GameBean implements GameBeanLocal {.....

beanName не является обязательным. Аннотация должна быть объявлена ​​в строке НАД объявлением класса. Затем, чтобы вызвать бин из другого класса, вы можете сделать

     InitialContext ic = new InitialContext();
     ic.lookup("java:comp/env/ejb/GameBean");
...