2011-06-15 40 views
2

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

你的第一个例子应该,如果你的私人领域使用接口中声明,这样的工作:

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

@Stateless 
public class HelperEJB implements HelperInterface { 
} 

@Local 
public interface HelperInterface { 
} 
+0

谢谢,它确实有效。为什么?如果另一个EJB通过非接口视图注入,它必须被它的一个接口引用,如果它实现的话。 – Dario 2011-06-15 08:57:31

+1

@Dario就像Arjan Tijms在他的帖子中所说的那样。 – deltaforce2 2011-06-15 09:08:06

2

当EJB没有实现任何(商业)接口无接口视图只创建。

您可以使用@LocalBean批注明确声明您需要无界面视图。