|
From: <hib...@li...> - 2006-05-04 03:17:13
|
Author: epbernard
Date: 2006-05-03 23:17:03 -0400 (Wed, 03 May 2006)
New Revision: 9869
Modified:
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Television.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java
Log:
EJB-101 avoid overriden method call
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java 2006-05-04 02:40:24 UTC (rev 9868)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/CallbackResolver.java 2006-05-04 03:17:03 UTC (rev 9869)
@@ -49,6 +49,7 @@
public static Callback[] resolveCallback(XClass beanClass, Class annotation, ReflectionManager reflectionManager) {
List<Callback> callbacks = new ArrayList<Callback>();
+ List<String> callbacksMethodNames = new ArrayList<String>(); //used to track overriden methods
List<Class> orderedListeners = new ArrayList<Class>();
XClass currentClazz = beanClass;
boolean stopListeners = false;
@@ -75,7 +76,12 @@
if ( ! method.isAccessible() ) {
method.setAccessible( true );
}
- callbacks.add( 0, callback ); //superclass first
+ final String methodName = method.getName();
+ if ( ! callbacksMethodNames.contains( methodName) ) {
+ //overriden method, remove the superclass overriden method
+ callbacks.add( 0, callback ); //superclass first
+ callbacksMethodNames.add( 0, methodName );
+ }
}
else {
throw new PersistenceException(
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java 2006-05-04 02:40:24 UTC (rev 9868)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java 2006-05-04 03:17:03 UTC (rev 9869)
@@ -21,8 +21,6 @@
super();
}
- ;
-
public EJB3PersistEventListener(EntityCallbackHandler callbackHandler) {
super();
this.callbackHandler = callbackHandler;
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-04 02:40:24 UTC (rev 9868)
+++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java 2006-05-04 03:17:03 UTC (rev 9869)
@@ -120,10 +120,10 @@
em.getTransaction().begin();
Television tv = new Television();
em.persist( tv );
- em.flush();
tv.setName( "Myaio" );
tv.init();
em.flush();
+ assertEquals( 1, tv.counter );
em.getTransaction().rollback();
assertEquals( 5, tv.communication );
assertTrue( tv.isLast );
Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Television.java
===================================================================
--- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Television.java 2006-05-04 02:40:24 UTC (rev 9868)
+++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/Television.java 2006-05-04 03:17:03 UTC (rev 9869)
@@ -8,6 +8,7 @@
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PreUpdate;
+import javax.persistence.PrePersist;
/**
* @author Emmanuel Bernard
@@ -53,4 +54,11 @@
isLast = true;
communication++;
}
+
+ @PrePersist
+ public void prepareEntity() {
+ //override a super method annotated with the same
+ // event for it not to be called
+ counter++;
+ }
}
Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java
===================================================================
--- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java 2006-05-04 02:40:24 UTC (rev 9868)
+++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java 2006-05-04 03:17:03 UTC (rev 9869)
@@ -5,6 +5,7 @@
import javax.persistence.ExcludeSuperclassListeners;
import javax.persistence.MappedSuperclass;
import javax.persistence.PreUpdate;
+import javax.persistence.PrePersist;
/**
* @author Emmanuel Bernard
@@ -13,10 +14,16 @@
@EntityListeners({FirstOneListener.class, IncreaseListener.class})
@MappedSuperclass
public class VideoSystem extends CommunicationSystem {
+ public transient int counter = 0;
@PreUpdate
public void increase() {
isFirst = false;
isLast = false;
communication++;
}
+
+ @PrePersist
+ public void prepareEntity() {
+ counter++;
+ }
}
|