Author: rmannibucau
Date: Sat Oct 12 15:58:08 2013
New Revision: 1531551

URL: http://svn.apache.org/r1531551
Log:
TOMEE-1057 @ApplicationException even if not registered in ejb-jar.xml

Added:
    
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/appexception/
    
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/appexception/AppExceptionTest.java
Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1531551&r1=1531550&r2=1531551&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 Sat Oct 12 15:58:08 2013
@@ -53,15 +53,8 @@ import org.apache.webbeans.portable.Inje
 import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
 import org.apache.xbean.recipe.ConstructionException;
 
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.EJBLocalObject;
-import javax.ejb.EJBObject;
-import javax.ejb.Lock;
-import javax.ejb.LockType;
-import javax.ejb.MessageDrivenBean;
-import javax.ejb.TimedObject;
-import javax.ejb.Timer;
+import javax.ejb.*;
+import javax.ejb.ApplicationException;
 import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Decorator;
@@ -84,6 +77,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Future;
 
 @SuppressWarnings("unchecked")
@@ -225,7 +219,7 @@ public class BeanContext extends Deploym
     private final List<InterceptorInstance> userInterceptors = new 
ArrayList<InterceptorInstance>();
     private final List<Injection> injections = new ArrayList<Injection>();
     private final Map<Class, InterfaceType> interfaces = new HashMap<Class, 
InterfaceType>();
-    private final Map<Class, ExceptionType> exceptions = new HashMap<Class, 
ExceptionType>();
+    private final Map<Class, ExceptionType> exceptions = new 
ConcurrentHashMap<Class, ExceptionType>();
 
     private final boolean localbean;
     private Duration accessTimeout;
@@ -527,11 +521,17 @@ public class BeanContext extends Deploym
         }
 
         // Unregistered - runtime exceptions are system exception and the rest 
are application exceptions
+        final Class<? extends Throwable> eClass = e.getClass();
+        final ApplicationException applicationException = 
eClass.getAnnotation(ApplicationException.class);
+        if (applicationException != null) {
+            addApplicationException(eClass, applicationException.rollback(), 
applicationException.inherited());
+            return getExceptionType(e);
+        }
+
         if (e instanceof RuntimeException) {
             return ExceptionType.SYSTEM;
-        } else {
-            return ExceptionType.APPLICATION;
         }
+        return ExceptionType.APPLICATION;
     }
 
     public BeanContext(final String id, final Context jndiContext, final 
ModuleContext moduleContext, final Class beanClass, final Class mdbInterface, 
final Map<String, String> activationProperties) throws SystemException {

Added: 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/appexception/AppExceptionTest.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/appexception/AppExceptionTest.java?rev=1531551&view=auto
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/appexception/AppExceptionTest.java
 (added)
+++ 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/appexception/AppExceptionTest.java
 Sat Oct 12 15:58:08 2013
@@ -0,0 +1,64 @@
+/**
+ * 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.openejb.appexception;
+
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Module;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ejb.ApplicationException;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+
+@RunWith(ApplicationComposer.class)
+public class AppExceptionTest {
+    @ApplicationException
+    public static class RuntimeAppEx extends RuntimeException {
+    }
+    @ApplicationException
+    public static class EjbJarRuntimeAppEx extends RuntimeException {
+    }
+
+    @Singleton
+    public static class Ejb {
+        public void runtime() { throw new RuntimeAppEx(); }
+        public void ejbjar() { throw new EjbJarRuntimeAppEx(); }
+    }
+
+    @Module
+    public EjbJar jar() {
+        final EjbJar ejbJar = new EjbJar();
+        ejbJar.addEnterpriseBean(new SingletonBean(Ejb.class).localBean());
+        return ejbJar;
+    }
+
+    @EJB
+    private Ejb ejb;
+
+    @Test(expected = RuntimeAppEx.class)
+    public void runtime() {
+        ejb.runtime();
+    }
+
+    @Test(expected = EjbJarRuntimeAppEx.class)
+    public void ejbJar() {
+        ejb.ejbjar();
+    }
+}


Reply via email to