我正在使用Jboss提供的JPA庫開始基於struts2的應用程序。 我已經在standalone.xml中配置了數據源,我可以從jboss管理控制檯看到數據源已經創建了 。並讀取並處理presistence.xml文件。 但是,如果我檢查Action Class中的EntityManager實例。它總是說空。JPA EntityManager未在struts2和JBOSS 7.1中初始化
這是我的persistence.xml和Action類片斷
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/mysqlDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.use_sql_comments" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>
Struts2的Action類:
public class RegistrationAction extends ActionSupport implements SessionAware,Preparable ,ModelDriven{
/**
*
*/
private static final long serialVersionUID = 1L;
@PersistenceContext(unitName="primary")
private EntityManager em;
@Override
public Object getModel() {
// TODO Auto-generated method stub
return null;
}
@Override
public void prepare() throws Exception {
if(em==null)
System.out.println(" EM is null still..");
//even Persistence.createEntityManagerFactory("primary"); returning NULL
}
@Override
public void setSession(Map<String, Object> arg0) {
// TODO Auto-generated method stub
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
}
一對夫婦的建議,因爲我不知道確切的答案。你使用容器還是bean管理持久性?如果CMT,那麼你有沒有嘗試注入entityManagerFactory而不是entityManager? – Atul 2014-11-24 06:08:34
我沒有使用EJB。它適用於Web組件嗎? – user1493834 2014-11-24 06:42:09
是的,它的確如此。就像最初的建議一樣,嘗試注入entityManagerFactory而不是entityManager。你可以谷歌如何做到這一點。如果你得到不同的答案,首先嚐試他們的方法,因爲我不確定entityManagerFactory的增值。 – Atul 2014-11-24 07:37:38