2011-12-28 18 views
2

我正在使用部署到JBoss AS 5.1的EJB3.1,所以我正在使用@EJB注入。從另一個EJB調用時,它很好用。像這樣的bean:EJB3.1 - 可能在沒有JNDI查找的情況下啓動@EJB注入鏈?

@Stateless (mappedName = "daos/MyDao") 
public class MyDAO implements MyDaoRemote { 

@PersistenceContext(unitName = "myEm") 
private EntityManager em; 

將其注入到這個其他的bean

@Stateless(mappedName = "handler/MyHandler") 
public class MyHandler implements MyHandlerRemote { 

@EJB(mappedName = "daos/MyDao") 
private MyDaoRemote myDao; 

然而,我的應用程序從一個POJO開始。我不認爲你可以在EJB之外使用@EJB注入...因此,是否可以在不使用JNDI查找的情況下獲取MyHandler?此代碼的工作原理:

return (MyHandlerRemote) new InitialContext().lookup("handler/MyHandler"); 

但我希望避免做這種查找。在Seam和Spring中,似乎對類的註釋掃描更容易。

我可能不需要@EJB注入,但我喜歡讓容器管理我的PersistenceContext和自動佈線。

似乎Weld可以提供幫助,但我不認爲它可以在JBoss AS 5.1中工作,Spring也是如此,但似乎應該有一個沒有JNDI查找的EJB的起點。

在此先感謝。

+1

海事組織,無論你想實現的目標是不可能沒有CDI。 – 2011-12-28 20:28:37

+2

試試這個: Forty 2011-12-28 20:32:02

+0

無賴......只有我知道的JSR-299實現是Weld和Guice,似乎就像解決一個非常基本的問題一樣。 – javatestcase 2011-12-28 20:38:56

回答

3

您可以使用Seam在運行於JBoss AS 5.1下的POJO中注入EJB,而無需進行JNDI查找 - 而是使用Seam的@In註釋。

+0

我熟悉Seam,並且我同意它會工作。我猜想,自從Seam在JSR之前使用了一個Weld版本之後,它非常相似。由於我不認爲這個問題能夠真正解決,所以這和我們所能做的一樣好。 – javatestcase 2011-12-29 01:09:44

相關問題