Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa Can';t使用JTA数据源创建EntityManager_Jpa_Jboss7.x - Fatal编程技术网

Jpa Can';t使用JTA数据源创建EntityManager

Jpa Can';t使用JTA数据源创建EntityManager,jpa,jboss7.x,Jpa,Jboss7.x,我试图使用JTA数据源实例化EntityManager,但我总是得到NullPointerException。 这是我的环境: 服务器:JBossas7.0 JPA:2.0 数据库:MySQL persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="

我试图使用JTA数据源实例化EntityManager,但我总是得到NullPointerException。 这是我的环境: 服务器:JBossas7.0 JPA:2.0 数据库: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>
但是当我使用它的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>

jdbc:mysql://localhost:3306/kitchen_stock
mysql
根
根
100
“mysql”是我在数据源之后定义的驱动程序的名称:


com.mysql.jdbc.Driver
org.h2.jdbcx.JdbcDataSource

持久性在META-INF下,它是一个动态的web项目,并且运行良好。使用实体管理器的分类不是EJB


有什么提示吗?

让我提醒您注意以下时刻:

1.我没有看到您从
数据源
中引用的MySql的代码
驱动程序

<driver>
   mysql
</driver>

3.您只能将
EntityManeger
注入
EJB
或带有
@Transactional
注释的类中。检查以确保您的DAO类是EJB bean。

1-谢谢您的回答。我编辑了我的问题,以便您可以找到驱动程序定义部分和更多信息。我应该改用吗?我使用的是5.1.18版本的mysql,我做的和你展示的一样(除了我使用的路径),2-是的,持久性在META-INF文件夹下。3-它不是EJB,应该是吗?否则我怎么能使用PersistenceUnit呢
<driver>
   mysql
</driver>
<?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>
<driver name="mysql" module="com.mysql.jdbc">
  <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
web
  src
    main
      java
        ..
      resources
        META-INF
          persistence.xml
      webapp
        ..