Author: epbernard Date: 2006-06-08 21:31:32 -0400 (Thu, 08 Jun 2006) New Revision: 10003 Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/EntityManagerTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java Log: EJB-194 EJB-195 Wrap QueryException EJB-196 (partial wrap TransientObjectException) Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-06-09 01:25:55 UTC (rev 10002) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-06-09 01:31:32 UTC (rev 10003) @@ -41,6 +41,8 @@ import org.hibernate.Transaction; import org.hibernate.UnresolvableObjectException; import org.hibernate.TypeMismatchException; +import org.hibernate.QueryException; +import org.hibernate.TransientObjectException; import org.hibernate.ejb.transaction.JoinableCMTTransaction; import org.hibernate.engine.SessionFactoryImplementor; import org.hibernate.engine.SessionImplementor; @@ -387,6 +389,7 @@ } protected void markAsRollback() { + log.debug( "mark transaction for rollback"); if ( tx.isActive() ) { tx.setRollbackOnly(); } @@ -574,6 +577,13 @@ else if ( e instanceof UnresolvableObjectException ) { throwPersistenceException( new EntityNotFoundException( e.getMessage() ) ); } + else if ( e instanceof QueryException ) { + throw new IllegalArgumentException( e ); + } + else if ( e instanceof TransientObjectException ) { + markAsRollback(); + throw new IllegalStateException( e ); //Spec 3.2.3 Synchronozation rules + } else { throwPersistenceException( new PersistenceException( e ) ); } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-06-09 01:25:55 UTC (rev 10002) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-06-09 01:31:32 UTC (rev 10003) @@ -837,6 +837,7 @@ //defaults different to Hibernate preparedProperties.setProperty( Environment.RELEASE_CONNECTIONS, "auto" ); + preparedProperties.setProperty( Environment.JPAQL_STRICT_COMPLIANCE, "true" ); //settings that always apply to a compliant EJB3 preparedProperties.setProperty( Environment.AUTOCOMMIT, "true" ); preparedProperties.setProperty( Environment.USE_IDENTIFIER_ROLLBACK, "false" ); Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java 2006-06-09 01:25:55 UTC (rev 10002) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java 2006-06-09 01:31:32 UTC (rev 10003) @@ -1,7 +1,10 @@ //$Id$ package org.hibernate.ejb.event; +import java.io.Serializable; + import org.hibernate.event.EventSource; +import org.hibernate.event.DeleteEvent; import org.hibernate.event.def.DefaultDeleteEventListener; import org.hibernate.persister.entity.EntityPersister; @@ -34,4 +37,13 @@ return super.invokeDeleteLifecycle( session, entity, persister ); } + @Override + protected void performDetachedEntityDeletionCheck(DeleteEvent event) { + EventSource source = event.getSession(); + String entityName = event.getEntityName(); + EntityPersister persister = source.getEntityPersister( entityName, event.getObject() ); + Serializable id = persister.getIdentifier( event.getObject(), source.getEntityMode() ); + entityName = entityName == null ? source.guessEntityName( event.getObject() ) : entityName; + throw new IllegalArgumentException("Removing a detached instance "+ entityName + "#" + id); + } } Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/EntityManagerTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/EntityManagerTest.java 2006-06-09 01:25:55 UTC (rev 10002) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/EntityManagerTest.java 2006-06-09 01:31:32 UTC (rev 10003) @@ -11,7 +11,6 @@ import java.util.Map; import javax.persistence.EntityManager; import javax.persistence.FlushModeType; -import javax.persistence.PersistenceException; import javax.persistence.Query; import org.hibernate.FlushMode; @@ -105,7 +104,7 @@ assertTrue( em.contains( item ) ); em.getTransaction().begin(); - Item item1 = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult(); + Item item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult(); assertNotNull( item1 ); assertSame( item, item1 ); item.setDescr( "Micro$oft wireless mouse" ); @@ -124,7 +123,7 @@ assertSame( item, item1 ); assertTrue( em.contains( item ) ); - item1 = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult(); + item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult(); assertNotNull( item1 ); assertSame( item, item1 ); assertTrue( em.contains( item ) ); @@ -262,7 +261,7 @@ Query query = em.createQuery( "SELECT p FETCH JOIN p.distributors FROM Item p" ); query.getSingleResult(); } - catch (PersistenceException e) { + catch (IllegalArgumentException e) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream( stream ); out.writeObject( e ); @@ -271,7 +270,7 @@ stream.close(); ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized ); ObjectInputStream in = new ObjectInputStream( byteIn ); - PersistenceException deserializedException = (PersistenceException) in.readObject(); + IllegalArgumentException deserializedException = (IllegalArgumentException) in.readObject(); in.close(); byteIn.close(); assertNull( deserializedException.getCause().getCause() ); Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java 2006-06-09 01:25:55 UTC (rev 10002) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java 2006-06-09 01:31:32 UTC (rev 10003) @@ -261,7 +261,7 @@ assertTrue( em.contains( item ) ); em.getTransaction().begin(); - Item item1 = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult(); + Item item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult(); assertNotNull( item1 ); assertSame( item, item1 ); item.setDescr( "Micro$oft wireless mouse" ); @@ -280,7 +280,7 @@ assertSame( item, item1 ); assertTrue( em.contains( item ) ); - item1 = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult(); + item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult(); assertNotNull( item1 ); assertSame( item, item1 ); assertTrue( em.contains( item ) ); Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java 2006-06-09 01:25:55 UTC (rev 10002) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java 2006-06-09 01:31:32 UTC (rev 10003) @@ -46,11 +46,11 @@ manager.createQuery( "select p.address, p.name from Person p order by p.name" ).getResultList().size(), 3 ); - assertEquals( manager.createQuery( "from Person p where p.class = Customer" ).getResultList().size(), 1 ); + assertEquals( manager.createQuery( "select p from Person p where p.class = Customer" ).getResultList().size(), 1 ); manager.getTransaction().commit(); manager.getTransaction().begin(); - List customers = manager.createQuery( "from Customer c left join fetch c.salesperson" ).getResultList(); + List customers = manager.createQuery( "select c from Customer c left join fetch c.salesperson" ).getResultList(); for ( Iterator iter = customers.iterator(); iter.hasNext() ; ) { Customer c = (Customer) iter.next(); assertEquals( c.getSalesperson().getName(), "Mark" ); @@ -59,7 +59,7 @@ manager.getTransaction().commit(); manager.getTransaction().begin(); - customers = manager.createQuery( "from Customer" ).getResultList(); + customers = manager.createQuery( "select c from Customer c" ).getResultList(); for ( Iterator iter = customers.iterator(); iter.hasNext() ; ) { Customer c = (Customer) iter.next(); assertEquals( c.getSalesperson().getName(), "Mark" ); @@ -73,11 +73,11 @@ yomomma = manager.find( Person.class, new Long( ids[2] ) ); mark.setZip( "30306" ); - assertEquals( 1, manager.createQuery( "from Person p where p.zip = '30306'" ).getResultList().size() ); + assertEquals( 1, manager.createQuery( "select p from Person p where p.zip = '30306'" ).getResultList().size() ); manager.remove( mark ); manager.remove( joe ); manager.remove( yomomma ); - assertTrue( manager.createQuery( "from Person" ).getResultList().isEmpty() ); + assertTrue( manager.createQuery( "select p from Person p" ).getResultList().isEmpty() ); manager.getTransaction().commit(); manager.close(); } Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java 2006-06-09 01:25:55 UTC (rev 10002) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java 2006-06-09 01:31:32 UTC (rev 10003) @@ -68,7 +68,7 @@ em.getTransaction().begin(); item = em.find( Item.class, item.getName() ); item.setDescr( item.getDescr() + "-Amsterdam" ); - cat = (Cat) em.createQuery( "from " + Cat.class.getName() ).getSingleResult(); + cat = (Cat) em.createQuery( "select c from " + Cat.class.getName() + " c" ).getSingleResult(); cat.setLength( 34 ); em.flush(); em.remove( item ); |