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

时间:2011-06-15 08:46:35

标签: java-ee ejb

我遇到了一个我似乎无法弄清楚的问题。我想像这样将一个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 个答案:

答案 0 :(得分:2)

如果您的私有字段是使用界面声明的,那么您的第一个示例应该有效:

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

@Stateless
public class HelperEJB implements HelperInterface {
}

@Local
public interface HelperInterface {
}

答案 1 :(得分:2)

只有在EJB未实现任何(业务)接口时才会创建无接口视图。

您可以使用@LocalBean注释显式声明您需要无界面视图。