2010-11-28 145 views
1

我试图使用struts 1.3 API来使用EJB 3.0创建一个小型应用程序。不幸的是,我不能使用@EJB批注从我的操作类中调用我的bean对象。我已经使用不同的解决方法解决了这个问题(第一个是使用我的bean的全局jndi名称,另一个是先调用另一个类并使用该类中的@EJB注释)。这两个解决方法仍然有很大的缺点。我想直接从我的操作类中调用我的EJB。我已经阅读了大量使用“java:comp/env/beanName”JNDI名称的示例,但仍然没有弄清楚如何做到这一点,并获取名称没有找到的立场。 让本地EJB类的全名是com.ejb.myEjbPackage.MyEJBLocal,如何使用上下文查找来调用它? (我可以做到这一点,而无需修改任何web.xml和sun-web.xml描述符?) 我正在使用glassfish服务器和Netbeans IDE。使用InitialContext.lookup()方法找不到我的bean

预先感谢您

回答

1

我找到了答案: 如果你不能在要调用bean的类中使用EJB注释,那么: 如果你不想混淆XML描述符来定义你的bean,你必须这样做在bean类本身中。 因此我用下面的注释在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"); 
2

@EJB不会在一个标准的POJO工作,它只能在管理对象来完成(即另一个会话Bean)

所以......

这里的你的bean

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

这是你查找

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

您可以对mappedName进行进一步阅读,看看是否要使用它。