簡體   English   中英

resteasy cdi生產者null

[英]resteasy cdi producer null

輕松使用,想管理我的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為null,並且生產者不工作。 謝天謝地了。

您的錯誤在這里

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 ,如果不檢查import部分,您的IDE可能javax.enterprise.inject.Producesjavax.enterprise.inject.Produces

  2. 我建議您取消注釋代碼的@PersistenceContext部分。 避免在Java EE應用程序中手動生成它:您將失去許多Java EE的即用型功能。

  3. 您不應在自己的對象中添加休眠依賴,因為它由WildFly提供。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM