EntityManager在ejb容器中的Pojo类中为null

时间:2013-10-16 07:46:04

标签: java-ee jpa ejb entitymanager

我有一个Java Web服务模块和ejb模块netbeans(企业应用程序的所有部分)。 Web服务使用@EJB注入消耗ejb类。 在ejb模块中,我有一个TransactionManager类,它不是企业bean。只是一个POJO课程。我正在尝试使用

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

但是em总是空的。 我正在通过bean调用TransactionManager类,如果我在bean类中声明了EntityManager声明,它会在bean类中注入。但是在POJO中它始终为空。

我是EJB的新手(使用版本JEE7)。你可以指导我吗?

回复Shailendra: 我的bean和pojo在同一个jar文件中,它有bean.xml和persistence.xml。 我尝试使用@Stateless和@Local将TransactionManager类作为bean,但是在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);
        }
    }

并且TransactionManager类是我希望为PersistenceContext完成依赖注入的类

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

3 个答案:

答案 0 :(得分:0)

POJO不受容器管理。而豆子是由容器和管理员管理的。负责注入资源。

您可以尝试JNDI查找来查找容器不负责的非托管自定义类的资源。

答案 1 :(得分:0)

原因是您的POJO不受容器管理。如果您的容器支持CDI(上下文依赖注入),那么在bean存档中声明您的bean(在META-INF或WEB-INF中使用beans.xml)以便进行管理。

答案 2 :(得分:0)

您应该使用 @Inject Annotation 而不是使用 new-operator 创建实例。

  1. 创建 \WEB-INF\beans.xml(在 Netbeans 中有一个向导)并设置 bean-discovery-mode="all"

  2. 这是您的“MyService”的代码:您的还是我的? :-)

     @Stateless
     @Local(IMyService.class)
     public class MyService extends MyBase implements IMyService {
    
         @Inject
         private MyComponent component;
    
         public void doSomething(X x)
         {
              component = new MyComponent();
              component.doSomething(x);
         }
     }
    
  3. 这是你的“我的组件”:-)

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