[英]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;
}
}
除此之外,對您的代碼的一些反饋:
檢查Resources
中的@Produces
是javax.enterprise.inject.Produces
而不是javax.ws.rs.Produces
,如果不檢查import部分,您的IDE可能javax.enterprise.inject.Produces
您javax.enterprise.inject.Produces
我建議您取消注釋代碼的@PersistenceContext
部分。 避免在Java EE應用程序中手動生成它:您將失去許多Java EE的即用型功能。
您不應在自己的對象中添加休眠依賴,因為它由WildFly提供。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.