You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by Jason Dillon <ja...@planet57.com> on 2006/11/09 04:03:10 UTC
Re: svn commit: r472745 - /geronimo/server/trunk/modules/geronimo-persistence-jpa10/src/test/java/org/apache/geronimo/persistence/CMPEntityManagerTest.java
I think we are gonna sweep through the headers again... I've seen
several commits with old headers on em... :-\
--jason
On Nov 8, 2006, at 6:52 PM, djencks@apache.org wrote:
> Author: djencks
> Date: Wed Nov 8 18:52:33 2006
> New Revision: 472745
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=472745
> Log:
> Add back test after adapting it to jta1.0.1B tm
>
> Added:
> geronimo/server/trunk/modules/geronimo-persistence-jpa10/src/
> test/java/org/apache/geronimo/persistence/
> CMPEntityManagerTest.java (with props)
>
> Added: geronimo/server/trunk/modules/geronimo-persistence-jpa10/src/
> test/java/org/apache/geronimo/persistence/CMPEntityManagerTest.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/
> geronimo-persistence-jpa10/src/test/java/org/apache/geronimo/
> persistence/CMPEntityManagerTest.java?view=auto&rev=472745
> ======================================================================
> ========
> --- geronimo/server/trunk/modules/geronimo-persistence-jpa10/src/
> test/java/org/apache/geronimo/persistence/CMPEntityManagerTest.java
> (added)
> +++ geronimo/server/trunk/modules/geronimo-persistence-jpa10/src/
> test/java/org/apache/geronimo/persistence/CMPEntityManagerTest.java
> Wed Nov 8 18:52:33 2006
> @@ -0,0 +1,317 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + * Licensed 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.
> + */
> +
> +package org.apache.geronimo.persistence;
> +
> +import java.util.Map;
> +import java.util.HashMap;
> +
> +import javax.persistence.EntityManager;
> +import javax.persistence.TransactionRequiredException;
> +import javax.ejb.EJBException;
> +
> +import junit.framework.TestCase;
> +import
> org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
> +import
> org.apache.geronimo.persistence.mockjpa.MockEntityManagerFactory;
> +import org.apache.geronimo.persistence.mockjpa.MockEntityManager;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public class CMPEntityManagerTest extends TestCase {
> +
> + private GeronimoTransactionManager tm;
> + private String persistenceUnit = "foo";
> + private MockEntityManagerFactory entityManagerFactory;
> +
> + protected void setUp() throws Exception {
> + tm = new GeronimoTransactionManager();
> + tm.addTransactionAssociationListener(new
> TransactionListener());
> + entityManagerFactory = new MockEntityManagerFactory();
> + }
> +
> + /**
> + * section 3.1.1
> + * (not very clear). getTransaction, joinTransaction throw
> IllegalStateException
> + */
> + public void testGetTransaction() throws Exception {
> + CMPEntityManagerTxScoped entityManager1 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + try {
> + entityManager1.getTransaction();
> + fail("Expected IllegalStateException");
> + } catch(IllegalStateException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception " + e);
> + }
> + tm.begin();
> + try {
> + entityManager1.getTransaction();
> + fail("Expected IllegalStateException");
> + } catch(IllegalStateException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception " + e);
> + }
> + tm.commit();
> + }
> +
> + public void testJoinTransaction() throws Exception {
> + CMPEntityManagerTxScoped entityManager1 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + try {
> + entityManager1.joinTransaction();
> + fail("Expected IllegalStateException");
> + } catch(IllegalStateException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception " + e);
> + }
> + tm.begin();
> + try {
> + entityManager1.joinTransaction();
> + fail("Expected IllegalStateException");
> + } catch(IllegalStateException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception " + e);
> + }
> + tm.commit();
> + }
> +
> + /**
> + * section 3.1.1 ????
> + * isOpen returns true
> + */
> + public void testIsOpen() throws Exception {
> + CMPEntityManagerTxScoped entityManager1 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + assertTrue(entityManager1.isOpen());
> + tm.begin();
> + assertTrue(entityManager1.isOpen());
> + tm.commit();
> + assertTrue(entityManager1.isOpen());
> + tm.begin();
> + assertTrue(entityManager1.isOpen());
> + tm.rollback();
> + assertTrue(entityManager1.isOpen());
> + }
> +
> + /**
> + * section 5.6.2
> + * extended context is closed when the SFSB that caused it is
> removed
> + */
> + public void testExtendedClosedOnBeanRemove() throws Exception {
> + CMPEntityManagerExtended entityManager1 = new
> CMPEntityManagerExtended(tm, persistenceUnit, entityManagerFactory,
> null);
> + MockEntityManager pc1 = (MockEntityManager)
> entityManager1.find(EntityManager.class, "this");
> + assertTrue("base EntityManager should not be closed", !
> pc1.isClosed());
> + assertNotNull("InternalEntityManager should be
> registered", EntityManagerExtendedRegistry.getEntityManager
> (persistenceUnit));
> + entityManager1.beanRemoved();
> + assertTrue("base EntityManager should be closed",
> pc1.isClosed());
> + assertNull("InternalEntityManager should not be
> registered", EntityManagerExtendedRegistry.getEntityManager
> (persistenceUnit));
> + }
> +
> + /**
> + * section 5.6.2.1
> + * extended context is closed when the SFSB that caused it and
> all others that share it are removed
> + */
> + public void testInheritedExtendedClosedOnBeanRemove() throws
> Exception {
> + CMPEntityManagerExtended entityManager1 = new
> CMPEntityManagerExtended(tm, persistenceUnit, entityManagerFactory,
> null);
> + MockEntityManager pc1 = (MockEntityManager)
> entityManager1.find(EntityManager.class, "this");
> + assertTrue("base EntityManager should not be closed", !
> pc1.isClosed());
> + InternalCMPEntityManagerExtended internalEntityManager1 =
> EntityManagerExtendedRegistry.getEntityManager(persistenceUnit);
> + assertNotNull("InternalEntityManager should be
> registered", internalEntityManager1);
> + CMPEntityManagerExtended entityManager2 = new
> CMPEntityManagerExtended(tm, persistenceUnit, entityManagerFactory,
> null);
> + InternalCMPEntityManagerExtended internalEntityManager2 =
> EntityManagerExtendedRegistry.getEntityManager(persistenceUnit);
> + //we should have got an exception if this isn't true
> + assertSame("2nd entity manager registering should use same
> internal entity manager", internalEntityManager1,
> internalEntityManager2);
> + MockEntityManager pc2 = (MockEntityManager)
> entityManager2.find(EntityManager.class, "this");
> + assertSame("2nd entity manager registering should use same
> mock entity manager", pc1, pc2);
> +
> + //remove one bean, internal and mock entity managers
> should not change state
> + entityManager1.beanRemoved();
> + assertTrue("base EntityManager should not be closed", !
> pc1.isClosed());
> + assertNotNull("InternalEntityManager should be
> registered", EntityManagerExtendedRegistry.getEntityManager
> (persistenceUnit));
> +
> + //close other bean, everything should close and unregister
> + entityManager2.beanRemoved();
> + assertTrue("base EntityManager should be closed",
> pc1.isClosed());
> + assertNull("InternalEntityManager should not be
> registered", EntityManagerExtendedRegistry.getEntityManager
> (persistenceUnit));
> + }
> +
> + /**
> + * section 5.6.3.1
> + * Trying to propagate a JTA tx with a persistence context
> bound into a SFSB with Extended persistence context
> + * results in an EJBException
> + */
> + public void testNoSimultaneousEntityManagers() throws Exception {
> + //set up the extended persistence context:
> + CMPEntityManagerExtended entityManager1 = new
> CMPEntityManagerExtended(tm, persistenceUnit, entityManagerFactory,
> null);
> + //set up the caller
> + CMPEntityManagerTxScoped entityManager2 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + tm.begin();
> + //register the caller
> + MockEntityManager pc1 = (MockEntityManager)
> entityManager2.find(EntityManager.class, "this");
> + //caller calling SFSB means entityManager1 tries to join
> the trasaction:
> + InternalCMPEntityManagerExtended internalEntityManager =
> EntityManagerExtendedRegistry.getEntityManager(persistenceUnit);
> + try {
> + internalEntityManager.joinTransaction();
> + fail("Expected EJBException");
> + } catch (EJBException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Unexpected exception " + e);
> + }
> + tm.commit();
> + }
> +
> + /**
> + * section 5.8.2
> + * use the same persistence context for all work in a tx
> + */
> + public void testSamePersistenceContext() throws Exception {
> + tm.begin();
> + CMPEntityManagerTxScoped entityManager1 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + EntityManager pc1 = entityManager1.find
> (EntityManager.class, "this");
> + CMPEntityManagerTxScoped entityManager2 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + EntityManager pc2 = entityManager2.find
> (EntityManager.class, "this");
> + assertSame("Should get same entity manager for all work in
> a tx", pc1, pc2);
> + tm.commit();
> + }
> +
> + /**
> + * section 5.9.1
> + * close or cleared is called when tx commits
> + */
> + public void testCloseOnCommit() throws Exception {
> + tm.begin();
> + CMPEntityManagerTxScoped entityManager1 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + MockEntityManager pc1 = (MockEntityManager)
> entityManager1.find(EntityManager.class, "this");
> + assertTrue("entityManager should not be closed or
> cleared", !pc1.isClosed() & !pc1.isCleared());
> + tm.commit();
> + assertTrue("entityManager should be closed or cleared",
> pc1.isClosed() || pc1.isCleared());
> + tm.begin();
> + CMPEntityManagerTxScoped entityManager2 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + MockEntityManager pc2 = (MockEntityManager)
> entityManager2.find(EntityManager.class, "this");
> + assertTrue("entityManager should not be closed or
> cleared", !pc2.isClosed() & !pc2.isCleared());
> + tm.rollback();
> + assertTrue("entityManager should be closed or cleared",
> pc2.isClosed() || pc2.isCleared());
> + }
> +
> + /**
> + * section 5.9.1
> + * transaction required for persist, remove, merge, refresh
> + */
> + public void testTransactionRequired() throws Exception {
> + CMPEntityManagerTxScoped entityManager1 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + try {
> + entityManager1.persist("foo");
> + fail("expected TransactionRequiredException");
> + } catch (TransactionRequiredException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception" + e);
> + }
> + try {
> + entityManager1.remove("foo");
> + fail("expected TransactionRequiredException");
> + } catch (TransactionRequiredException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception" + e);
> + }
> + try {
> + entityManager1.merge("foo");
> + fail("expected TransactionRequiredException");
> + } catch (TransactionRequiredException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception" + e);
> + }
> + try {
> + entityManager1.refresh("foo");
> + fail("expected TransactionRequiredException");
> + } catch (TransactionRequiredException e) {
> + //expected
> + } catch (Exception e) {
> + fail("Wrong exception" + e);
> + }
> + }
> +
> + /**
> + * section 5.9.1
> + * when a SFSB/extended context starts a UserTransaction or a
> CMT tx starts the EM must join the transaction
> + */
> + public void testExtendedEntityManagerJoinsNewTransactions()
> throws Exception {
> + CMPEntityManagerExtended entityManager1 = new
> CMPEntityManagerExtended(tm, persistenceUnit, entityManagerFactory,
> null);
> + tm.begin();
> + MockEntityManager pc1 = (MockEntityManager)
> entityManager1.find(EntityManager.class, "this");
> +
> + assertTrue("EntityManager was supposed to join the tx",
> pc1.isJoined());
> + }
> +
> + /**
> + * section 5.9.1
> + * application must not call close on its entityManager
> + */
> + public void testAppCallsCloseForbidden() throws Exception {
> + CMPEntityManagerTxScoped entityManager1 = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + try {
> + entityManager1.close();
> + fail("Application should not be able to call close on
> its EntityManager");
> + } catch (IllegalStateException e) {
> + //expected
> + }
> + tm.begin();
> + try {
> + entityManager1.close();
> + fail("Application should not be able to call close on
> its EntityManager");
> + } catch (IllegalStateException e) {
> + //expected
> + }
> + tm.commit();
> + }
> +
> +
> + /**
> + * section 5.9.1
> + *
> + * @throws Exception
> + */
> + public void testNoPropertiesUsed() throws Exception {
> +
> + CMPEntityManagerTxScoped entityManager = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> null);
> + tm.begin();
> + entityManager.contains("bar");
> + Map props = entityManager.find(Map.class, "properties");
> + assertSame("Props are not null", props, null);
> + tm.commit();
> + }
> +
> + /**
> + * section 5.9.1
> + *
> + * @throws Exception
> + */
> + public void testPropertiesUsed() throws Exception {
> + Map properties = new HashMap();
> + CMPEntityManagerTxScoped entityManager = new
> CMPEntityManagerTxScoped(tm, persistenceUnit, entityManagerFactory,
> properties);
> + tm.begin();
> + entityManager.contains("bar");
> + Map props = entityManager.find(Map.class, "properties");
> + assertSame("Props are not what was passed in", props,
> properties);
> + tm.commit();
> + }
> +}
>
> Propchange: geronimo/server/trunk/modules/geronimo-persistence-
> jpa10/src/test/java/org/apache/geronimo/persistence/
> CMPEntityManagerTest.java
> ----------------------------------------------------------------------
> --------
> svn:eol-style = native
>
> Propchange: geronimo/server/trunk/modules/geronimo-persistence-
> jpa10/src/test/java/org/apache/geronimo/persistence/
> CMPEntityManagerTest.java
> ----------------------------------------------------------------------
> --------
> svn:keywords = Date Revision
>
> Propchange: geronimo/server/trunk/modules/geronimo-persistence-
> jpa10/src/test/java/org/apache/geronimo/persistence/
> CMPEntityManagerTest.java
> ----------------------------------------------------------------------
> --------
> svn:mime-type = text/plain
>
>