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 );
|