[jboss-cvs] JBossAS SVN: r109225 - in projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3: core/context and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 10 07:38:08 EST 2010


Author: wolfc
Date: 2010-11-10 07:38:07 -0500 (Wed, 10 Nov 2010)
New Revision: 109225

Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/InvocationContextAdapter.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/SessionInvocationContextAdapter.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java
Log:
EJBTHREE-2134: integrate app exception handling


Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java	2010-11-10 11:05:11 UTC (rev 109224)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java	2010-11-10 12:38:07 UTC (rev 109225)
@@ -21,49 +21,6 @@
  */
 package org.jboss.ejb3;
 
-import java.lang.annotation.Annotation;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.ejb.EJBException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.Local;
-import javax.ejb.Remote;
-import javax.ejb.Timeout;
-import javax.ejb.Timer;
-import javax.ejb.TimerService;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.LinkRef;
-import javax.naming.NameNotFoundException;
-import javax.naming.NamingException;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
 import org.jboss.aop.Advisor;
 import org.jboss.aop.Domain;
 import org.jboss.aop.MethodInfo;
@@ -78,11 +35,16 @@
 import org.jboss.ejb3.annotation.Clustered;
 import org.jboss.ejb3.annotation.SecurityDomain;
 import org.jboss.ejb3.annotation.defaults.PoolDefaults;
+import org.jboss.ejb3.annotation.impl.ApplicationExceptionImpl;
 import org.jboss.ejb3.aop.BeanContainer;
 import org.jboss.ejb3.cluster.metadata.ClusteredMetaDataBridge;
 import org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator;
 import org.jboss.ejb3.common.spi.ErrorCodes;
 import org.jboss.ejb3.deployers.JBoss5DependencyPolicy;
+import org.jboss.ejb3.effigy.ApplicationExceptionEffigy;
+import org.jboss.ejb3.effigy.EnterpriseBeanEffigy;
+import org.jboss.ejb3.effigy.common.JBossBeanEffigyInfo;
+import org.jboss.ejb3.effigy.spi.BeanEffigyFactory;
 import org.jboss.ejb3.injection.InjectionInvocation;
 import org.jboss.ejb3.instantiator.spi.BeanInstantiationException;
 import org.jboss.ejb3.instantiator.spi.BeanInstantiator;
