2011-06-15 122 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批註明確聲明您需要無界面視圖。