我想使用JTA數據源實例化一個EntityManager,但我總是得到NullPointerException。 這裏是我的環境: 服務器:JBossAS 7.0 JPA:2.0 DB:MySQL的無法使用JTA數據源創建EntityManager
的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>
持久性是間 - 下INF,它是動態的web項目,並且運行良好。使用實體管理器的分類不是一個EJB。
任何提示?
1 - 謝謝你的回答。我編輯了我的問題,以便找到驅動程序定義部分和更多信息。 我應該用來代替嗎?我使用的是5.1.18版本的mysql,我的方法和你所做的一樣(除了我使用的路徑) 2 - 是的持久性在META-INF文件夾下。 3 - 它不是一個EJB嗎?我怎樣才能使用PersistenceUnit呢? –
by 3 look http://stackoverflow.com/questions/4708035/persistencecontext-entitymanager-injection-nullpointerexception – HAYMbl4