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;
+ }
+}
|