问题描述
|
我遇到了一个似乎无法解决的问题。我想像这样将一个EJB注入另一个EJB:
@Stateless
public class MainEJB {
@EJB
private HelperEJB helper;
}
@Stateless
public class HelperEJB implements HelperInterface {
}
如您所见,HelperEJB是通过无接口视图公开的(注意:“ 1”是来自外部库的接口,它不是EJB接口)。这不起作用,并且我将得到以下异常:
javax.naming.NamingException: Lookup Failed for \'org.mycompany.ejb.HelperEJB #org.mycompany.ejb.HelperEJB\'
但是,如果“ 3”未实现任何接口:
@Stateless
public class HelperEJB {
}
会的。如果我在MainEJB和HelperEJB之间有一个@Local
接口,它也将起作用。
为什么不能像我第一次尝试那样通过无接口视图完成此操作?
解决方法
如果使用接口声明私有字段,则第一个示例应该可以工作,如下所示:
@Stateless
public class MainEJB {
@EJB
private HelperInterface helper; // changed this
}
@Stateless
public class HelperEJB implements HelperInterface {
}
@Local
public interface HelperInterface {
}
, 仅当EJB不实现任何(业务)接口时,才创建无接口视图。
您可以使用@LocalBean批注明确声明您需要无接口视图。