1

我曾尝试使用 struts 1.3 API 来制作带有 EJB 3.0 的小型应用程序。不幸的是,我不能使用 @EJB 注释从我的动作类中调用我的 bean 对象。我已经使用不同的解决方法解决了这个问题(第一个是使用我的 bean 的全局 jndi 名称,另一个是首先调用另一个类并使用该类的 @EJB 注释)。这两种解决方法仍然有很大的缺点。我想直接从我的操作类中调用我的 EJB。我已经阅读了很多使用“java:comp/env/beanName”JNDI 名称的示例,但仍然没有弄清楚如何做到这一点并得到 name not found 异常。让本地 EJB 类的全名是 com.ejb.myEjbPackage.MyEJBLocal,如何使用上下文查找来调用它?(我可以在不修改任何 web.xml 和 sun-web.xml 的情况下做到这一点吗?

先感谢您

4

2 回答 2

2

@EJB 不能在标准 pojo 中工作,它只能在托管对象(即另一个会话 bean)中完成

所以...

这是你的豆子

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

这是您的查找

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

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

于 2010-11-29T15:58:19.757 回答
1

我找到了答案:如果您不能在要调用 bean 的类中使用 EJB 注释,那么:如果您不想弄乱 XML 描述符来定义您的 bean,则必须在 bean 类本身中进行。因此我在 GameBean 类中使用了以下注释

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

beanName 是可选的。注释必须在类声明的上方行中声明。然后,为了从其他类调用 bean,您可以这样做

     InitialContext ic = new InitialContext();
     ic.lookup("java:comp/env/ejb/GameBean");
于 2010-12-21T12:05:16.767 回答