[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