Author: rmannibucau
Date: Mon Jul  9 17:52:17 2012
New Revision: 1359313

URL: http://svn.apache.org/viewvc?rev=1359313&view=rev
Log:
TOMEE-273 skipping not loadable cdi beans

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1359313&r1=1359312&r2=1359313&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
 Mon Jul  9 17:52:17 2012
@@ -369,7 +369,19 @@ public class OpenEJBLifecycle implements
         }
         for (Map.Entry<Class<?>, AnnotatedType<?>> implClass : 
annotatedTypes.entrySet()) {
             //Fires ProcessAnnotatedType
-            ProcessAnnotatedTypeImpl<?> processAnnotatedEvent = 
webBeansContext.getWebBeansUtil().fireProcessAnnotatedTypeEvent(implClass.getValue());
+            final ProcessAnnotatedTypeImpl<?> processAnnotatedEvent;
+            try {
+                processAnnotatedEvent = 
webBeansContext.getWebBeansUtil().fireProcessAnnotatedTypeEvent(implClass.getValue());
+            } catch (RuntimeException cnfe) {
+                if (rootCauseIsClassNotFound(cnfe)) {
+                    logger.error("an error occured firing 
ProcessAnnotatedEvent for class "
+                        + implClass.getValue().getJavaClass().getName() + ". 
Skipping the bean.");
+                    logger.debug("Skipping bean cause", cnfe);
+                    continue;
+                } else {
+                    throw cnfe;
+                }
+            }
 
             //if veto() is called
             if (processAnnotatedEvent.isVeto()) {
@@ -381,6 +393,18 @@ public class OpenEJBLifecycle implements
         annotatedTypes.clear();
     }
 
+    private static boolean rootCauseIsClassNotFound(final RuntimeException re) 
{
+        Throwable e = re;
+        e.getStackTrace();
+        while (e != null) {
+            if (e instanceof ClassNotFoundException) {
+                return true;
+            }
+            e = e.getCause();
+        }
+        return false;
+    }
+
     @Override
     public void stopApplication(Object endObject)
     {


Reply via email to