Repository: olingo-odata2 Updated Branches: refs/heads/master e26395fd1 -> 5a73f0557
[OLINGO-634] Changed EMF creation for JEE default db Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/5a73f055 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/5a73f055 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/5a73f055 Branch: refs/heads/master Commit: 5a73f0557d2a35b7e85acd12e1e2d55996cdb12c Parents: e26395f Author: Michael Bolz <[email protected]> Authored: Mon Apr 20 15:07:45 2015 +0200 Committer: Michael Bolz <[email protected]> Committed: Mon Apr 20 15:57:42 2015 +0200 ---------------------------------------------------------------------- .../main/resources/archetype-resources/pom.xml | 3 +- .../java/service/ODataJPACarServiceFactory.java | 66 +++++++++++++++++--- .../src/main/resources/META-INF/persistence.xml | 21 ++++--- .../src/main/webapp/WEB-INF/web.xml | 6 ++ 4 files changed, 80 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a73f055/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/pom.xml ---------------------------------------------------------------------- diff --git a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/pom.xml b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/pom.xml index a0683d6..40edf1f 100644 --- a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/pom.xml +++ b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/pom.xml @@ -22,6 +22,7 @@ <version.cxf>2.7.6</version.cxf> <version.eclipselink>2.5.1</version.eclipselink> <version.javax.persistence>2.0.5</version.javax.persistence> + <version.hsqldb>2.3.2</version.hsqldb> <version.olingo>2.0.4-SNAPSHOT</version.olingo> </properties> @@ -72,7 +73,7 @@ <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> - <version>1.8.0.10</version> + <version>${version.hsqldb}</version> </dependency> <!-- Web Support --> http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a73f055/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/java/service/ODataJPACarServiceFactory.java ---------------------------------------------------------------------- diff --git a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/java/service/ODataJPACarServiceFactory.java b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/java/service/ODataJPACarServiceFactory.java index ecf628f..b057d5b 100644 --- a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/java/service/ODataJPACarServiceFactory.java +++ b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/java/service/ODataJPACarServiceFactory.java @@ -24,9 +24,16 @@ package ${package}.service; import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.HashMap; +import java.util.Map; +import org.eclipse.persistence.config.PersistenceUnitProperties; import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.sql.DataSource; import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext; import org.apache.olingo.odata2.jpa.processor.api.ODataJPAServiceFactory; @@ -40,12 +47,10 @@ import ${package}.model.Manufacturer; public class ODataJPACarServiceFactory extends ODataJPAServiceFactory { - private static final String PUNIT_NAME = "MyFormula"; private static final int PAGE_SIZE = 5; /** Load Sample Data **/ static { - List<Car> cars = new ArrayList<Car>(); Calendar mfDate = Calendar.getInstance(); mfDate.set(2013, 02, 01); @@ -65,8 +70,8 @@ public class ODataJPACarServiceFactory extends ODataJPAServiceFactory { cars.add(car); driver.setCar(car); - EntityManager em = Persistence.createEntityManagerFactory(PUNIT_NAME) - .createEntityManager(); + + EntityManager em = EmfHolder.createInstance().createEntityManager(); em.getTransaction().begin(); em.persist(mf); em.persist(driver); @@ -79,13 +84,60 @@ public class ODataJPACarServiceFactory extends ODataJPAServiceFactory { public ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException { ODataJPAContext oDataJPAContext = getODataJPAContext(); - oDataJPAContext.setEntityManagerFactory(Persistence - .createEntityManagerFactory(PUNIT_NAME)); - oDataJPAContext.setPersistenceUnitName(PUNIT_NAME); + EmfHolder emfHolder = EmfHolder.createInstance(); + oDataJPAContext.setEntityManagerFactory(emfHolder.getEntityManagerFactory()); + oDataJPAContext.setPersistenceUnitName(emfHolder.getPersistenceUnitName()); oDataJPAContext.setPageSize(PAGE_SIZE); setDetailErrors(true); return oDataJPAContext; } + + /** + * + */ + private static class EmfHolder { + private static final String PUNIT_NAME = "MyFormulaHsqlDb"; + private static final String PUNIT_NAME_DEFAULT = "MyFormulaJeeDb"; + private static final String DATA_SOURCE_NAME = "java:comp/env/jdbc/DefaultDB"; + + final private EntityManagerFactory emf; + final private String persistenceUnitName; + + private EmfHolder(EntityManagerFactory emf, String unitName) { + this.emf = emf; + this.persistenceUnitName = unitName; + } + + public EntityManagerFactory getEntityManagerFactory() { + return emf; + } + + public String getPersistenceUnitName() { + return persistenceUnitName; + } + + public static EntityManager createEntityManager() { + return createInstance().getEntityManagerFactory().createEntityManager(); + } + + + public static synchronized EmfHolder createInstance() { + try { + InitialContext ctx = new InitialContext(); + DataSource ds = (DataSource) ctx.lookup(DATA_SOURCE_NAME); + Map<String, Object> properties = new HashMap<String, Object>(); + properties.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, ds); + EntityManagerFactory emf = + Persistence.createEntityManagerFactory(PUNIT_NAME_DEFAULT, properties); + emf.createEntityManager(); + return new EmfHolder(emf, PUNIT_NAME_DEFAULT); + } catch (javax.persistence.PersistenceException e) { + return new EmfHolder(Persistence.createEntityManagerFactory(PUNIT_NAME), PUNIT_NAME); + } catch (NamingException e) { + return new EmfHolder(Persistence.createEntityManagerFactory(PUNIT_NAME), PUNIT_NAME); + } + } + } } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a73f055/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml ---------------------------------------------------------------------- diff --git a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml index 73321e4..b498074 100644 --- a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml +++ b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/persistence.xml @@ -15,25 +15,30 @@ <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="MyFormula" - transaction-type="RESOURCE_LOCAL"> + <persistence-unit name="MyFormulaHsqlDb" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>${package}.model.Driver</class> <class>${package}.model.Car</class> <class>${package}.model.Manufacturer</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" /> - <property name="javax.persistence.jdbc.url" - value="jdbc:hsqldb:mem:org.apache.olingo.jpa.sample" /> + <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:org.apache.olingo.jpa.sample" /> <property name="javax.persistence.jdbc.user" value="sa" /> <property name="javax.persistence.jdbc.password" value="" /> - <property name="eclipselink.target-database" - value="org.eclipse.persistence.platform.database.HSQLPlatform" /> + <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.HSQLPlatform" /> <property name="eclipselink.logging.level" value="ALL" /> <property name="eclipselink.orm.throw.exceptions" value="true" /> <property name="eclipselink.ddl-generation" value="create-tables" /> - <property name="eclipselink.ddl-generation.output-mode" - value="database" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + </properties> + </persistence-unit> + <persistence-unit name="MyFormulaJeeDb" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + <class>${package}.model.Driver</class> + <class>${package}.model.Car</class> + <class>${package}.model.Manufacturer</class> + <properties> + <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> </properties> </persistence-unit> </persistence> http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5a73f055/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml index 908ecc0..b90c22b 100644 --- a/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml +++ b/odata2-sample/cars-jpa-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml @@ -22,6 +22,12 @@ <welcome-file>index.html</welcome-file> </welcome-file-list> + <!-- Enable usage of default JEE persistence service --> + <resource-ref> + <res-ref-name>jdbc/DefaultDB</res-ref-name> + <res-type>javax.sql.DataSource</res-type> + </resource-ref> + <servlet> <servlet-name>CarServiceServlet</servlet-name> <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
