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 2013/03/13 10:52:29 UTC

svn commit: r1455853 - /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java

Author: rmannibucau
Date: Wed Mar 13 09:52:28 2013
New Revision: 1455853

URL: http://svn.apache.org/r1455853
Log:
OPENEJB-2005 allowing to merge all app exceptions through openejb.propagate.application-exceptions=true

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1455853&r1=1455852&r2=1455853&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Wed Mar 13 09:52:28 2013
@@ -206,6 +206,7 @@ public class Assembler extends Assembler
     public static final String OPENEJB_URL_PKG_PREFIX = IvmContext.class.getPackage().getName();
     public static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP, Assembler.class);
     public static final String OPENEJB_JPA_DEPLOY_TIME_ENHANCEMENT_PROP = "openejb.jpa.deploy-time-enhancement";
+    public static final String PROPAGATE_APPLICATION_EXCEPTIONS = "openejb.propagate.application-exceptions";
     private static final String GLOBAL_UNIQUE_ID = "global";
     public static final String TIMER_STORE_CLASS = "timerStore.class";
 
@@ -741,6 +742,12 @@ public class Assembler extends Assembler
 
             final List<BeanContext> allDeployments = initEjbs(classLoader, appInfo, appContext, injections, new ArrayList<BeanContext>(), null);
 
+            if ("true".equalsIgnoreCase(SystemInstance.get()
+                    .getProperty(PROPAGATE_APPLICATION_EXCEPTIONS,
+                            appInfo.properties.getProperty(PROPAGATE_APPLICATION_EXCEPTIONS, "false")))) {
+                propagateApplicationExceptions(appInfo, classLoader, allDeployments);
+            }
+
             new CdiBuilder().build(appInfo, appContext, allDeployments);
 
             ensureWebBeansContext(appContext);
@@ -859,6 +866,25 @@ public class Assembler extends Assembler
         }
     }
 
+    private void propagateApplicationExceptions(final AppInfo appInfo, final ClassLoader classLoader, final List<BeanContext> allDeployments) {
+        for (final BeanContext context : allDeployments) {
+            if (BeanContext.Comp.class.equals(context.getBeanClass())) {
+                continue;
+            }
+
+            for (final EjbJarInfo jar : appInfo.ejbJars) {
+                for (final ApplicationExceptionInfo exception : jar.applicationException) {
+                    try {
+                        final Class<?> exceptionClass = classLoader.loadClass(exception.exceptionClass);
+                        context.addApplicationException(exceptionClass, exception.rollback, exception.inherited);
+                    } catch (final Exception e) {
+                        // no-op: not a big deal since by jar config is respected, mainly means propagation didn't work because of classloader constraints
+                    }
+                }
+            }
+        }
+    }
+
     private void resumePersistentSchedulers(final AppContext appContext) {
         final Scheduler globalScheduler = SystemInstance.get().getComponent(Scheduler.class);
         final Collection<Scheduler> schedulers = new ArrayList<Scheduler>();