Repository: tomee
Updated Branches:
  refs/heads/master b489fca7a -> 4289150f0


TOMEE-2388


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/b50392f1
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/b50392f1
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/b50392f1

Branch: refs/heads/master
Commit: b50392f1342093a95d8f865bc4c1b86be4cf412f
Parents: b489fca
Author: Mariani Federico <[email protected]>
Authored: Wed Dec 26 18:43:56 2018 +0100
Committer: Mariani Federico <[email protected]>
Committed: Wed Dec 26 18:43:56 2018 +0100

----------------------------------------------------------------------
 examples/multi-jpa-provider-testing/README.md | 281 +++++++++++++++++++++
 1 file changed, 281 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/b50392f1/examples/multi-jpa-provider-testing/README.md
----------------------------------------------------------------------
diff --git a/examples/multi-jpa-provider-testing/README.md 
b/examples/multi-jpa-provider-testing/README.md
new file mode 100644
index 0000000..b24a54d
--- /dev/null
+++ b/examples/multi-jpa-provider-testing/README.md
@@ -0,0 +1,281 @@
+index-group=JPA Providers
+type=page
+status=published
+title=Multiple JPA providers test
+~~~~~~
+
+This test shows how to use multiple JPA providers, Hibernate and Openjpa. 
Using JPA annotations the code can be easily used with different 
implementations. The @Entity class is straight forward, a Person POJO with an 
id and a name, the persistence.xml creates and drop Person table for both 
implementations. The examples and implementations dependency are inside test 
resources, in particularly: arquillian.xml for test purpose, hibernate-pom.xml 
loads hibernate-core dependencies and openjpa-pom.xml loads openjpa 
dependencies. The test inside JPATest.java class is executed twice, once for 
each implementation.
+
+## @Entity
+
+Simple POJO class that follows JPA standard
+
+    import javax.persistence.Entity;
+    import javax.persistence.GeneratedValue;
+    import javax.persistence.Id;
+
+    @Entity
+    public class Person {
+
+        @Id
+        @GeneratedValue
+        private long id;
+
+        private String name;
+
+        public long getId() {
+            return id;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+## persistence.xml
+
+Create and drop Person table
+
+    <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="jpa">
+        <jta-data-source>jdbc/jpa</jta-data-source>
+        <properties>
+        <!--
+            OpenJPA
+        -->
+        <property name="openjpa.jdbc.SynchronizeMappings" 
value="buildSchema(ForeignKeys=true)"/>
+
+        <!--
+            Hibernate
+        -->
+        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+        </properties>
+    </persistence-unit>
+    </persistence>
+
+## JPA test
+
+The entity manager is injected through cdi and an Object Person is created and 
inserted into the inmemory database
+
+    import org.jboss.arquillian.container.test.api.Deployment;
+    import org.jboss.arquillian.junit.Arquillian;
+    import org.jboss.arquillian.transaction.api.annotation.TransactionMode;
+    import org.jboss.arquillian.transaction.api.annotation.Transactional;
+    import org.jboss.shrinkwrap.api.ArchivePaths;
+    import org.jboss.shrinkwrap.api.ShrinkWrap;
+    import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
+    import org.jboss.shrinkwrap.api.spec.WebArchive;
+    import org.junit.Test;
+    import org.junit.runner.RunWith;
+    import org.superbiz.model.Person;
+
+    import javax.persistence.EntityManager;
+    import javax.persistence.PersistenceContext;
+
+    import static org.junit.Assert.assertNotNull;
+
+    @RunWith(Arquillian.class)
+    public class JPATest {
+
+        @Deployment
+        public static WebArchive war() {
+            return ShrinkWrap.create(WebArchive.class)
+                    .addClass(Person.class)
+                    .addAsWebInfResource(new 
ClassLoaderAsset("META-INF/persistence.xml"), 
ArchivePaths.create("persistence.xml"));
+        }
+
+        @PersistenceContext
+        private EntityManager em;
+
+        @Test
+        @Transactional(TransactionMode.ROLLBACK)
+        public void persist() {
+            assertNotNull(em);
+
+            // do something with the em
+            final Person p = new Person();
+            p.setName("Apache OpenEJB");
+            em.persist(p);
+        }
+    }
+
+Inside the example there are no reference to the JPA implementations.
+
+## Test implementations
+
+The test classes inside org.superbiz.enricher package simply load the 
implementation libraries and the test runs twice as described inside the 
pom.xml, a system property variable is used to distinguish between Hibernate 
and OpenJPA.
+
+# Running
+
+Running the example can be done from maven with a simple 'mvn clean install' 
command run from the 'multi-jpa-provider-testing' directory.
+
+When run you should see output similar to the following.
+
+    -------------------------------------------------------
+    T E S T S
+    -------------------------------------------------------
+    Running org.superbiz.JPATest
+    INFO - 
********************************************************************************
+    INFO - OpenEJB http://tomee.apache.org/
+    INFO - Startup: Wed Dec 26 17:55:31 CET 2018
+    INFO - Copyright 1999-2018 (C) Apache OpenEJB Project, All Rights Reserved.
+    INFO - Version: 8.0.0-SNAPSHOT
+    INFO - Build date: 20181226
+    INFO - Build time: 02:26
+    INFO - 
********************************************************************************
+    INFO - openejb.home = /tomee/examples/multi-jpa-provider-testing
+    INFO - openejb.base = /tomee/examples/multi-jpa-provider-testing
+    INFO - Created new singletonService 
org.apache.openejb.cdi.ThreadSingletonServiceImpl@5db45159
+    INFO - Succeeded in installing singleton service
+    INFO - Cannot find the configuration file [conf/openejb.xml].  Will 
attempt to create one for the beans deployed.
+    INFO - Configuring Service(id=Default Security Service, 
type=SecurityService, provider-id=Default Security Service)
+    INFO - Configuring Service(id=Default Transaction Manager, 
type=TransactionManager, provider-id=Default Transaction Manager)
+    INFO - Using 'openejb.deployments.classpath=false'
+    INFO - Creating TransactionManager(id=Default Transaction Manager)
+    INFO - Creating SecurityService(id=Default Security Service)
+    INFO - Using 'openejb.classloader.forced-load=org.superbiz.model'
+    INFO - Configuring enterprise application: 
/tomee/examples/multi-jpa-provider-testing/413724ac-4a44-48a3-ae4a-db190b95cc62.war
+    INFO - Configuring Service(id=Default Managed Container, type=Container, 
provider-id=Default Managed Container)
+    INFO - Auto-creating a container for bean 
413724ac-4a44-48a3-ae4a-db190b95cc62_org.superbiz.JPATest: 
Container(type=MANAGED, id=Default Managed Container)
+    INFO - Creating Container(id=Default Managed Container)
+    INFO - Using directory /tmp for stateful session passivation
+    INFO - Configuring PersistenceUnit(name=jpa)
+    INFO - Configuring Service(id=Default JDBC Database, type=Resource, 
provider-id=Default JDBC Database)
+    INFO - Auto-creating a Resource with id 'Default JDBC Database' of type 
'DataSource for 'jpa'.
+    INFO - Creating Resource(id=Default JDBC Database)
+    INFO - Configuring Service(id=Default Unmanaged JDBC Database, 
type=Resource, provider-id=Default Unmanaged JDBC Database)
+    INFO - Auto-creating a Resource with id 'Default Unmanaged JDBC Database' 
of type 'DataSource for 'jpa'.
+    INFO - Creating Resource(id=Default Unmanaged JDBC Database)
+    INFO - Adjusting PersistenceUnit jpa <jta-data-source> to Resource ID 
'Default JDBC Database' from 'jdbc/jpa'
+    INFO - Adjusting PersistenceUnit jpa <non-jta-data-source> to Resource ID 
'Default Unmanaged JDBC Database' from 'null'
+    INFO - Using 
'javax.persistence.provider=org.hibernate.ejb.HibernatePersistence'
+    INFO - Enterprise application 
"/tomee/examples/multi-jpa-provider-testing/413724ac-4a44-48a3-ae4a-db190b95cc62.war"
 loaded.
+    INFO - Assembling app: 
/tomee/examples/multi-jpa-provider-testing/413724ac-4a44-48a3-ae4a-db190b95cc62.war
+    INFO - HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
+    INFO - HHH000412: Hibernate Core {4.2.18.Final}
+    INFO - HHH000206: hibernate.properties not found
+    INFO - HHH000021: Bytecode provider name : javassist
+    INFO - HHH000204: Processing PersistenceUnitInfo [
+        name: jpa
+        ...]
+    INFO - HHH000130: Instantiating explicit connection provider: 
org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
+    INFO - HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect
+    INFO - HHH000268: Transaction strategy: 
org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
+    INFO - HHH000397: Using ASTQueryTranslatorFactory
+    INFO - HHH000227: Running hbm2ddl schema export
+    INFO - HHH000230: Schema export complete
+    INFO - PersistenceUnit(name=jpa, 
provider=org.hibernate.ejb.HibernatePersistence) - provider time 1053ms
+    INFO - Existing thread singleton service in SystemInstance(): 
org.apache.openejb.cdi.ThreadSingletonServiceImpl@5db45159
+    INFO - Some Principal APIs could not be loaded: 
org.eclipse.microprofile.jwt.JsonWebToken out of 
org.eclipse.microprofile.jwt.JsonWebToken not found
+    INFO - OpenWebBeans Container is starting...
+    INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
+    INFO - HV000001: Hibernate Validator 5.1.3.Final
+    INFO - All injection points were validated successfully.
+    INFO - OpenWebBeans Container has started, it took 194 ms.
+    INFO - Deployed 
Application(path=/tomee/examples/multi-jpa-provider-testing/413724ac-4a44-48a3-ae4a-db190b95cc62.war)
+    INFO - Undeploying app: 
/tomee/examples/multi-jpa-provider-testing/413724ac-4a44-48a3-ae4a-db190b95cc62.war
+    INFO - HHH000227: Running hbm2ddl schema export
+    INFO - HHH000230: Schema export complete
+    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.951 sec 
- in org.superbiz.JPATest
+    INFO - Destroying container system
+    INFO - Closing DataSource: Default JDBC Database
+    INFO - Closing DataSource: Default Unmanaged JDBC Database
+
+    Results :
+
+    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+
+    -------------------------------------------------------
+    T E S T S
+    -------------------------------------------------------
+    SUREFIRE-859: 57  classpath-bootstrap  INFO   [main] openjpa.Enhance - You 
have enabled runtime enhancement, but have not specified the set of persistent 
classes.  OpenJPA must look for metadata for every loaded class, which might 
increase class load times significantly.
+    353  classpath-bootstrap  INFO   [main] openjpa.Runtime - OpenJPA 
dynamically loaded a validation provider.
+    Running org.superbiz.JPATest
+    INFO - 
********************************************************************************
+    INFO - OpenEJB http://tomee.apache.org/
+    INFO - Startup: Wed Dec 26 17:55:35 CET 2018
+    INFO - Copyright 1999-2018 (C) Apache OpenEJB Project, All Rights Reserved.
+    INFO - Version: 8.0.0-SNAPSHOT
+    INFO - Build date: 20181226
+    INFO - Build time: 02:26
+    INFO - 
********************************************************************************
+    INFO - openejb.home = /tomee/examples/multi-jpa-provider-testing
+    INFO - openejb.base = /tomee/examples/multi-jpa-provider-testing
+    INFO - Created new singletonService 
org.apache.openejb.cdi.ThreadSingletonServiceImpl@4a8a60bc
+    INFO - Succeeded in installing singleton service
+    INFO - Cannot find the configuration file [conf/openejb.xml].  Will 
attempt to create one for the beans deployed.
+    INFO - Configuring Service(id=Default Security Service, 
type=SecurityService, provider-id=Default Security Service)
+    INFO - Configuring Service(id=Default Transaction Manager, 
type=TransactionManager, provider-id=Default Transaction Manager)
+    INFO - Using 'openejb.deployments.classpath=false'
+    INFO - Creating TransactionManager(id=Default Transaction Manager)
+    INFO - Creating SecurityService(id=Default Security Service)
+    INFO - Configuring enterprise application: 
/tomee/examples/multi-jpa-provider-testing/450e397e-de39-49eb-837f-7b066fc9f248.war
+    INFO - Configuring Service(id=Default Managed Container, type=Container, 
provider-id=Default Managed Container)
+    INFO - Auto-creating a container for bean 
450e397e-de39-49eb-837f-7b066fc9f248_org.superbiz.JPATest: 
Container(type=MANAGED, id=Default Managed Container)
+    INFO - Creating Container(id=Default Managed Container)
+    INFO - Using directory /tmp for stateful session passivation
+    INFO - Configuring PersistenceUnit(name=jpa)
+    INFO - Configuring Service(id=Default JDBC Database, type=Resource, 
provider-id=Default JDBC Database)
+    INFO - Auto-creating a Resource with id 'Default JDBC Database' of type 
'DataSource for 'jpa'.
+    INFO - Creating Resource(id=Default JDBC Database)
+    INFO - Configuring Service(id=Default Unmanaged JDBC Database, 
type=Resource, provider-id=Default Unmanaged JDBC Database)
+    INFO - Auto-creating a Resource with id 'Default Unmanaged JDBC Database' 
of type 'DataSource for 'jpa'.
+    INFO - Creating Resource(id=Default Unmanaged JDBC Database)
+    INFO - Adjusting PersistenceUnit jpa <jta-data-source> to Resource ID 
'Default JDBC Database' from 'jdbc/jpa'
+    INFO - Adjusting PersistenceUnit jpa <non-jta-data-source> to Resource ID 
'Default Unmanaged JDBC Database' from 'null'
+    INFO - Using 
'javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl'
+    INFO - Enterprise application 
"/tomee/examples/multi-jpa-provider-testing/450e397e-de39-49eb-837f-7b066fc9f248.war"
 loaded.
+    INFO - Assembling app: 
/tomee/examples/multi-jpa-provider-testing/450e397e-de39-49eb-837f-7b066fc9f248.war
+    INFO - OpenJPA dynamically loaded a validation provider.
+    INFO - PersistenceUnit(name=jpa, 
provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider 
time 116ms
+    INFO - Existing thread singleton service in SystemInstance(): 
org.apache.openejb.cdi.ThreadSingletonServiceImpl@4a8a60bc
+    INFO - Some Principal APIs could not be loaded: 
org.eclipse.microprofile.jwt.JsonWebToken out of 
org.eclipse.microprofile.jwt.JsonWebToken not found
+    INFO - OpenWebBeans Container is starting...
+    INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
+    INFO - HV000001: Hibernate Validator 5.1.3.Final
+    INFO - All injection points were validated successfully.
+    INFO - OpenWebBeans Container has started, it took 170 ms.
+    INFO - Deployed 
Application(path=/tomee/examples/multi-jpa-provider-testing/450e397e-de39-49eb-837f-7b066fc9f248.war)
+    INFO - Starting OpenJPA 3.0.0
+    INFO - Using dictionary class "org.apache.openjpa.jdbc.sql.HSQLDictionary" 
(HSQL Database Engine 2.3.2 ,HSQL Database Engine Driver 2.3.2).
+    INFO - Connected to HSQL Database Engine version 2.2 using JDBC driver 
HSQL Database Engine Driver version 2.3.2. 
+    INFO - Undeploying app: 
/tomee/examples/multi-jpa-provider-testing/450e397e-de39-49eb-837f-7b066fc9f248.war
+    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.666 sec 
- in org.superbiz.JPATest
+    INFO - Destroying container system
+    INFO - Closing DataSource: Default JDBC Database
+    INFO - Closing DataSource: Default Unmanaged JDBC Database
+
+    Results :
+
+    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+
+From the log you can see that both implementations are used: INFO - Using 
'javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl',
 INFO - Using 
'javax.persistence.provider=org.hibernate.ejb.HibernatePersistence'. 
+
+## Inside the jar
+
+If we look at the jar built by maven, we'll see the application itself is 
quite small:
+
+    jar tvf multi-jpa-provider-testing-8.0.0-SNAPSHOT.jar 
+        0 Wed Dec 26 17:55:40 CET 2018 META-INF/
+    134 Wed Dec 26 17:55:38 CET 2018 META-INF/MANIFEST.MF
+        0 Wed Dec 26 17:55:30 CET 2018 org/
+        0 Wed Dec 26 17:55:30 CET 2018 org/superbiz/
+        0 Wed Dec 26 17:55:30 CET 2018 org/superbiz/model/
+    780 Wed Dec 26 17:55:30 CET 2018 org/superbiz/model/Person.class
+    1554 Wed Dec 26 17:55:30 CET 2018 META-INF/persistence.xml
+        0 Wed Dec 26 17:55:40 CET 2018 META-INF/maven/
+        0 Wed Dec 26 17:55:40 CET 2018 META-INF/maven/org.superbiz/
+        0 Wed Dec 26 17:55:40 CET 2018 
META-INF/maven/org.superbiz/multi-jpa-provider-testing/
+    5696 Wed Dec 26 17:41:54 CET 2018 
META-INF/maven/org.superbiz/multi-jpa-provider-testing/pom.xml
+    132 Wed Dec 26 17:55:38 CET 2018 
META-INF/maven/org.superbiz/multi-jpa-provider-testing/pom.properties
+
+
+Inside the resources package there is only a java class and the 
persistence.xml and the only dependency is javaee-api:8.0.
\ No newline at end of file

Reply via email to