【问题标题】:resteasy cdi producer nullresteasy cdi 生产者 null
【发布时间】:2015-04-08 00:51:35
【问题描述】:

使用rest easy,想管理我的entitymanager。 在WEB-INF 中有persistence.xml 资源和beans.xml。 想在以下位置使用 entitymanager:

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;
    }
}

而 UserDao 是:

public class UserDao extends EntityDao{

}

我的 pom 是:

<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>

在 EntityDao 中,我的具有 @Inject 的 EntityManager 为空,并且生产者不工作。 谢谢。

【问题讨论】:

  • 你的应用服务器是什么?你把persistence.xml 文件放在META-INF 中了吗?您是否在控制台上的生产者中看到 system.out 消息?
  • 没有在控制台中看到我的 sout。应用服务器是wildfly。持久性在 resources/META-INF 文件夹中。
  • 我想是 Wildfly 8.2.0 ......你能把 beans.xml 的内容放上去吗?此外,您的问题显然与 Resteasy 无关。您或许应该更正标题、标签和内容
  • 但我在休息类中使用了这种注入。 'xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean- discovery-mode="all"> '
  • 是的。它的野蝇 8.2.0 .

标签: java cdi resteasy producer


【解决方案1】:

你的错误在这里

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 中的@Producesjavax.enterprise.inject.Produces 而不是 javax.ws.rs.Produces, 如果您不检查导入,您的 IDE 可能会给您一个坏把戏 部分

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

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

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2022-10-12
    • 2013-09-17
    • 1970-01-01
    • 2017-09-04
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多