You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2014/03/03 15:45:59 UTC
git commit: DELTASPIKE-523 unified structure
Repository: deltaspike
Updated Branches:
refs/heads/master b0ce121ac -> e5160ee16
DELTASPIKE-523 unified structure
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/e5160ee1
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/e5160ee1
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/e5160ee1
Branch: refs/heads/master
Commit: e5160ee16e95d740c5d46132d54e5587d1208618
Parents: b0ce121
Author: gpetracek <gp...@apache.org>
Authored: Mon Mar 3 15:44:25 2014 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Mon Mar 3 15:44:25 2014 +0100
----------------------------------------------------------------------
.../control/IntrospectiveExceptionEvent.java | 46 ----
.../event/IntrospectiveExceptionEvent.java | 46 ++++
.../control/DefaultExceptionEvent.java | 2 +-
.../control/ExceptionHandlerBroadcaster.java | 213 +++++++++++++++++++
.../control/ExceptionHandlerDispatch.java | 212 ------------------
.../impl/exception/control/event/EventTest.java | 2 +-
6 files changed, 261 insertions(+), 260 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/e5160ee1/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/IntrospectiveExceptionEvent.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/IntrospectiveExceptionEvent.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/IntrospectiveExceptionEvent.java
deleted file mode 100644
index 1eb061c..0000000
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/IntrospectiveExceptionEvent.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.deltaspike.core.spi.exception.control;
-
-import org.apache.deltaspike.core.api.exception.control.event.ExceptionEvent;
-import org.apache.deltaspike.core.api.exception.control.ExceptionHandlingFlow;
-
-/**
- * Internal view into the ExceptionEvent. Methods on this interface are used by the ExceptionHandlerDispatcher.
- */
-public interface IntrospectiveExceptionEvent<T extends Throwable> extends ExceptionEvent<T>
-{
- /**
- * Check to see if this event has been unmuted and therefore called again.
- */
- boolean isUnmute();
-
- /**
- * The next expected step in the exception handling flow (i.e. abort, rethrow, etc)
- */
- ExceptionHandlingFlow getCurrentExceptionHandlingFlow();
-
- boolean isBeforeTraversal();
-
- /**
- * Returns the exception that should be thrown if the next step in the flow is THROW.
- */
- Throwable getThrowNewException();
-}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/e5160ee1/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/event/IntrospectiveExceptionEvent.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/event/IntrospectiveExceptionEvent.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/event/IntrospectiveExceptionEvent.java
new file mode 100644
index 0000000..d4255a8
--- /dev/null
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/spi/exception/control/event/IntrospectiveExceptionEvent.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.deltaspike.core.spi.exception.control.event;
+
+import org.apache.deltaspike.core.api.exception.control.event.ExceptionEvent;
+import org.apache.deltaspike.core.api.exception.control.ExceptionHandlingFlow;
+
+/**
+ * Internal view into the ExceptionEvent. Methods on this interface are used by the ExceptionHandlerBroadcaster.
+ */
+public interface IntrospectiveExceptionEvent<T extends Throwable> extends ExceptionEvent<T>
+{
+ /**
+ * Check to see if this event has been unmuted and therefore called again.
+ */
+ boolean isUnmute();
+
+ /**
+ * The next expected step in the exception handling flow (i.e. abort, rethrow, etc)
+ */
+ ExceptionHandlingFlow getCurrentExceptionHandlingFlow();
+
+ boolean isBeforeTraversal();
+
+ /**
+ * Returns the exception that should be thrown if the next step in the flow is THROW.
+ */
+ Throwable getThrowNewException();
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/e5160ee1/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/DefaultExceptionEvent.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/DefaultExceptionEvent.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/DefaultExceptionEvent.java
index 95d3799..0ddf7d2 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/DefaultExceptionEvent.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/DefaultExceptionEvent.java
@@ -21,7 +21,7 @@ package org.apache.deltaspike.core.impl.exception.control;
import org.apache.deltaspike.core.api.exception.control.ExceptionHandlingFlow;
import org.apache.deltaspike.core.api.exception.control.event.ExceptionStackEvent;
-import org.apache.deltaspike.core.spi.exception.control.IntrospectiveExceptionEvent;
+import org.apache.deltaspike.core.spi.exception.control.event.IntrospectiveExceptionEvent;
import javax.enterprise.inject.Typed;
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/e5160ee1/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerBroadcaster.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerBroadcaster.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerBroadcaster.java
new file mode 100644
index 0000000..9b8e6f4
--- /dev/null
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerBroadcaster.java
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.deltaspike.core.impl.exception.control;
+
+import org.apache.deltaspike.core.api.exception.control.HandlerMethod;
+import org.apache.deltaspike.core.api.exception.control.event.ExceptionStackEvent;
+import org.apache.deltaspike.core.api.exception.control.event.ExceptionToCatchEvent;
+import org.apache.deltaspike.core.api.provider.BeanProvider;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.spi.BeanManager;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * Observer of {@link org.apache.deltaspike.core.api.exception.control.event.ExceptionToCatchEvent} events and
+ * handler dispatcher. All handlers are invoked from this class. This class is immutable.
+ */
+@ApplicationScoped
+public class ExceptionHandlerBroadcaster
+{
+ private static final Logger LOG = Logger.getLogger(ExceptionHandlerBroadcaster.class.getName());
+
+ /**
+ * Observes the event, finds the correct exception handler(s) and invokes them.
+ *
+ * @param exceptionEventEvent exception to be invoked
+ * @param beanManager active bean manager
+ * @throws Throwable If a handler requests the exception to be re-thrown.
+ */
+ public void executeHandlers(@Observes @Any ExceptionToCatchEvent exceptionEventEvent,
+ final BeanManager beanManager) throws Throwable
+ {
+ LOG.entering(
+ ExceptionHandlerBroadcaster.class.getName(), "executeHandlers", exceptionEventEvent.getException());
+
+ CreationalContext<Object> creationalContext = null;
+
+ Throwable throwException = null;
+
+ final HandlerMethodStorage handlerMethodStorage =
+ BeanProvider.getContextualReference(HandlerMethodStorage.class);
+
+ try
+ {
+ creationalContext = beanManager.createCreationalContext(null);
+
+ final Set<HandlerMethod<?>> processedHandlers = new HashSet<HandlerMethod<?>>();
+
+ final ExceptionStackEvent stack = new ExceptionStackEvent(exceptionEventEvent.getException());
+
+ beanManager.fireEvent(stack); // Allow for modifying the exception stack
+
+ inbound_cause:
+ //indentation needed by the current checkstyle rules
+ while (stack.getCurrent() != null)
+ {
+ final List<HandlerMethod<?>> callbackExceptionEvent = new ArrayList<HandlerMethod<?>>(
+ handlerMethodStorage.getHandlersForException(stack.getCurrent().getClass(),
+ beanManager, exceptionEventEvent.getQualifiers(), true));
+
+ for (HandlerMethod<?> handler : callbackExceptionEvent)
+ {
+ if (!processedHandlers.contains(handler))
+ {
+ LOG.fine(String.format("Notifying handler %s", handler));
+
+ @SuppressWarnings("rawtypes")
+ final DefaultExceptionEvent callbackEvent = new DefaultExceptionEvent(stack, true,
+ exceptionEventEvent.isHandled());
+
+ handler.notify(callbackEvent, beanManager);
+
+ LOG.fine(String.format("Handler %s returned status %s", handler,
+ callbackEvent.getCurrentExceptionHandlingFlow().name()));
+
+ if (!callbackEvent.isUnmute())
+ {
+ processedHandlers.add(handler);
+ }
+
+ switch (callbackEvent.getCurrentExceptionHandlingFlow())
+ {
+ case HANDLED:
+ exceptionEventEvent.setHandled(true);
+ return;
+ case HANDLED_AND_CONTINUE:
+ exceptionEventEvent.setHandled(true);
+ break;
+ case ABORT:
+ return;
+ case SKIP_CAUSE:
+ exceptionEventEvent.setHandled(true);
+ stack.skipCause();
+ continue inbound_cause;
+ case THROW_ORIGINAL:
+ throwException = exceptionEventEvent.getException();
+ break;
+ case THROW:
+ throwException = callbackEvent.getThrowNewException();
+ break;
+ default:
+ throw new IllegalStateException(
+ "Unexpected enum type " + callbackEvent.getCurrentExceptionHandlingFlow());
+ }
+ }
+ }
+
+ final Collection<HandlerMethod<? extends Throwable>> handlersForException =
+ handlerMethodStorage.getHandlersForException(stack.getCurrent().getClass(),
+ beanManager, exceptionEventEvent.getQualifiers(), false);
+
+ final List<HandlerMethod<? extends Throwable>> handlerMethods =
+ new ArrayList<HandlerMethod<? extends Throwable>>(handlersForException);
+
+ // Reverse these so category handlers are last
+ Collections.reverse(handlerMethods);
+
+ for (HandlerMethod<?> handler : handlerMethods)
+ {
+ if (!processedHandlers.contains(handler))
+ {
+ LOG.fine(String.format("Notifying handler %s", handler));
+
+ @SuppressWarnings("rawtypes")
+ final DefaultExceptionEvent depthFirstEvent = new DefaultExceptionEvent(stack, false,
+ exceptionEventEvent.isHandled());
+ handler.notify(depthFirstEvent, beanManager);
+
+ LOG.fine(String.format("Handler %s returned status %s", handler,
+ depthFirstEvent.getCurrentExceptionHandlingFlow().name()));
+
+ if (!depthFirstEvent.isUnmute())
+ {
+ processedHandlers.add(handler);
+ }
+
+ switch (depthFirstEvent.getCurrentExceptionHandlingFlow())
+ {
+ case HANDLED:
+ exceptionEventEvent.setHandled(true);
+ return;
+ case HANDLED_AND_CONTINUE:
+ exceptionEventEvent.setHandled(true);
+ break;
+ case ABORT:
+ return;
+ case SKIP_CAUSE:
+ exceptionEventEvent.setHandled(true);
+ stack.skipCause();
+ continue inbound_cause;
+ case THROW_ORIGINAL:
+ throwException = exceptionEventEvent.getException();
+ break;
+ case THROW:
+ throwException = depthFirstEvent.getThrowNewException();
+ break;
+ default:
+ throw new IllegalStateException(
+ "Unexpected enum type " + depthFirstEvent.getCurrentExceptionHandlingFlow());
+ }
+ }
+ }
+ stack.skipCause();
+ }
+
+ if (!exceptionEventEvent.isHandled() && throwException == null)
+ {
+ LOG.warning(String.format("No handlers found for exception %s", exceptionEventEvent.getException()));
+ throw exceptionEventEvent.getException();
+ }
+
+ if (throwException != null)
+ {
+ throw throwException;
+ }
+ }
+ finally
+ {
+ if (creationalContext != null)
+ {
+ creationalContext.release();
+ }
+ LOG.exiting(ExceptionHandlerBroadcaster.class.getName(), "executeHandlers",
+ exceptionEventEvent.getException());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/e5160ee1/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java
deleted file mode 100644
index 55bf8ee..0000000
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.deltaspike.core.impl.exception.control;
-
-import org.apache.deltaspike.core.api.exception.control.HandlerMethod;
-import org.apache.deltaspike.core.api.exception.control.event.ExceptionStackEvent;
-import org.apache.deltaspike.core.api.exception.control.event.ExceptionToCatchEvent;
-import org.apache.deltaspike.core.api.provider.BeanProvider;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.spi.BeanManager;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Logger;
-
-/**
- * Observer of {@link org.apache.deltaspike.core.api.exception.control.event.ExceptionToCatchEvent} events and
- * handler dispatcher. All handlers are invoked from this class. This class is immutable.
- */
-@ApplicationScoped
-public class ExceptionHandlerDispatch
-{
- private static final Logger LOG = Logger.getLogger(ExceptionHandlerDispatch.class.getName());
-
- /**
- * Observes the event, finds the correct exception handler(s) and invokes them.
- *
- * @param exceptionEventEvent exception to be invoked
- * @param beanManager active bean manager
- * @throws Throwable If a handler requests the exception to be re-thrown.
- */
- public void executeHandlers(@Observes @Any ExceptionToCatchEvent exceptionEventEvent,
- final BeanManager beanManager) throws Throwable
- {
- LOG.entering(ExceptionHandlerDispatch.class.getName(), "executeHandlers", exceptionEventEvent.getException());
-
- CreationalContext<Object> creationalContext = null;
-
- Throwable throwException = null;
-
- final HandlerMethodStorage handlerMethodStorage =
- BeanProvider.getContextualReference(HandlerMethodStorage.class);
-
- try
- {
- creationalContext = beanManager.createCreationalContext(null);
-
- final Set<HandlerMethod<?>> processedHandlers = new HashSet<HandlerMethod<?>>();
-
- final ExceptionStackEvent stack = new ExceptionStackEvent(exceptionEventEvent.getException());
-
- beanManager.fireEvent(stack); // Allow for modifying the exception stack
-
- inbound_cause:
- //indentation needed by the current checkstyle rules
- while (stack.getCurrent() != null)
- {
- final List<HandlerMethod<?>> callbackExceptionEvent = new ArrayList<HandlerMethod<?>>(
- handlerMethodStorage.getHandlersForException(stack.getCurrent().getClass(),
- beanManager, exceptionEventEvent.getQualifiers(), true));
-
- for (HandlerMethod<?> handler : callbackExceptionEvent)
- {
- if (!processedHandlers.contains(handler))
- {
- LOG.fine(String.format("Notifying handler %s", handler));
-
- @SuppressWarnings("rawtypes")
- final DefaultExceptionEvent callbackEvent = new DefaultExceptionEvent(stack, true,
- exceptionEventEvent.isHandled());
-
- handler.notify(callbackEvent, beanManager);
-
- LOG.fine(String.format("Handler %s returned status %s", handler,
- callbackEvent.getCurrentExceptionHandlingFlow().name()));
-
- if (!callbackEvent.isUnmute())
- {
- processedHandlers.add(handler);
- }
-
- switch (callbackEvent.getCurrentExceptionHandlingFlow())
- {
- case HANDLED:
- exceptionEventEvent.setHandled(true);
- return;
- case HANDLED_AND_CONTINUE:
- exceptionEventEvent.setHandled(true);
- break;
- case ABORT:
- return;
- case SKIP_CAUSE:
- exceptionEventEvent.setHandled(true);
- stack.skipCause();
- continue inbound_cause;
- case THROW_ORIGINAL:
- throwException = exceptionEventEvent.getException();
- break;
- case THROW:
- throwException = callbackEvent.getThrowNewException();
- break;
- default:
- throw new IllegalStateException(
- "Unexpected enum type " + callbackEvent.getCurrentExceptionHandlingFlow());
- }
- }
- }
-
- final Collection<HandlerMethod<? extends Throwable>> handlersForException =
- handlerMethodStorage.getHandlersForException(stack.getCurrent().getClass(),
- beanManager, exceptionEventEvent.getQualifiers(), false);
-
- final List<HandlerMethod<? extends Throwable>> handlerMethods =
- new ArrayList<HandlerMethod<? extends Throwable>>(handlersForException);
-
- // Reverse these so category handlers are last
- Collections.reverse(handlerMethods);
-
- for (HandlerMethod<?> handler : handlerMethods)
- {
- if (!processedHandlers.contains(handler))
- {
- LOG.fine(String.format("Notifying handler %s", handler));
-
- @SuppressWarnings("rawtypes")
- final DefaultExceptionEvent depthFirstEvent = new DefaultExceptionEvent(stack, false,
- exceptionEventEvent.isHandled());
- handler.notify(depthFirstEvent, beanManager);
-
- LOG.fine(String.format("Handler %s returned status %s", handler,
- depthFirstEvent.getCurrentExceptionHandlingFlow().name()));
-
- if (!depthFirstEvent.isUnmute())
- {
- processedHandlers.add(handler);
- }
-
- switch (depthFirstEvent.getCurrentExceptionHandlingFlow())
- {
- case HANDLED:
- exceptionEventEvent.setHandled(true);
- return;
- case HANDLED_AND_CONTINUE:
- exceptionEventEvent.setHandled(true);
- break;
- case ABORT:
- return;
- case SKIP_CAUSE:
- exceptionEventEvent.setHandled(true);
- stack.skipCause();
- continue inbound_cause;
- case THROW_ORIGINAL:
- throwException = exceptionEventEvent.getException();
- break;
- case THROW:
- throwException = depthFirstEvent.getThrowNewException();
- break;
- default:
- throw new IllegalStateException(
- "Unexpected enum type " + depthFirstEvent.getCurrentExceptionHandlingFlow());
- }
- }
- }
- stack.skipCause();
- }
-
- if (!exceptionEventEvent.isHandled() && throwException == null)
- {
- LOG.warning(String.format("No handlers found for exception %s", exceptionEventEvent.getException()));
- throw exceptionEventEvent.getException();
- }
-
- if (throwException != null)
- {
- throw throwException;
- }
- }
- finally
- {
- if (creationalContext != null)
- {
- creationalContext.release();
- }
- LOG.exiting(ExceptionHandlerDispatch.class.getName(), "executeHandlers",
- exceptionEventEvent.getException());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/e5160ee1/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/exception/control/event/EventTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/exception/control/event/EventTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/exception/control/event/EventTest.java
index 0297991..d4245fb 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/exception/control/event/EventTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/exception/control/event/EventTest.java
@@ -24,7 +24,7 @@ import org.apache.deltaspike.core.api.exception.control.ExceptionHandler;
import org.apache.deltaspike.core.api.exception.control.Handles;
import org.apache.deltaspike.core.api.exception.control.event.ExceptionEvent;
import org.apache.deltaspike.core.api.exception.control.event.ExceptionToCatchEvent;
-import org.apache.deltaspike.core.spi.exception.control.IntrospectiveExceptionEvent;
+import org.apache.deltaspike.core.spi.exception.control.event.IntrospectiveExceptionEvent;
import org.apache.deltaspike.test.core.impl.exception.control.event.literal.EventQualifierLiteral;
import org.apache.deltaspike.test.util.ArchiveUtils;
import org.jboss.arquillian.container.test.api.Deployment;