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