@@ -143,6 +105,51 @@
 import org.jboss.util.StringPropertyReplacer;
 import org.jboss.util.naming.Util;
 
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ejb.ApplicationException;
+import javax.ejb.EJBException;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.Local;
+import javax.ejb.Remote;
+import javax.ejb.Timeout;
+import javax.ejb.Timer;
+import javax.ejb.TimerService;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.LinkRef;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Proxy;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+
 /**
  * Comment
  *
@@ -241,6 +248,8 @@
    
    private boolean resurrectMetaData = false;
 
+   private final EnterpriseBeanEffigy effigy;
+
    /**
     * @param name                  Advisor name
     * @param manager               Domain to get interceptor bindings from
@@ -324,7 +333,8 @@
       if(stack == null)
          throw new IllegalStateException("EJBTHREE-2020: No InjectionCallbackStack defined for domain " + domain + " of " + this);
       injectionCallbackStack = stack.createInterceptors(advisor, null);
-      
+
+      this.effigy = effigy(classloader, beanMetaData);
    }
    
    /**
@@ -431,6 +441,13 @@
       
    }
    
+   private static EnterpriseBeanEffigy effigy(ClassLoader cl, JBossEnterpriseBeanMetaData beanMetaData)
+           throws ClassNotFoundException
+   {
+      JBossBeanEffigyInfo info = new JBossBeanEffigyInfo(cl, beanMetaData);
+      return service(BeanEffigyFactory.class).create(info, EnterpriseBeanEffigy.class);
+   }
+
    // TODO: re-evaluate this exposure
    @Deprecated
    public Advisor getAdvisor()
@@ -447,6 +464,27 @@
       return beanContainer.getAnnotationRepository();
    }
 
+   public ApplicationException getApplicationException(Class<?> exceptionType, Method invokedMethod)
+   {
+      ApplicationExceptionEffigy appEx = effigy.getApplicationException(exceptionType);
+      if(appEx != null)
+      {
+         if(appEx.isInherited() || appEx.getExceptionClass().equals(exceptionType))
+            return new ApplicationExceptionImpl(appEx.isRollback());
+         else
+            return null;
+      }
+      
+      Class[] exceptionTypes = invokedMethod.getExceptionTypes();
+      for (Class exceptionClass : exceptionTypes)
+      {
+         if (exceptionClass.isAssignableFrom(exceptionType.getClass()))
+            return new ApplicationExceptionImpl(false);
+      }
+
+      return null;
+   }
+   
    protected BeanContainer getBeanContainer()
    {
       return beanContainer;
@@ -461,7 +499,12 @@
    {
       return getBeanClass();
    }
-   
+
+   protected EnterpriseBeanEffigy getEffigy()
+   {
+      return effigy;
+   }
+
    @SuppressWarnings("unchecked")
    public static <C extends EJBContainer> C getEJBContainer(Advisor advisor)
    {
@@ -518,6 +561,18 @@
       encFactory.popEnc(this);
    }
    
+   private static <S> S service(Class<S> service)
+   {
+      ServiceLoader<S> loader = ServiceLoader.load(service);
+      Iterator<S> it = loader.iterator();
+      if(!it.hasNext())
+         throw new IllegalArgumentException("Unable to find a service for " + service);
+      S instance = it.next();
+      if(it.hasNext())
+         throw new IllegalArgumentException("Multiple services found for " + service + ", " + it);
+      return instance;
+   }
+
    public Environment getEnvironmentRefGroup()
    {
       return xml;

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/InvocationContextAdapter.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/InvocationContextAdapter.java	2010-11-10 11:05:11 UTC (rev 109224)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/InvocationContextAdapter.java	2010-11-10 12:38:07 UTC (rev 109225)
@@ -22,6 +22,7 @@
 package org.jboss.ejb3.core.context;
 
 import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.ejb3.aop.AbstractInterceptor;
 import org.jboss.ejb3.context.base.BaseInvocationContext;
 import org.jboss.ejb3.tx2.spi.TransactionalInvocationContext;
 
@@ -45,7 +46,8 @@
    @Override
    public ApplicationException getApplicationException(Class<?> e)
    {
-      return TxUtil.getApplicationException(e, delegate);
+      //return TxUtil.getApplicationException(e, delegate);
+      return AbstractInterceptor.getEJBContainer(delegate).getApplicationException(e, delegate.getMethod());
    }
 
    @Override

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/SessionInvocationContextAdapter.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/SessionInvocationContextAdapter.java	2010-11-10 11:05:11 UTC (rev 109224)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/core/context/SessionInvocationContextAdapter.java	2010-11-10 12:38:07 UTC (rev 109225)
@@ -21,16 +21,16 @@
  */
 package org.jboss.ejb3.core.context;
 
-import java.util.concurrent.ExecutorService;
-
-import javax.ejb.ApplicationException;
-import javax.ejb.TransactionAttributeType;
-
 import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.ejb3.aop.AbstractInterceptor;
 import org.jboss.ejb3.async.spi.AsyncInvocationContext;
 import org.jboss.ejb3.context.base.BaseSessionInvocationContext;
 import org.jboss.ejb3.tx2.spi.TransactionalInvocationContext;
 
+import javax.ejb.ApplicationException;
+import javax.ejb.TransactionAttributeType;
+import java.util.concurrent.ExecutorService;
+
 /**
  * @author <a href="cdewolf at redhat.com">Carlo de Wolf</a>
  */
