EAP 6.4.7,应用程序需要访问使用 H2 数据库的 Jboss 中配置的数据源。实体管理器未在 DAO 层中设置,并且返回 null。我感谢任何帮助纠正或建议任何想法。不幸的是,该应用程序不使用Spring上下文,它将是普通的JPA-Hibernate模型来访问数据库。
以下是独立的.xml摘录。
<datasource jta="false" jndi-name="java:/ecmConfigDS" pool-name="ecmConfigDS" enabled="true" use-ccm="true">
<connection-url>jdbc:h2:tcp://localhost/~/ecmconfig</connection-url>
<driver-class>org.h2.Driver</driver-class>
<driver>h2</driver>
<security>
<user-name></user-name>
</security>
</data source>
坚持不懈.xml
<persistence-unit name="ecmFunctionalRoute">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:/ecmConfigDS</non-jta-data-source>
<class>gov.ny.otda.ecm.sharedservices.dao.entity.FunctionRoute</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
道.java
@PersistenceContext(unitName="ecmFunctionalRoute")
private EntityManager entityManager;
public E findByID(Long ID) throws DAOException {
return entityManager.find(entityClass, ID);
}
更改您的持久性.xml如下所示:
<persistence>
<persistence-unit name="prod" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/ecmConfigDS</jta-data-source>
.....
</persistence-unit>
</persistence>
并检查行为?
事务类型属性用于指定实体管理器工厂为持久性单元提供的实体管理器必须是 JTA 实体管理器还是资源本地实体管理器。此元素的值为 JTA 或 RESOURCE_LOCAL。JTA 的事务类型假定将提供 JTA 数据源 — 由 jta 数据源元素指定或由容器提供。通常,在 Java EE 环境中,事务类型的RESOURCE_LOCAL假定将提供非 JTA 数据源。在 Java EE 环境中,如果未指定此元素,那么缺省值为 JTA。在 Java SE 环境中,如果未指定此元素,缺省值为 RESOURCE_LOCAL。