我正在尝试使用JTA数据源实例化一个EntityManager,但我总是得到NullPointerException。 这是我的环境: 服务器:JBossAS 7.0 JPA:2.0 DB:MySQL
的persistence.xml
<?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="WebStock" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>stockmanagementDS</jta-data-source>
<class>prv.stockmanagement.business.Product</class>
</persistence-unit>
</persistence>
在dao课上我正在尝试这个:
@PersistenceContext(type=PersistenceContextType.EXTENDED, unitName="WebStock")
private EntityManager em;
但是当我使用它的getter时,我在这里得到NullPointerException:
public EntityManager getEntityManager() {
return em;
}
调试显示它为空。
这是standalone.xml中的数据源定义:
<datasource jndi-name="stockmanagementDS" pool-name="stockmanagement" enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>
jdbc:mysql://localhost:3306/kitchen_stock
</connection-url>
<driver>
mysql
</driver>
<security>
<user-name>
root
</user-name>
<password>
rootroot
</password>
</security>
<statement>
<prepared-statement-cache-size>
100
</prepared-statement-cache-size>
<share-prepared-statements/>
</statement>
</datasource>
“mysql”是我在数据源之后定义的驱动程序的名称:
<drivers>
<driver name="mysql" module="com.sql.mysql">
<driver-class>
com.mysql.jdbc.Driver
</driver-class>
</driver>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>
org.h2.jdbcx.JdbcDataSource
</xa-datasource-class>
</driver>
</drivers>
持久性属于META-INF,它是动态的Web项目,并且运行良好。使用实体管理器的分类不是EJB。
任何提示?
答案 0 :(得分:0)
让我提请你注意以下几点:
1。我在您的代码driver
中没有看到您从datasource
引用的MySql:
<driver>
mysql
</driver>
你桅杆确实遵循:
输入文件路径 $ {jboss_home} / modules 并创建目录 com / mysql / jdbc / main 。进入文件夹 main 复制驱动程序库jar(例如 mysql-connector-java-5.1.38-bin.jar )并创建文件 module.xml 强>:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql.jdbc">
<resources>
<resource-root path="mysql-connector-java-5.1.38-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
standalone.xml 中的<drivers>
标记添加:
<driver name="mysql" module="com.mysql.jdbc">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
2。您可以将 persistence.xml 放入网络模块中:
web
src
main
java
..
resources
META-INF
persistence.xml
webapp
..
3。您只能将EntiryManeger
注入EJB
或带有@Transactional
注释的课程。检查以确保您的DAO类是EJB bean。