有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA:重用持久性。通过覆盖数据源,在JSE和JUnit中使用jtadatasource的xml

我在WildFly上部署了这个peristence.xml

  <persistence-unit name="optaweb-employee-rostering-persistence-unit" transaction-type="JTA">
    <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
    ...
  </persistence-unit>

现在,我想在一个普通的Java应用程序中重用它,使用直接的JDBC连接,因此不使用JNDI

    Map<String, String> properties = new HashMap<>();
    properties.put("javax.persistence.jdbc.driver", "org.hsqldb.jdbcDriver");
    properties.put("javax.persistence.jdbc.url", "jdbc:hsqldb:mem:testdb");
    properties.put("javax.persistence.jdbc.user", "sa");
    properties.put("javax.persistence.jdbc.password", "");

    // Overwrites transaction-type successfully 
    properties.put("javax.persistence.transactionType", "RESOURCE_LOCAL");

    // TODO overwrite jta-data-source

    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(
            "optaweb-employee-rostering-persistence-unit", properties);

如何覆盖jta-data-source


我尝试了许多JPA属性来覆盖^{,但没有成功:

    // Overwrites jta-data-source
    // but triggers a JNDI lookup of "" which crashes of course
    properties.put("javax.persistence.jtaDataSource", "");
    // Does not overwrite jta-data-source
    properties.put("javax.persistence.jtaDataSource", null);

    // Does not overwrite jta-data-source
    properties.put("javax.persistence.nonJtaDataSource", "foo");

我还尝试了一些特定于hibernate的属性,比如hibernate.transaction.coordinator_classhibernate.connection.datasource,但失败的结果与上面相同


共 (0) 个答案