@@ -67,7 +67,8 @@
    @Override
    public ApplicationException getApplicationException(Class<?> e)
    {
-      return TxUtil.getApplicationException(e, delegate);
+      //return TxUtil.getApplicationException(e, delegate);
+      return AbstractInterceptor.getEJBContainer(delegate).getApplicationException(e, delegate.getMethod());
    }
 
    @Override

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java	2010-11-10 11:05:11 UTC (rev 109224)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java	2010-11-10 12:38:07 UTC (rev 109225)
@@ -49,8 +49,6 @@
 import org.jboss.ejb3.core.proxy.spi.EJB2RemoteProxyFactory;
 import org.jboss.ejb3.core.proxy.spi.RemoteProxyFactory;
 import org.jboss.ejb3.effigy.SessionBeanEffigy;
-import org.jboss.ejb3.effigy.common.JBossBeanEffigyInfo;
-import org.jboss.ejb3.effigy.spi.BeanEffigyFactory;
 import org.jboss.ejb3.endpoint.SessionFactory;
 import org.jboss.ejb3.interceptors.container.StatefulSessionContainerMethodInvocation;
 import org.jboss.ejb3.proxy.clustered.objectstore.ClusteredObjectStoreBindings;
@@ -95,9 +93,7 @@
 import java.rmi.RemoteException;
 import java.util.Arrays;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.Map;
-import java.util.ServiceLoader;
 import java.util.concurrent.ExecutorService;
 
 /**
@@ -119,8 +115,6 @@
 
    private SessionFactory sessionFactory;
 
-   private SessionBeanEffigy effigy;
-
    public StatefulContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
          Hashtable ctxProperties, Ejb3Deployment deployment, JBossSessionBeanMetaData beanMetaData,
          final ExecutorService asynchronousExecutor) throws ClassNotFoundException
@@ -130,8 +124,6 @@
       // For the time being, this container is its own SessionFactory
       //TODO Externalize the SessionFactory into its own component
       this.sessionFactory = this;
-
-      this.effigy = effigy(cl, beanMetaData);
    }
 
    /**
@@ -209,28 +201,9 @@
       }
    }
 
-   private static SessionBeanEffigy effigy(ClassLoader cl, JBossSessionBeanMetaData beanMetaData)
-           throws ClassNotFoundException
-   {
-      JBossBeanEffigyInfo info = new JBossBeanEffigyInfo(cl, beanMetaData);
-      return (SessionBeanEffigy) service(BeanEffigyFactory.class).create(info, SessionBeanEffigy.class);
-   }
-
-   private static <S> S service(Class<S> service)
-   {
-      ServiceLoader<S> loader = ServiceLoader.load(service);
-      Iterator<S> it = loader.iterator();
-      if(!it.hasNext())
-         throw new IllegalArgumentException("Unable to find a service for " + service);
-      S instance = it.next();
-      if(it.hasNext())
-         throw new IllegalArgumentException("Multiple services found for " + service + ", " + it);
-      return instance;
-   }
-
    protected SessionBeanEffigy getEffigy()
    {
-      return effigy;
+      return (SessionBeanEffigy) super.getEffigy();
    }
 
    public Object getMBean()

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java	2010-11-10 11:05:11 UTC (rev 109224)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java	2010-11-10 12:38:07 UTC (rev 109225)
@@ -123,18 +123,7 @@
    // application exception is @ApplicationException or checked exception extended from Exception or RuntimeException
    public static boolean isApplicationException(Throwable t, MethodInvocation invocation)
    {
-      if (TxUtil.getApplicationException(t.getClass(), invocation) != null)
-         return true;
-      
-      Method method = invocation.getMethod();
-      Class[] exceptionTypes = method.getExceptionTypes();
-      for (Class exceptionClass : exceptionTypes)
-      {
-         if (exceptionClass.isAssignableFrom(t.getClass()))
-            return true;
-      }
-      
-      return false;
+      return getEJBContainer(invocation).getApplicationException(t.getClass(), invocation.getMethod()) != null;
    }
 
    protected void removeSession(Invocation invocation, boolean exceptionThrown) throws Throwable



More information about the jboss-cvs-commits mailing list