Author: epbernard Date: 2006-05-29 00:04:13 -0400 (Mon, 29 May 2006) New Revision: 9955 Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Rythm.java Modified: trunk/HibernateExt/ejb/lib/hibernate-annotations.jar trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java Log: ANN-350 no schemalocator allowed in dd EJB-187 RE passes as is from callback methods Modified: trunk/HibernateExt/ejb/lib/hibernate-annotations.jar =================================================================== (Binary files differ) Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-05-28 17:20:26 UTC (rev 9954) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Ejb3Configuration.java 2006-05-29 04:04:13 UTC (rev 9955) @@ -367,6 +367,10 @@ SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, cfg.getEntityResolver() ); try { saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true ); + //saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true ); + //set the default schema locators + saxReader.setProperty( "http://apache.org/xml/properties/schema/external-schemaLocation", + "http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"); } catch (SAXException e) { saxReader.setValidation( false ); Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java 2006-05-28 17:20:26 UTC (rev 9954) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/BeanCallback.java 2006-05-29 04:04:13 UTC (rev 9955) @@ -7,6 +7,7 @@ package org.hibernate.ejb.event; import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; /** * @author <a href="mailto:kab...@jb...">Kabir Khan</a> @@ -21,6 +22,15 @@ try { callbackMethod.invoke( bean, new Object[0] ); } + catch (InvocationTargetException e) { + //keep runtime exceptions as is + if ( e.getTargetException() instanceof RuntimeException ) { + throw (RuntimeException) e.getCause(); + } + else { + throw new RuntimeException( e.getTargetException() ); + } + } catch (Exception e) { throw new RuntimeException( e ); } Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java =================================================================== --- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java 2006-05-28 17:20:26 UTC (rev 9954) +++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/ListenerCallback.java 2006-05-29 04:04:13 UTC (rev 9955) @@ -10,6 +10,7 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; import org.hibernate.util.ReflectHelper; @@ -29,6 +30,15 @@ try { callbackMethod.invoke( listener, new Object[]{bean} ); } + catch (InvocationTargetException e) { + //keep runtime exceptions as is + if ( e.getTargetException() instanceof RuntimeException ) { + throw (RuntimeException) e.getCause(); + } + else { + throw new RuntimeException( e.getTargetException() ); + } + } catch (Exception e) { throw new RuntimeException( e ); } Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java 2006-05-28 17:20:26 UTC (rev 9954) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java 2006-05-29 04:04:13 UTC (rev 9955) @@ -125,16 +125,39 @@ em.flush(); assertEquals( 1, tv.counter ); em.getTransaction().rollback(); + em.close(); assertEquals( 5, tv.communication ); assertTrue( tv.isLast ); } + public void testException() throws Exception { + EntityManager em = factory.createEntityManager(); + em.getTransaction().begin(); + Rythm r = new Rythm(); + try { + em.persist( r ); + em.flush(); + fail("should have raised an ArythmeticException:"); + } + catch (ArithmeticException e) { + //success + } + catch( Exception e ) { + fail("should have raised an ArythmeticException:" + e.getClass() ); + } + + em.getTransaction().rollback(); + em.close(); + + } + public Class[] getAnnotatedClasses() { return new Class[]{ Cat.class, Translation.class, Television.class, - RemoteControl.class + RemoteControl.class, + Rythm.class }; } } Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java 2006-05-28 17:20:26 UTC (rev 9954) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java 2006-05-29 04:04:13 UTC (rev 9955) @@ -0,0 +1,14 @@ +//$Id: $ +package org.hibernate.ejb.test.callbacks; + +import javax.persistence.PrePersist; + +/** + * @author Emmanuel Bernard + */ +public class ExceptionListener { + @PrePersist + public void raiseException(Object e) { + throw new ArithmeticException( "1/0 impossible" ); + } +} Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Rythm.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Rythm.java 2006-05-28 17:20:26 UTC (rev 9954) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Rythm.java 2006-05-29 04:04:13 UTC (rev 9955) @@ -0,0 +1,24 @@ +//$Id: $ +package org.hibernate.ejb.test.callbacks; + +import javax.persistence.Id; +import javax.persistence.GeneratedValue; +import javax.persistence.Entity; +import javax.persistence.EntityListeners; + +/** + * @author Emmanuel Bernard + */ +@Entity +@EntityListeners(ExceptionListener.class) +public class Rythm { + @Id @GeneratedValue private Integer id; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } +} |