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