首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA:通过覆盖数据源,在JSE和JUnit中使用jta数据源重用JUnit。

JPA:通过覆盖数据源,在JSE和JUnit中使用jta数据源重用JUnit。
EN

Stack Overflow用户
提问于 2018-07-25 08:38:33
回答 1查看 696关注 0票数 0

我有一个部署在peristence.xml上的WildFly:

代码语言:javascript
复制
  <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

代码语言:javascript
复制
    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属性来覆盖jta-data-source,但没有成功:

代码语言:javascript
复制
    // 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,它们的失败结果与上面相同。

EN

回答 1

Stack Overflow用户

发布于 2018-07-25 12:42:29

据我所知,从Hibernate ORM的来源(特别是org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl#EntityManagerFactoryBuilderImpl(org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor, java.util.Map, java.lang.ClassLoader, org.hibernate.boot.registry.classloading.spi.ClassLoaderService))来看,这些特定的JPA设置会覆盖来自hibernate.properties或您将提供给Persistence.createEntityManagerFactory的地图中的设置。

这可能是一个愚蠢的想法,但您不能做相反的事情,即不是在持久化单元中设置数据源,而是通过WildFly应用程序中的一个WildFly文件来设置它?然后,您可以在普通的java应用程序中做您想做的任何事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51514433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档