This is an automated email from the ASF dual-hosted git repository. rzo1 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomee.git
commit 5b79c0f8e2517779a0058b3f0c4f584e35575431 Author: Richard Zowalla <[email protected]> AuthorDate: Thu Mar 24 09:44:00 2022 +0100 Modernizes JPA example to use Hibernate 5.6.x / JakartaEE + modern way of testing --- .../{h3jpa => h5jpa}/MoviesArquillianTest.java | 2 +- examples/jpa-hibernate/README.adoc | 253 ++++++++++++++------ examples/jpa-hibernate/README_es.adoc | 261 +++++++++++++++------ examples/jpa-hibernate/README_pt.adoc | 258 ++++++++++++++------ examples/jpa-hibernate/pom.xml | 30 +-- .../superbiz/injection/{h3jpa => h5jpa}/Movie.java | 2 +- .../injection/{h3jpa => h5jpa}/Movies.java | 2 +- .../src/main/resources/META-INF/persistence.xml | 32 --- .../injection/{h3jpa => h5jpa}/MoviesTest.java | 57 +++-- 9 files changed, 611 insertions(+), 286 deletions(-) diff --git a/examples/jpa-hibernate-arquillian/src/test/java/org/superbiz/injection/h3jpa/MoviesArquillianTest.java b/examples/jpa-hibernate-arquillian/src/test/java/org/superbiz/injection/h5jpa/MoviesArquillianTest.java similarity index 98% rename from examples/jpa-hibernate-arquillian/src/test/java/org/superbiz/injection/h3jpa/MoviesArquillianTest.java rename to examples/jpa-hibernate-arquillian/src/test/java/org/superbiz/injection/h5jpa/MoviesArquillianTest.java index ab907b1..abb0fa8 100644 --- a/examples/jpa-hibernate-arquillian/src/test/java/org/superbiz/injection/h3jpa/MoviesArquillianTest.java +++ b/examples/jpa-hibernate-arquillian/src/test/java/org/superbiz/injection/h5jpa/MoviesArquillianTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; diff --git a/examples/jpa-hibernate/README.adoc b/examples/jpa-hibernate/README.adoc index c13ee73..a8df55b 100644 --- a/examples/jpa-hibernate/README.adoc +++ b/examples/jpa-hibernate/README.adoc @@ -13,16 +13,16 @@ Links to the documentation have been added in key parts of the example for the c == Movie Here we have a class with some details. See the annotation -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/Entity.html[@Entity] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/Entity.html[@Entity] above the declaration, with it we are saying that this class is an entity (a table in the database). We still have two more annotations above the attribute id, one of them is -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/Id.html[@Id] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/Id.html[@Id] annotation, it indicates that this attribute is the identifier of the entity and the other annotation -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/GeneratedValue.html[@GeneratedValue] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/GeneratedValue.html[@GeneratedValue] indicates that the unique identifier value generation of the entity will be managed by the persistence provider. [source,java] ---- -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -93,7 +93,7 @@ link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/PersistenceCon [source,java] ---- -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.ejb.Stateful; import jakarta.persistence.EntityManager; @@ -125,22 +125,27 @@ public class Movies { == persistence.xml -Here we define which database will persist our movies, and we perform other configurations such as: define a persistence-unit with the name movie-unit, followed by the definition of the JPA provider/implementation (in this case Hibernate) and we set some properties for hibernate: - - <persistence version="1.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_1_0.xsd"> - <persistence-unit name="movie-unit"> - <provider>org.hibernate.ejb.HibernatePersistence</provider> - <jta-data-source>movieDatabase</jta-data-source> - <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> - <properties> - <property name="hibernate.hbm2ddl.auto" value="create-drop"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> - </properties> - </persistence-unit> - </persistence> +Here we define which database will persist our movies, and we perform other configurations such as: define a persistence-unit with the name movie-unit, followed by the definition of the JPA provider/implementation (in this case Hibernate) and we set some properties for hibernate. +Note, that we are using application composers in our test, so we do not need it in it's xml representation. + +[source,xml] +---- +<persistence xmlns="https://jakarta.ee/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd" + version="3.0"> + <persistence-unit name="movie-unit"> + <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <properties> + <property name="hibernate.hbm2ddl.auto" value="create-drop"/> + <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> + <property name="tomee.jpa.cdi" value="false"/> + </properties> + </persistence-unit> +</persistence> +---- == MoviesTest @@ -148,29 +153,59 @@ Now we do a test, persisting three films, then we perform a search and finally w [source,java] ---- -package org.superbiz.injection.h3jpa; - -import junit.framework.TestCase; +package org.superbiz.injection.h5jpa; + +import jakarta.inject.Inject; +import org.apache.openejb.jee.EjbJar; +import org.apache.openejb.jee.jpa.unit.PersistenceUnit; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.testing.Classes; +import org.apache.openejb.testing.Configuration; +import org.apache.openejb.testing.Module; +import org.junit.Test; +import org.junit.runner.RunWith; -import jakarta.ejb.embeddable.EJBContainer; -import javax.naming.Context; import java.util.List; import java.util.Properties; -/** - * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $ - */ -public class MoviesTest extends TestCase { +import static org.junit.Assert.assertEquals; - public void test() throws Exception { - final Properties p = new Properties(); +@RunWith(ApplicationComposer.class) +public class MoviesTest { + + @Inject + private Movies movies; + + @Module + public PersistenceUnit persistence() { + PersistenceUnit unit = new PersistenceUnit("movie-unit"); + unit.setJtaDataSource("movieDatabase"); + unit.setNonJtaDataSource("movieDatabaseUnmanaged"); + unit.getClazz().add(Movie.class.getName()); + unit.setProvider("org.hibernate.jpa.HibernatePersistenceProvider"); + unit.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + unit.setProperty("tomee.jpa.cdi", "false"); + return unit; + } + + @Module + @Classes(cdi = true, value = Movies.class) + public EjbJar beans() { + EjbJar ejbJar = new EjbJar("movie-beans"); + return ejbJar; + } + + @Configuration + public Properties config() throws Exception { + Properties p = new Properties(); p.put("movieDatabase", "new://Resource?type=DataSource"); p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + return p; + } - final Context context = EJBContainer.createEJBContainer(p).getContext(); - Movies movies = (Movies) context.lookup("java:global/jpa-hibernate/Movies"); - + @Test + public void test() throws Exception { movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); @@ -187,17 +222,17 @@ public class MoviesTest extends TestCase { } ---- -= Running +== Running To run the example via maven: Access the project folder: -[source,java] +[source,bash] ---- cd jpa-hibernate ---- And execute: -[source,java] +[source,bash] ---- mvn clean install ---- @@ -209,39 +244,115 @@ Which will generate output similar to the following: ------------------------------------------------------- T E S T S ------------------------------------------------------- -Running org.superbiz.injection.h3jpa.MoviesTest -Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 -http://tomee.apache.org/ -INFO - openejb.home = /Users/dblevins/examples/jpa-hibernate -INFO - openejb.base = /Users/dblevins/examples/jpa-hibernate -INFO - Using 'jakarta.ejb.embeddable.EJBContainer=true' -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 - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) -INFO - Found EjbModule in classpath: /Users/dblevins/examples/jpa-hibernate/target/classes -INFO - Beginning load: /Users/dblevins/examples/jpa-hibernate/target/classes -INFO - Configuring enterprise application: /Users/dblevins/examples/jpa-hibernate -INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) -INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) -INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) -INFO - Auto-creating a container for bean org.superbiz.injection.h3jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container) -INFO - Configuring PersistenceUnit(name=movie-unit, provider=org.hibernate.ejb.HibernatePersistence) -INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. -INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) -INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' -INFO - Enterprise application "/Users/dblevins/examples/jpa-hibernate" loaded. -INFO - Assembling app: /Users/dblevins/examples/jpa-hibernate -INFO - PersistenceUnit(name=movie-unit, provider=org.hibernate.ejb.HibernatePersistence) - provider time 631ms -INFO - Jndi(name="java:global/jpa-hibernate/Movies!org.superbiz.injection.h3jpa.Movies") -INFO - Jndi(name="java:global/jpa-hibernate/Movies") -INFO - Jndi(name="java:global/EjbModule1235930463/org.superbiz.injection.h3jpa.MoviesTest!org.superbiz.injection.h3jpa.MoviesTest") -INFO - Jndi(name="java:global/EjbModule1235930463/org.superbiz.injection.h3jpa.MoviesTest") -INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) -INFO - Created Ejb(deployment-id=org.superbiz.injection.h3jpa.MoviesTest, ejb-name=org.superbiz.injection.h3jpa.MoviesTest, container=Default Managed Container) -INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) -INFO - Started Ejb(deployment-id=org.superbiz.injection.h3jpa.MoviesTest, ejb-name=org.superbiz.injection.h3jpa.MoviesTest, container=Default Managed Container) -INFO - Deployed Application(path=/Users/dblevins/examples/jpa-hibernate) -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.22 sec +Running org.superbiz.injection.h5jpa.MoviesTest +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@176d53b2 +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Succeeded in installing singleton service +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating TransactionManager(id=Default Transaction Manager) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating SecurityService(id=Default Security Service) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Resource(id=movieDatabase) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring enterprise application: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-deploying ejb Movies: EjbDeployment(deployment-id=Movies) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a container for bean org.superbiz.injection.h5jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Container(id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Using directory /tmp for stateful session passivation +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Container(id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Using directory /tmp for stateful session passivation +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring PersistenceUnit(name=movie-unit, provider=org.hibernate.jpa.HibernatePersistenceProvider) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource' for 'movie-unit'. +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Resource(id=movieDatabaseNonJta) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Enterprise application "/home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest" loaded. +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Not creating another application classloader for MoviesTest +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Assembling app: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:40 VORM. org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation +INFO: HHH000204: Processing PersistenceUnitInfo [name: movie-unit] +März 24, 2022 9:34:40 VORM. org.hibernate.Version logVersion +INFO: HHH000412: Hibernate ORM core version 5.6.7.Final +März 24, 2022 9:34:40 VORM. org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> +INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +März 24, 2022 9:34:40 VORM. org.hibernate.dialect.Dialect <init> +INFO: HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect +März 24, 2022 9:34:40 VORM. org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator resolveBeanContainer +INFO: HHH10005002: No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader. +März 24, 2022 9:34:40 VORM. org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService +INFO: HHH000490: Using JtaPlatform implementation: [org.apache.openejb.hibernate.OpenEJBJtaPlatform2] +März 24, 2022 9:34:40 VORM. org.hibernate.validator.internal.util.Version <clinit> +INFO: HV000001: Hibernate Validator 7.0.4.Final +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: PersistenceUnit(name=movie-unit, provider=org.hibernate.jpa.HibernatePersistenceProvider) - provider time 1292ms +WARNING: An illegal reflective access operation has occurred +WARNING: Illegal reflective access by org.apache.openejb.util.proxy.ClassDefiner (file:/home/zowallar/.m2/repository/org/apache/tomee/openejb-core/9.0.0-M8-SNAPSHOT/openejb-core-9.0.0-M8-SNAPSHOT.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) +WARNING: Please consider reporting this to the maintainers of org.apache.openejb.util.proxy.ClassDefiner +WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations +WARNING: All illegal access operations will be denied in a future release +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=MoviesLocalBean) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=global/MoviesTest/movie-beans/Movies!org.superbiz.injection.h5jpa.Movies) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=global/MoviesTest/movie-beans/Movies) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@176d53b2 +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: OpenWebBeans Container is starting... +März 24, 2022 9:34:41 VORM. org.apache.webbeans.plugins.PluginLoader startUp +INFORMATION: Adding OpenWebBeansPlugin : [CdiPlugin] +März 24, 2022 9:34:42 VORM. org.apache.webbeans.config.BeansDeployer validateInjectionPoints +INFORMATION: All injection points were validated successfully. +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: OpenWebBeans Container has started, it took 665 ms. +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +März 24, 2022 9:34:42 VORM. org.apache.batchee.container.services.ServicesManager init +WARNUNG: You didn't specify org.apache.batchee.jmx.application and JMX is already registered, skipping +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Deployed Application(path=/home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest) +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Undeploying app: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:42 VORM. org.hibernate.tool.schema.internal.SchemaDropperImpl$DelayedDropActionImpl perform +INFO: HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down' +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Closing DataSource: movieDatabase +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Closing DataSource: movieDatabaseNonJta +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.567 sec Results : diff --git a/examples/jpa-hibernate/README_es.adoc b/examples/jpa-hibernate/README_es.adoc index 401201f..2689e30 100644 --- a/examples/jpa-hibernate/README_es.adoc +++ b/examples/jpa-hibernate/README_es.adoc @@ -23,7 +23,7 @@ indica que la generación de los identificadores únicos será administrada por [source,java] ---- -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -80,17 +80,18 @@ public class Movie { == Movies Ahora tenemos dos cosas importantes: la anotacion -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/PersistenceContext.html[@PersistenceContext] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/PersistenceContext.html[@PersistenceContext] y la declaracion -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/EntityManager.html[EntityManager]. +link:https://tomee.apache.org/tomee-8.0/javadoc/jakarta/persistence/EntityManager.html[EntityManager]. es la interfaz con los métodos principales de JPA como persistir, eliminar, fusionar, buscar y otros ... Anotamos el -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/EntityManager.html[EntityManager] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/EntityManager.html[EntityManager] com -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/PersistenceContext.html[@PersistenceContext], um contexto de persistência é um gerenciamento de entidades onde, todo contexto de persistência é associado com uma unidade de persistência (persistence-unit), un contexto de persistencia es una gestión de entidad donde cada contexto de persistencia asociado con una unidad de persistencia, crearemos un persistence.xml para esto. +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/PersistenceContext.html[@PersistenceContext], um contexto de persistência é um gerenciamento de entidades onde, todo contexto de persistência é associado com uma unidade de persistência (persistence-unit), un contexto de persistencia es una gestión de entidad donde cada contexto de persistencia asociado con una unidad de persistencia, crearemos un persistence.xml para esto. + [source,java] ---- -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.ejb.Stateful; import jakarta.persistence.EntityManager; @@ -122,51 +123,88 @@ public class Movies { == persistence.xml -Aquí definimos qué base de datos persistirá nuestras películas, y realizamos otras configuraciones como: definir una unidad de persistencia con el nombre de unidad de la película, seguido de la definición del proveedor/implementación de JPA (en este caso Hibernate) y establecemos algunos propiedades para hibernar: - - <persistence version="1.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_1_0.xsd"> - <persistence-unit name="movie-unit"> - <provider>org.hibernate.ejb.HibernatePersistence</provider> - <jta-data-source>movieDatabase</jta-data-source> - <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> - <properties> - <property name="hibernate.hbm2ddl.auto" value="create-drop"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> - </properties> - </persistence-unit> - </persistence> +Aquí definimos qué base de datos persistirá nuestras películas, y realizamos otras configuraciones como: definir una unidad de persistencia con el nombre de unidad de la película, seguido de la definición del proveedor/implementación de JPA (en este caso Hibernate) y establecemos algunos propiedades para hibernar. +Tenga en cuenta que estamos utilizando compositores de aplicaciones en nuestra prueba, por lo que no necesitamos en su representación xml. + +[source,xml] +---- +<persistence xmlns="https://jakarta.ee/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd" + version="3.0"> + <persistence-unit name="movie-unit"> + <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <properties> + <property name="hibernate.hbm2ddl.auto" value="create-drop"/> + <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> + <property name="tomee.jpa.cdi" value="false"/> + </properties> + </persistence-unit> +</persistence> + +---- == MoviesTest Ahora hacemos una prueba, persistiendo tres películas, luego realizamos una búsqueda y finalmente las eliminamos. + [source,java] ---- -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; + +import jakarta.inject.Inject; +import org.apache.openejb.jee.EjbJar; +import org.apache.openejb.jee.jpa.unit.PersistenceUnit; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.testing.Classes; +import org.apache.openejb.testing.Configuration; +import org.apache.openejb.testing.Module; +import org.junit.Test; +import org.junit.runner.RunWith; -import junit.framework.TestCase; - -import jakarta.ejb.embeddable.EJBContainer; -import javax.naming.Context; import java.util.List; import java.util.Properties; -/** - * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $ - */ -public class MoviesTest extends TestCase { +import static org.junit.Assert.assertEquals; - public void test() throws Exception { - final Properties p = new Properties(); +@RunWith(ApplicationComposer.class) +public class MoviesTest { + + @Inject + private Movies movies; + + @Module + public PersistenceUnit persistence() { + PersistenceUnit unit = new PersistenceUnit("movie-unit"); + unit.setJtaDataSource("movieDatabase"); + unit.setNonJtaDataSource("movieDatabaseUnmanaged"); + unit.getClazz().add(Movie.class.getName()); + unit.setProvider("org.hibernate.jpa.HibernatePersistenceProvider"); + unit.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + unit.setProperty("tomee.jpa.cdi", "false"); + return unit; + } + + @Module + @Classes(cdi = true, value = Movies.class) + public EjbJar beans() { + EjbJar ejbJar = new EjbJar("movie-beans"); + return ejbJar; + } + + @Configuration + public Properties config() throws Exception { + Properties p = new Properties(); p.put("movieDatabase", "new://Resource?type=DataSource"); p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + return p; + } - final Context context = EJBContainer.createEJBContainer(p).getContext(); - Movies movies = (Movies) context.lookup("java:global/jpa-hibernate/Movies"); - + @Test + public void test() throws Exception { movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); @@ -183,20 +221,20 @@ public class MoviesTest extends TestCase { } ---- -= Ejecutando +== Ejecutando Para ejecutar el ejemplo a través de maven: Acceda a la carpeta del proyecto: -[source,java] +[source,bash] ---- cd jpa-hibernate ---- y ejecute: -[source,java] +[source,bash] ---- mvn clean install ---- @@ -208,39 +246,118 @@ Lo que generará una salida similar a la siguiente: ------------------------------------------------------- T E S T S ------------------------------------------------------- -Running org.superbiz.injection.h3jpa.MoviesTest -Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 -http://tomee.apache.org/ -INFO - openejb.home = /Users/dblevins/examples/jpa-hibernate -INFO - openejb.base = /Users/dblevins/examples/jpa-hibernate -INFO - Using 'jakarta.ejb.embeddable.EJBContainer=true' -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 - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) -INFO - Found EjbModule in classpath: /Users/dblevins/examples/jpa-hibernate/target/classes -INFO - Beginning load: /Users/dblevins/examples/jpa-hibernate/target/classes -INFO - Configuring enterprise application: /Users/dblevins/examples/jpa-hibernate -INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) -INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) -INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) -INFO - Auto-creating a container for bean org.superbiz.injection.h3jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container) -INFO - Configuring PersistenceUnit(name=movie-unit, provider=org.hibernate.ejb.HibernatePersistence) -INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. -INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) -INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' -INFO - Enterprise application "/Users/dblevins/examples/jpa-hibernate" loaded. -INFO - Assembling app: /Users/dblevins/examples/jpa-hibernate -INFO - PersistenceUnit(name=movie-unit, provider=org.hibernate.ejb.HibernatePersistence) - provider time 631ms -INFO - Jndi(name="java:global/jpa-hibernate/Movies!org.superbiz.injection.h3jpa.Movies") -INFO - Jndi(name="java:global/jpa-hibernate/Movies") -INFO - Jndi(name="java:global/EjbModule1235930463/org.superbiz.injection.h3jpa.MoviesTest!org.superbiz.injection.h3jpa.MoviesTest") -INFO - Jndi(name="java:global/EjbModule1235930463/org.superbiz.injection.h3jpa.MoviesTest") -INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) -INFO - Created Ejb(deployment-id=org.superbiz.injection.h3jpa.MoviesTest, ejb-name=org.superbiz.injection.h3jpa.MoviesTest, container=Default Managed Container) -INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) -INFO - Started Ejb(deployment-id=org.superbiz.injection.h3jpa.MoviesTest, ejb-name=org.superbiz.injection.h3jpa.MoviesTest, container=Default Managed Container) -INFO - Deployed Application(path=/Users/dblevins/examples/jpa-hibernate) -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.22 sec +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.superbiz.injection.h5jpa.MoviesTest +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@176d53b2 +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Succeeded in installing singleton service +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating TransactionManager(id=Default Transaction Manager) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating SecurityService(id=Default Security Service) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Resource(id=movieDatabase) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring enterprise application: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-deploying ejb Movies: EjbDeployment(deployment-id=Movies) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a container for bean org.superbiz.injection.h5jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Container(id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Using directory /tmp for stateful session passivation +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Container(id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Using directory /tmp for stateful session passivation +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring PersistenceUnit(name=movie-unit, provider=org.hibernate.jpa.HibernatePersistenceProvider) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource' for 'movie-unit'. +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Resource(id=movieDatabaseNonJta) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Enterprise application "/home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest" loaded. +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Not creating another application classloader for MoviesTest +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Assembling app: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:40 VORM. org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation +INFO: HHH000204: Processing PersistenceUnitInfo [name: movie-unit] +März 24, 2022 9:34:40 VORM. org.hibernate.Version logVersion +INFO: HHH000412: Hibernate ORM core version 5.6.7.Final +März 24, 2022 9:34:40 VORM. org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> +INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +März 24, 2022 9:34:40 VORM. org.hibernate.dialect.Dialect <init> +INFO: HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect +März 24, 2022 9:34:40 VORM. org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator resolveBeanContainer +INFO: HHH10005002: No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader. +März 24, 2022 9:34:40 VORM. org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService +INFO: HHH000490: Using JtaPlatform implementation: [org.apache.openejb.hibernate.OpenEJBJtaPlatform2] +März 24, 2022 9:34:40 VORM. org.hibernate.validator.internal.util.Version <clinit> +INFO: HV000001: Hibernate Validator 7.0.4.Final +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: PersistenceUnit(name=movie-unit, provider=org.hibernate.jpa.HibernatePersistenceProvider) - provider time 1292ms +WARNING: An illegal reflective access operation has occurred +WARNING: Illegal reflective access by org.apache.openejb.util.proxy.ClassDefiner (file:/home/zowallar/.m2/repository/org/apache/tomee/openejb-core/9.0.0-M8-SNAPSHOT/openejb-core-9.0.0-M8-SNAPSHOT.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) +WARNING: Please consider reporting this to the maintainers of org.apache.openejb.util.proxy.ClassDefiner +WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations +WARNING: All illegal access operations will be denied in a future release +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=MoviesLocalBean) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=global/MoviesTest/movie-beans/Movies!org.superbiz.injection.h5jpa.Movies) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=global/MoviesTest/movie-beans/Movies) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@176d53b2 +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: OpenWebBeans Container is starting... +März 24, 2022 9:34:41 VORM. org.apache.webbeans.plugins.PluginLoader startUp +INFORMATION: Adding OpenWebBeansPlugin : [CdiPlugin] +März 24, 2022 9:34:42 VORM. org.apache.webbeans.config.BeansDeployer validateInjectionPoints +INFORMATION: All injection points were validated successfully. +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: OpenWebBeans Container has started, it took 665 ms. +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +März 24, 2022 9:34:42 VORM. org.apache.batchee.container.services.ServicesManager init +WARNUNG: You didn't specify org.apache.batchee.jmx.application and JMX is already registered, skipping +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Deployed Application(path=/home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest) +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Undeploying app: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:42 VORM. org.hibernate.tool.schema.internal.SchemaDropperImpl$DelayedDropActionImpl perform +INFO: HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down' +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Closing DataSource: movieDatabase +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Closing DataSource: movieDatabaseNonJta +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.567 sec Results : diff --git a/examples/jpa-hibernate/README_pt.adoc b/examples/jpa-hibernate/README_pt.adoc index 1eca3a2..c0451cc 100644 --- a/examples/jpa-hibernate/README_pt.adoc +++ b/examples/jpa-hibernate/README_pt.adoc @@ -22,7 +22,7 @@ indica que a geração desses identificadores unicos serão gerenciados pelo pro [source,java] ---- -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -79,20 +79,20 @@ public class Movie { == Movies Agora nós podemos notar duas coisas diferentes: a anotação -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/PersistenceContext.html[@PersistenceContext] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/PersistenceContext.html[@PersistenceContext] e a declaração de um -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/EntityManager.html[EntityManager]. +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/EntityManager.html[EntityManager]. O -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/EntityManager.html[EntityManager] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/EntityManager.html[EntityManager] é uma interface com as principais funcionalidades do JPA como persist, remove, merge, find e outros... Nós anotamos o -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/EntityManager.html[EntityManager] +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/EntityManager.html[EntityManager] com -link:https://tomee.apache.org/tomee-8.0/javadoc/javax/persistence/PersistenceContext.html[@PersistenceContext], um contexto de persistência é um gerenciamento de entidades onde, todo contexto de persistência é associado com uma unidade de persistência (persistence-unit), logo criaremos um persistence.xml para isso. +link:https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/PersistenceContext.html[@PersistenceContext], um contexto de persistência é um gerenciamento de entidades onde, todo contexto de persistência é associado com uma unidade de persistência (persistence-unit), logo criaremos um persistence.xml para isso. [source,java] ---- -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.ejb.Stateful; import jakarta.persistence.EntityManager; @@ -124,22 +124,28 @@ public class Movies { == persistence.xml -Aqui nós definimos qual banco de dados vai gravar nossos filmes (Movie) e realizamos outras configurações como: definir uma unidade de persistência (persistence-unit) com o nome movie-unit, seguidos pela definição do provedor/implementação do JPA (no caso o hibernate) e definimos algumas properties para o hibernate: - - <persistence version="1.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_1_0.xsd"> - <persistence-unit name="movie-unit"> - <provider>org.hibernate.ejb.HibernatePersistence</provider> - <jta-data-source>movieDatabase</jta-data-source> - <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> - <properties> - <property name="hibernate.hbm2ddl.auto" value="create-drop"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> - </properties> - </persistence-unit> - </persistence> +Aqui nós definimos qual banco de dados vai gravar nossos filmes (Movie) e realizamos outras configurações como: definir uma unidade de persistência (persistence-unit) com o nome movie-unit, seguidos pela definição do provedor/implementação do JPA (no caso o hibernate) e definimos algumas properties para o hibernate. +Note-se que estamos a utilizar compositores de aplicação no nosso teste, pelo que não precisamos dele na sua representação xml. + +[source,xml] +---- +<persistence xmlns="https://jakarta.ee/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd" + version="3.0"> + <persistence-unit name="movie-unit"> + <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <properties> + <property name="hibernate.hbm2ddl.auto" value="create-drop"/> + <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> + <property name="tomee.jpa.cdi" value="false"/> + </properties> + </persistence-unit> +</persistence> + +---- == MoviesTest @@ -147,29 +153,59 @@ Agora vamos realizar um teste, persistindo três filmes, em seguida realizamos u [source,java] ---- -package org.superbiz.injection.h3jpa; - -import junit.framework.TestCase; +package org.superbiz.injection.h5jpa; + +import jakarta.inject.Inject; +import org.apache.openejb.jee.EjbJar; +import org.apache.openejb.jee.jpa.unit.PersistenceUnit; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.testing.Classes; +import org.apache.openejb.testing.Configuration; +import org.apache.openejb.testing.Module; +import org.junit.Test; +import org.junit.runner.RunWith; -import jakarta.ejb.embeddable.EJBContainer; -import javax.naming.Context; import java.util.List; import java.util.Properties; -/** - * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $ - */ -public class MoviesTest extends TestCase { +import static org.junit.Assert.assertEquals; - public void test() throws Exception { - final Properties p = new Properties(); +@RunWith(ApplicationComposer.class) +public class MoviesTest { + + @Inject + private Movies movies; + + @Module + public PersistenceUnit persistence() { + PersistenceUnit unit = new PersistenceUnit("movie-unit"); + unit.setJtaDataSource("movieDatabase"); + unit.setNonJtaDataSource("movieDatabaseUnmanaged"); + unit.getClazz().add(Movie.class.getName()); + unit.setProvider("org.hibernate.jpa.HibernatePersistenceProvider"); + unit.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + unit.setProperty("tomee.jpa.cdi", "false"); + return unit; + } + + @Module + @Classes(cdi = true, value = Movies.class) + public EjbJar beans() { + EjbJar ejbJar = new EjbJar("movie-beans"); + return ejbJar; + } + + @Configuration + public Properties config() throws Exception { + Properties p = new Properties(); p.put("movieDatabase", "new://Resource?type=DataSource"); p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + return p; + } - final Context context = EJBContainer.createEJBContainer(p).getContext(); - Movies movies = (Movies) context.lookup("java:global/jpa-hibernate/Movies"); - + @Test + public void test() throws Exception { movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); @@ -186,18 +222,18 @@ public class MoviesTest extends TestCase { } ---- -= Executando +== Executando Para executar o exemplo com o maven, acesse a pasta do projeto: -[source,java] +[source,bash] ---- cd jpa-hibernate ---- E execute: -[source,java] +[source,bash] ---- mvn clean install ---- @@ -209,39 +245,115 @@ Com isso teremos uma saida no terminal similar a esta: ------------------------------------------------------- T E S T S ------------------------------------------------------- -Running org.superbiz.injection.h3jpa.MoviesTest -Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 -http://tomee.apache.org/ -INFO - openejb.home = /Users/dblevins/examples/jpa-hibernate -INFO - openejb.base = /Users/dblevins/examples/jpa-hibernate -INFO - Using 'jakarta.ejb.embeddable.EJBContainer=true' -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 - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) -INFO - Found EjbModule in classpath: /Users/dblevins/examples/jpa-hibernate/target/classes -INFO - Beginning load: /Users/dblevins/examples/jpa-hibernate/target/classes -INFO - Configuring enterprise application: /Users/dblevins/examples/jpa-hibernate -INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) -INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) -INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) -INFO - Auto-creating a container for bean org.superbiz.injection.h3jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container) -INFO - Configuring PersistenceUnit(name=movie-unit, provider=org.hibernate.ejb.HibernatePersistence) -INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. -INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) -INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' -INFO - Enterprise application "/Users/dblevins/examples/jpa-hibernate" loaded. -INFO - Assembling app: /Users/dblevins/examples/jpa-hibernate -INFO - PersistenceUnit(name=movie-unit, provider=org.hibernate.ejb.HibernatePersistence) - provider time 631ms -INFO - Jndi(name="java:global/jpa-hibernate/Movies!org.superbiz.injection.h3jpa.Movies") -INFO - Jndi(name="java:global/jpa-hibernate/Movies") -INFO - Jndi(name="java:global/EjbModule1235930463/org.superbiz.injection.h3jpa.MoviesTest!org.superbiz.injection.h3jpa.MoviesTest") -INFO - Jndi(name="java:global/EjbModule1235930463/org.superbiz.injection.h3jpa.MoviesTest") -INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) -INFO - Created Ejb(deployment-id=org.superbiz.injection.h3jpa.MoviesTest, ejb-name=org.superbiz.injection.h3jpa.MoviesTest, container=Default Managed Container) -INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) -INFO - Started Ejb(deployment-id=org.superbiz.injection.h3jpa.MoviesTest, ejb-name=org.superbiz.injection.h3jpa.MoviesTest, container=Default Managed Container) -INFO - Deployed Application(path=/Users/dblevins/examples/jpa-hibernate) -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.22 sec +Running org.superbiz.injection.h5jpa.MoviesTest +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@176d53b2 +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Succeeded in installing singleton service +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating TransactionManager(id=Default Transaction Manager) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating SecurityService(id=Default Security Service) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Resource(id=movieDatabase) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring enterprise application: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-deploying ejb Movies: EjbDeployment(deployment-id=Movies) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a container for bean org.superbiz.injection.h5jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Container(id=Default Managed Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Using directory /tmp for stateful session passivation +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Container(id=Default Stateful Container) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Using directory /tmp for stateful session passivation +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring PersistenceUnit(name=movie-unit, provider=org.hibernate.jpa.HibernatePersistenceProvider) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource' for 'movie-unit'. +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Creating Resource(id=movieDatabaseNonJta) +März 24, 2022 9:34:39 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Enterprise application "/home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest" loaded. +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Not creating another application classloader for MoviesTest +März 24, 2022 9:34:40 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Assembling app: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:40 VORM. org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation +INFO: HHH000204: Processing PersistenceUnitInfo [name: movie-unit] +März 24, 2022 9:34:40 VORM. org.hibernate.Version logVersion +INFO: HHH000412: Hibernate ORM core version 5.6.7.Final +März 24, 2022 9:34:40 VORM. org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> +INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +März 24, 2022 9:34:40 VORM. org.hibernate.dialect.Dialect <init> +INFO: HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect +März 24, 2022 9:34:40 VORM. org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator resolveBeanContainer +INFO: HHH10005002: No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader. +März 24, 2022 9:34:40 VORM. org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService +INFO: HHH000490: Using JtaPlatform implementation: [org.apache.openejb.hibernate.OpenEJBJtaPlatform2] +März 24, 2022 9:34:40 VORM. org.hibernate.validator.internal.util.Version <clinit> +INFO: HV000001: Hibernate Validator 7.0.4.Final +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: PersistenceUnit(name=movie-unit, provider=org.hibernate.jpa.HibernatePersistenceProvider) - provider time 1292ms +WARNING: An illegal reflective access operation has occurred +WARNING: Illegal reflective access by org.apache.openejb.util.proxy.ClassDefiner (file:/home/zowallar/.m2/repository/org/apache/tomee/openejb-core/9.0.0-M8-SNAPSHOT/openejb-core-9.0.0-M8-SNAPSHOT.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) +WARNING: Please consider reporting this to the maintainers of org.apache.openejb.util.proxy.ClassDefiner +WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations +WARNING: All illegal access operations will be denied in a future release +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=MoviesLocalBean) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=global/MoviesTest/movie-beans/Movies!org.superbiz.injection.h5jpa.Movies) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Jndi(name=global/MoviesTest/movie-beans/Movies) --> Ejb(deployment-id=Movies) +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@176d53b2 +März 24, 2022 9:34:41 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: OpenWebBeans Container is starting... +März 24, 2022 9:34:41 VORM. org.apache.webbeans.plugins.PluginLoader startUp +INFORMATION: Adding OpenWebBeansPlugin : [CdiPlugin] +März 24, 2022 9:34:42 VORM. org.apache.webbeans.config.BeansDeployer validateInjectionPoints +INFORMATION: All injection points were validated successfully. +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: OpenWebBeans Container has started, it took 665 ms. +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +März 24, 2022 9:34:42 VORM. org.apache.batchee.container.services.ServicesManager init +WARNUNG: You didn't specify org.apache.batchee.jmx.application and JMX is already registered, skipping +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Deployed Application(path=/home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest) +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Undeploying app: /home/zowallar/Dokumente/work/coding/tomee/examples/jpa-hibernate/MoviesTest +März 24, 2022 9:34:42 VORM. org.hibernate.tool.schema.internal.SchemaDropperImpl$DelayedDropActionImpl perform +INFO: HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down' +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Closing DataSource: movieDatabase +März 24, 2022 9:34:42 VORM. org.apache.openejb.util.LogStreamAsync run +INFORMATION: Closing DataSource: movieDatabaseNonJta +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.567 sec Results : diff --git a/examples/jpa-hibernate/pom.xml b/examples/jpa-hibernate/pom.xml index 17b6cac..04346c5 100644 --- a/examples/jpa-hibernate/pom.xml +++ b/examples/jpa-hibernate/pom.xml @@ -33,28 +33,12 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.5.1</version> + <version>3.8.1</version> <configuration> - <source>1.8</source> - <target>1.8</target> + <source>11</source> + <target>11</target> </configuration> </plugin> - <plugin> - <groupId>org.tomitribe.transformer</groupId> - <artifactId>org.eclipse.transformer.maven</artifactId> - <version>0.1.1a</version> - <configuration> - <classifier>jakartaee9</classifier> - </configuration> - <executions> - <execution> - <goals> - <goal>run</goal> - </goals> - <phase>package</phase> - </execution> - </executions> - </plugin> </plugins> </build> <repositories> @@ -88,7 +72,7 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>4.12</version> + <version>4.13.2</version> <scope>test</scope> </dependency> <!-- openejb (with hibernate) container for running tests --> @@ -99,6 +83,12 @@ <type>pom</type> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.tomee.bom</groupId> + <artifactId>tomee-plus</artifactId> + <version>9.0.0-M8-SNAPSHOT</version> + <scope>test</scope> + </dependency> </dependencies> <!-- This section allows you to configure where to publish libraries for sharing. diff --git a/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h3jpa/Movie.java b/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h5jpa/Movie.java similarity index 97% rename from examples/jpa-hibernate/src/main/java/org/superbiz/injection/h3jpa/Movie.java rename to examples/jpa-hibernate/src/main/java/org/superbiz/injection/h5jpa/Movie.java index 7986527..59a9a09 100644 --- a/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h3jpa/Movie.java +++ b/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h5jpa/Movie.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; diff --git a/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h3jpa/Movies.java b/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h5jpa/Movies.java similarity index 97% rename from examples/jpa-hibernate/src/main/java/org/superbiz/injection/h3jpa/Movies.java rename to examples/jpa-hibernate/src/main/java/org/superbiz/injection/h5jpa/Movies.java index c12e5ce..33b19db 100644 --- a/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h3jpa/Movies.java +++ b/examples/jpa-hibernate/src/main/java/org/superbiz/injection/h5jpa/Movies.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; import jakarta.ejb.Stateful; import jakarta.persistence.EntityManager; diff --git a/examples/jpa-hibernate/src/main/resources/META-INF/persistence.xml b/examples/jpa-hibernate/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 79d2e33..0000000 --- a/examples/jpa-hibernate/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<persistence version="1.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_1_0.xsd"> - <persistence-unit name="movie-unit"> - <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> - <jta-data-source>movieDatabase</jta-data-source> - <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> - <properties> - <property name="hibernate.hbm2ddl.auto" value="create-drop"/> - <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> - </properties> - </persistence-unit> -</persistence> diff --git a/examples/jpa-hibernate/src/test/java/org/superbiz/injection/h3jpa/MoviesTest.java b/examples/jpa-hibernate/src/test/java/org/superbiz/injection/h5jpa/MoviesTest.java similarity index 53% rename from examples/jpa-hibernate/src/test/java/org/superbiz/injection/h3jpa/MoviesTest.java rename to examples/jpa-hibernate/src/test/java/org/superbiz/injection/h5jpa/MoviesTest.java index f51d1cf..eb005c0 100644 --- a/examples/jpa-hibernate/src/test/java/org/superbiz/injection/h3jpa/MoviesTest.java +++ b/examples/jpa-hibernate/src/test/java/org/superbiz/injection/h5jpa/MoviesTest.java @@ -14,32 +14,59 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.superbiz.injection.h3jpa; +package org.superbiz.injection.h5jpa; -import junit.framework.TestCase; +import jakarta.inject.Inject; +import org.apache.openejb.jee.EjbJar; +import org.apache.openejb.jee.jpa.unit.PersistenceUnit; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.testing.Classes; +import org.apache.openejb.testing.Configuration; +import org.apache.openejb.testing.Module; +import org.junit.Test; +import org.junit.runner.RunWith; -import jakarta.ejb.embeddable.EJBContainer; -import javax.naming.Context; import java.util.List; import java.util.Properties; -/** - * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $ - */ -public class MoviesTest extends TestCase { +import static org.junit.Assert.assertEquals; - public void test() throws Exception { - System.setProperty("hsqldb.reconfig_logging", "false"); - System.setProperty("tomee.jpa.factory.lazy", "true"); +@RunWith(ApplicationComposer.class) +public class MoviesTest { + + @Inject + private Movies movies; + + @Module + public PersistenceUnit persistence() { + PersistenceUnit unit = new PersistenceUnit("movie-unit"); + unit.setJtaDataSource("movieDatabase"); + unit.setNonJtaDataSource("movieDatabaseUnmanaged"); + unit.getClazz().add(Movie.class.getName()); + unit.setProvider("org.hibernate.jpa.HibernatePersistenceProvider"); + unit.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + unit.setProperty("tomee.jpa.cdi", "false"); + return unit; + } - final Properties p = new Properties(); + @Module + @Classes(cdi = true, value = Movies.class) + public EjbJar beans() { + EjbJar ejbJar = new EjbJar("movie-beans"); + return ejbJar; + } + + @Configuration + public Properties config() throws Exception { + Properties p = new Properties(); p.put("movieDatabase", "new://Resource?type=DataSource"); p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + return p; + } - final Context context = EJBContainer.createEJBContainer(p).getContext(); - Movies movies = (Movies) context.lookup("java:global/jpa-hibernate/Movies"); - + @Test + public void test() throws Exception { movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998));
