[ARIES-1631] Added management of javax.persistence.dataSource in case of no non-JTA datasources are specified
git-svn-id: https://svn.apache.org/repos/asf/aries/trunk/jpa@1777668 13f79535-47bb-0310-9956-ffa450edef68 Project: http://git-wip-us.apache.org/repos/asf/aries-jpa/repo Commit: http://git-wip-us.apache.org/repos/asf/aries-jpa/commit/a667faa1 Tree: http://git-wip-us.apache.org/repos/asf/aries-jpa/tree/a667faa1 Diff: http://git-wip-us.apache.org/repos/asf/aries-jpa/diff/a667faa1 Branch: refs/heads/master Commit: a667faa1ecf0806d7cd808c6d02a8e8216b9a7fb Parents: f45654f Author: ggerla <ggerla@13f79535-47bb-0310-9956-ffa450edef68> Authored: Fri Jan 6 17:47:06 2017 +0000 Committer: ggerla <ggerla@13f79535-47bb-0310-9956-ffa450edef68> Committed: Fri Jan 6 17:47:06 2017 +0000 ---------------------------------------------------------------------- .../jpa/container/itest/JPAContainerTest.java | 20 ++++++++++++++++++++ .../impl/AriesEntityManagerFactoryBuilder.java | 7 +++++++ 2 files changed, 27 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-jpa/blob/a667faa1/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java ---------------------------------------------------------------------- diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java index ba2b622..e8a077a 100644 --- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java +++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java @@ -189,4 +189,24 @@ public abstract class JPAContainerTest extends AbstractCarJPAITest { EntityManagerFactory emf = emfBuilder.createEntityManagerFactory(props); carLifecycleXA(ut, emf.createEntityManager()); } + + @Test + public void testCarEMFBuilderNoNonJTADataSource() throws Exception { + EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class, + "(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")"); + + + Map<String, Object> props = new HashMap<String, Object>(); + //EclipseLink also needs a non-jta-datasource + DataSourceFactory dsf = getService(DataSourceFactory.class, + "(" + OSGI_JDBC_DRIVER_CLASS + "=org.apache.derby.jdbc.EmbeddedDriver)"); + Properties jdbcProps = new Properties(); + jdbcProps.setProperty("url", "jdbc:derby:memory:TEST1;create=true"); + props.put("javax.persistence.dataSource", dsf.createDataSource(jdbcProps)); + + + EntityManagerFactory emf = emfBuilder.createEntityManagerFactory(props); + carLifecycleRL(emf.createEntityManager()); + } + } http://git-wip-us.apache.org/repos/asf/aries-jpa/blob/a667faa1/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java ---------------------------------------------------------------------- diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java index e224acd..fecb927 100644 --- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java +++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java @@ -37,6 +37,7 @@ import org.osgi.service.jpa.EntityManagerFactoryBuilder; public class AriesEntityManagerFactoryBuilder implements EntityManagerFactoryBuilder { private static final String JAVAX_PERSISTENCE_JDBC_DRIVER = "javax.persistence.jdbc.driver"; private static final String JAVAX_PERSISTENCE_JTA_DATASOURCE = "javax.persistence.jtaDataSource"; + private static final String JAVAX_PERSISTENCE_DATASOURCE = "javax.persistence.dataSource"; private static final String JAVAX_PERSISTENCE_NON_JTA_DATASOURCE = "javax.persistence.nonJtaDataSource"; private static final String JAVAX_PERSISTENCE_TX_TYPE = "javax.persistence.transactionType"; @@ -75,6 +76,12 @@ public class AriesEntityManagerFactoryBuilder implements EntityManagerFactoryBui if(o instanceof DataSource) { persistenceUnit.setNonJtaDataSource((DataSource) o); props.remove(JAVAX_PERSISTENCE_NON_JTA_DATASOURCE); + } else { + o = props.get(JAVAX_PERSISTENCE_DATASOURCE); + if(o != null && o instanceof DataSource) { + persistenceUnit.setNonJtaDataSource((DataSource) o); + props.remove(JAVAX_PERSISTENCE_DATASOURCE); + } } o = props.get(JAVAX_PERSISTENCE_TX_TYPE);