Java EE,将一个EJB注入到另一个EJB中

3

我遇到了一个问题,似乎无法解决。我想像这样将一个EJB注入到另一个中:

@Stateless
public class MainEJB {

    @EJB
    private HelperEJB helper;

}

@Stateless
public class HelperEJB implements HelperInterface {

}

正如您所看到的,HelperEJB是通过无接口视图公开的(注意:HelperInterface是来自外部库的接口,不是EJB接口)。这种方法行不通,会出现以下异常:

 javax.naming.NamingException: Lookup failed for 'org.mycompany.ejb.HelperEJB #org.mycompany.ejb.HelperEJB'

然而,如果HelperEJB没有实现任何接口:
@Stateless
public class HelperEJB {

}

这将起作用。如果我在MainEJB和HelperEJB之间有一个@Local接口,它也会起作用。

为什么不能像我第一次尝试那样通过无接口视图来完成?

2个回答

3

如果您的私有字段是使用接口声明的,那么您的第一个示例应该可以工作,就像这样:

@Stateless
public class MainEJB {
    @EJB
    private HelperInterface helper; // changed this
}

@Stateless
public class HelperEJB implements HelperInterface {
}

@Local
public interface HelperInterface {
}

谢谢,它确实有效。为什么会这样呢?如果通过无接口视图注入另一个EJB,则必须引用其任何接口(如果它实现了任何接口)? - Ariod
1
@Dario,就像Arjan Tijms在他的帖子中所说的那样。 - deltaforce2

2

当EJB没有实现任何(业务)接口时,就会创建一个无接口视图。

您可以使用@LocalBean注解来明确声明您需要一个无接口视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接