2014-07-04 40 views
0

看着this answer,它說:如何使@EJB注射在服務器上工作?

如果你不想使用的應用程序客戶端容器,而是隻運行通過java命令的應用程序客戶端類,注射是不可能的,你會必須執行JNDI查找。

然而,鑑於我試圖注入DAO豆like the example shown here,如果我不能做到自動注射,這意味着我的應用程序必須手動JNDI查找,所有的交易開始/結束,我會得到如果@EJB實際工作,則免費。

但是,因爲所有東西都在同一個Eclipse EJB項目中(當我在Dynamic Web Project中有我的客戶端代碼時,它也失敗了同一個空的句柄),當然必須有一個簡單的方法來讓它工作?任何人都可以提出我做錯了什麼?

最後,this article suggests不需要的DAO的,但如果我代替我的EJB中:用更直接的

@EJB MyDao dao; 

@PersistenceContext private EntityManager em; 

我仍然得到同樣的空值;這是相同的注射失敗問題嗎?


NB:我剛纔注意到this answer

這是一個bug in Glassfish(顯然是在Web服務棧)。

我正在運行v4.0 Build 89,它還有這個bug嗎?這是否意味着我必須以冗長的方式來執行所有JPA操作?

回答

0

我最終發現問題是爲了使用注入@PersistenceContextMUST必須是一個bean本身。這是在暗示the example on Wikipedia

@Stateless 
public class CustomerService { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public void addCustomer(Customer customer) { 
    entityManager.persist(customer); 
    } 
} 

我可以刪除這個問題,但也許離開這個答案可能會提供一個線索的人,或者至少表明他們EJB和JPA的最小工作示例。