ฉันมี peristence.xml
สิ่งนี้ที่ปรับใช้บน WildFly:
<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 จำนวนหนึ่งเพื่อแทนที่ jta-data-source
แต่ไม่ประสบความสำเร็จ:
// 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.transaction.coordinator_class
และ hibernate.connection.datasource
โดยได้ผลลัพธ์ที่ล้มเหลวเหมือนกับข้างต้น