resteasy cdi producer null



>使用 放心,想管理我的实体经理。在 WEB-INF 中具有持久性.xml资源和 bean.xml。想要在以下情况下使用实体管理器:

public class EntityDao {
//    @PersistenceContext(unitName = "UserPersistenceUnit")
    @Inject
    private EntityManager entityManager;
    public void add(Object t) {
        try {
            System.out.println("start adding4.");
            if (entityManager == null) {
                System.out.println("entity manager is null.");
                entityManager = Persistence.
                        createEntityManagerFactory("UserPersistenceUnit").
                        createEntityManager();
                if (entityManager != null) {
                    System.out.println("entity manager created.");
                }
            }
//            entityManager.getTransaction().begin();
//            entityManager.persist(t);
//            entityManager.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
}

我的制片人是:

@ApplicationScoped
public class Resources {
//    @PersistenceContext
//    @Produces
//    private EntityManager entityManager;
    @Produces
    public EntityManager getEntityManager() {
        System.out.println("get enrity manager.");
        EntityManager entityManager = Persistence.
                createEntityManagerFactory("UserPersistenceUnit").
                createEntityManager();
        return entityManager;
    }
}

但我的实体管理器为空。有人可以帮忙吗?

我的休息代码是:

@Path("/userreg")
public class UserRegistration {
    User user;
    @GET
    @Produces({"application/json", "application/xml"})
    public User UserRegister() {
        UserDao userDao = new UserDao();
        user = new User();
        user.setUserName("u1");
        user.setPassword("p1");
        userDao.add(user);
        return user;
    }
}

而用户道是:

public class UserDao extends EntityDao{
}

我的诗是:

<dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901.jdbc4</version>
        </dependency>
    </dependencies>

在实体道中,我的实体管理器具有@Inject为空,生产者不起作用。感谢。

你的错误在这里

UserDao userDao = new UserDao();

如果您自己使用new实例化类,则它不会由 CDI 管理,因此@Inject将被忽略,您的字段将为空。

所以正确的代码是:

@Path("/userreg")
public class UserRegistration {
    User user;
    @Inject
    UserDao userDao;
    @GET
    @Produces({"application/json", "application/xml"})
    public User UserRegister() {
        user = new User();
        user.setUserName("u1");
        user.setPassword("p1");
        userDao.add(user);
        return user;
    }
}

除此之外,还有一点关于你的代码的反馈:

  1. 检查Resources中的@Produces是否为 javax.enterprise.inject.Produces而不是javax.ws.rs.Produces,如果你不检查导入,你的IDE可能会给你一个糟糕的把戏部分

  2. 我建议您取消注释代码的@PersistenceContext部分。避免在Java EE应用程序中手动生成它:您将失去Java EE的许多开箱即用的功能。

  3. 您不应该添加包含在 peoject 中的休眠依赖项,因为它是由 WildFly 提供的。

最新更新