2013-10-16 55 views
0

我有一個Java Web服務模塊和ejb modulein netbeans(企業應用程序的所有部分)。 Web服務正在使用@EJB注入來使用ejb類。 在ejb模塊裏面我有一個TransactionManager類,它不是一個企業bean。只是一個POJO課程。我試圖注入EntityManager使用EntityManager在ejb容器中的Pojo類內部爲null

@PersistanceContext(unitName = "testPU") 
    EntityManager em; 

但em是allways null。 我從bean中調用TransactionManager類,如果我在bean類中聲明瞭EntityManager聲明,它在bean類中注入得很好。但在POJO中它始終爲空。

我是EJB新手(使用版本JEE7)。你能指導我嗎?

回覆Shailendra: 我的bean和pojo在同一個jar文件中,它有bean.xml和persistence.xml。 我試圖使TransactionManager類爲bean,使用@Stateless和@Local,但在ejb類和TransactionManager類之間有一些POJO類,當我試圖從其父POjo類使用 訪問TransactionManager類時@EJB TransactionManager transactionManager; 該對象也返回null。

親愛Shilendra,感謝您的答覆 下面是我的EJB類

@Stateless 
    @Local(IMyService.class) 
    public class MyService extends MyBase implements IMyService 
    { 
     MyComponent component = null; 
     public void doSomething(X x) 
     { 
      component = new MyComponent(); 
      component.doSomething(x); 
     } 
    } 

我有一個POJO類作爲MyComponent的

public class MyComponent extends MyBase implements IMyComponent 
    { 
     TransactionManager tManager = null; 
     public void doSomething(X x) 
     { 
      tManager = new TransactionManager(); 
      tManager.doSomething(x); 
     } 
    } 

和事務管理類,我想依賴注入的類爲PersistenceContext完成

public class TransactionManager extends MyBase implements ITransactionManager 
    { 
      @PersistenceContext(unitName="TestPU") 
      EntityManager em; 
      public void doSomething(X x) 
      { 
       em.persist(x); 
      } 
    } 

回答

0

PO JO不受容器管理。而bean是由容器管理的&負責注入資源。

您可以嘗試使用JNDI查找來查找容器不負責的非託管自定義類的資源。

+0

嗨, 你能給我一個樣本 – vilsad

+0

@vilsad我對CDI做的不多,你可以試試'@Inject EntityManager'看它是否有效。 –

0

原因是你的POJO不是由容器管理的。如果你的容器支持CDI(上下文依賴注入),那麼在Bean檔案中聲明你的bean(在META-INF或WEB-INF中有beans.xml)以便管理。

+0

嗨, 請檢查我發佈在我的問題中的編輯。 – vilsad

+0

您能否發佈相關課程結構 – Shailendra

+0

我發佈了相關問題的相關代碼,雖然搜索我得到了一個謠言說這個問題是GlassFish特有的(有些搜索指出了這種方式)。但我無法用另一臺服務器測試它,因爲我找不到JEE7兼容的(Tomcat/JBoss)。 – vilsad