You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/06/24 16:50:41 UTC

svn commit: r1353279 - /openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java

Author: rmannibucau
Date: Sun Jun 24 14:50:40 2012
New Revision: 1353279

URL: http://svn.apache.org/viewvc?rev=1353279&view=rev
Log:
OPENEJB-1843 avoid to call twice junit hook (use reflection but arquillian is not so open on it)

Modified:
    openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java

Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java?rev=1353279&r1=1353278&r2=1353279&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/TestObserver.java Sun Jun 24 14:50:40 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.arquillian.openejb;
 
+import java.lang.reflect.Field;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.loader.SystemInstance;
@@ -24,6 +25,7 @@ import org.jboss.arquillian.core.api.Ins
 import org.jboss.arquillian.core.api.annotation.Inject;
 import org.jboss.arquillian.core.api.annotation.Observes;
 import org.jboss.arquillian.core.spi.EventContext;
+import org.jboss.arquillian.test.spi.LifecycleMethodExecutor;
 import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
 import org.jboss.arquillian.test.spi.event.suite.After;
 import org.jboss.arquillian.test.spi.event.suite.AfterClass;
@@ -110,6 +112,34 @@ public class TestObserver {
                 event.getExecutor().invoke();
             } catch (Throwable throwable) {
                 throw new RuntimeException(throwable);
+            } finally {
+                resetEventExecutor();
+            }
+        }
+
+        private void resetEventExecutor() {
+            Class<?> current = event.getClass();
+            Field field = null;
+            while (field == null && !Object.class.equals(current) && current != null) {
+                try {
+                    field = current.getDeclaredField("executor");
+                } catch (NoSuchFieldException e) {
+                    // ignored
+                }
+                current = current.getSuperclass();
+            }
+            if (field != null) {
+                field.setAccessible(true);
+                try {
+                    field.set(event, new LifecycleMethodExecutor() {
+                        @Override
+                        public void invoke() throws Throwable {
+                            // no-op: already done
+                        }
+                    });
+                } catch (IllegalAccessException e) {
+                    // ignored
+                }
             }
         }
     }