当前位置: 首页 > 知识库问答 >
问题:

无法使用JTA数据源创建EntityManager

乐正辰阳
2023-03-14

我试图使用JTA数据源实例化EntityManager,但我总是得到NullPointerException。这是我的环境:服务器:JBossas7.0JPA:2.0DB:MySQL

坚持不懈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时,我在这里得到NullPointerExctive:

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"是我在数据源之后定义的驱动程序的名称:

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

有什么提示吗?


共有1个答案

魏健柏
2023-03-14

让我提请大家注意以下时刻:

1.我没有在您的代码驱动程序中看到您引用的MySql:

<driver>
   mysql
</driver>

你必须遵循:

输入文件路径${jboss_home}/modules并创建目录com/mysql/jdbc/main。将驱动程序库jar(例如mysql-connector-java-5.1.38-bin.jar)复制到主文件夹中,并创建一个文件模块。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>

<driver name="mysql" module="com.mysql.jdbc">
  <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>

2.也许你应该坚持下去。web模块中的xml:

web
  src
    main
      java
        ..
      resources
        META-INF
          persistence.xml
      webapp
        ..

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

 类似资料:
  • 我在Tomcat中得到以下错误: 我已经在JBOSS和嵌入式tomcat服务器中运行了这个,但仍然出现了这个错误。我甚至从war中取出jar文件,并从JBOSS中运行它,仍然得到相同的错误。 我能够创建EntityMangers,但在创建它们之前,我得到了上面的错误。程序继续运行比抱怨类不是托管类型。但是,这些正在被扫描。 我在JBoss中得到了同样的错误: 第二数据源 application.y

  • 创建数据源的基本步骤: 在工作区窗口中,点击 “新建数据源”。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“确定”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实时”模式或“存档”模式。 点击“应用并

  • 创建数据源的基本步骤: 在工作区窗口中,点击 。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“好”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实实时”模式或“存档”模式。 点击“应用并刷新数据”来查

  • 创建数据源的基本步骤: 在工作区窗口中,点击 “新建数据源”。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“确定”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实时”模式或“存档”模式。 点击“应用并

  • 我刚刚开始学习阿帕奇骆驼。我了解路线和组件的基本知识。现在,我想尝试连接到Oracle数据库,从一个特定表中读取记录,并使用组件将这些记录写入文件。为了从数据库中读取数据,我假设需要使用JDBC组件,并给出数据源名称。 但是,我找不到有关如何使用camel创建数据源的任何信息。我找到的与此主题相关的所有信息都使用了Spring DSL示例。我不使用Spring,我只需要使用简单的独立Java应用程

  • 我安装了Oracle 19c数据库软件。我试图用脚本创建一个数据库;我创建了一个监听器和pfile(参数)文件。然后键入这个命令, -- 在此之后; -- 当我输入这些命令时,屏幕上只有“2”。然后,任何事情都不会发生。