[jboss-cvs] JBossAS SVN: r70409 - in projects/ejb3/trunk/core: src/main/java/org/jboss/ejb3 and 21 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Mar 5 04:17:20 EST 2008
Author: wolfc
Date: 2008-03-05 04:17:19 -0500 (Wed, 05 Mar 2008)
New Revision: 70409
Added:
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/AbstractInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/LifeCycleInvocation.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ClassProxyHack.java
Removed:
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/AbstractInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/LifeCycleInvocation.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java
Modified:
projects/ejb3/trunk/core/pom.xml
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/BaseContext.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DeploymentUnit.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocation.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocationWrapper.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContextImpl.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ENCPropagationInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3AnnotationHandler.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3DescriptorHandler.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ProxyFactoryHelper.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/NoPassivationCache.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/StatefulCache.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/tree/StatefulTreeCache.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfo.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInjector.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/ConsumerContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MDB.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/IsLocalInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccHelper.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/BaseSessionProxyFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/SessionContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.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/StatefulInstanceInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/BMTInterceptor.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxInterceptorFactory.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxUtil.java
projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionFieldInjector.java
projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionMethodInjector.java
projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionPropertyInjector.java
projects/ejb3/trunk/core/src/test/java/
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java
Log:
EJBTHREE-1174: merged from AS trunk
Modified: projects/ejb3/trunk/core/pom.xml
===================================================================
--- projects/ejb3/trunk/core/pom.xml 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/pom.xml 2008-03-05 09:17:19 UTC (rev 70409)
@@ -334,6 +334,10 @@
<artifactId>jboss-ejb3-ext-api-impl</artifactId>
</dependency>
<dependency>
+ <groupId>org.jboss.ejb3</groupId>
+ <artifactId>jboss-ejb3-interceptors</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.jboss.embedded</groupId>
<artifactId>jboss-embedded</artifactId>
<scope>test</scope>
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/BaseContext.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/BaseContext.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/BaseContext.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -22,11 +22,9 @@
package org.jboss.ejb3;
import java.util.HashMap;
-import java.util.HashSet;
import org.jboss.aop.metadata.SimpleMetaData;
import org.jboss.ejb3.interceptor.InterceptorInfo;
-import org.jboss.ejb3.interceptor.InterceptorInjector;
import org.jboss.logging.Logger;
import org.jboss.security.RealmMapping;
@@ -91,8 +89,10 @@
return metadata;
}
+ @Deprecated
public void initialiseInterceptorInstances()
{
+ /*
HashSet<InterceptorInfo> interceptors = ((EJBContainer)container).getApplicableInterceptors();
if (interceptors != null && interceptors.size() > 0 && interceptorInstances == null)
{
@@ -112,8 +112,11 @@
}
}
}
+ */
+ log.warn("FIXME: don't call BaseContext.initialiseInterceptorInstances (EJBTHREE-1174)");
}
+ @Deprecated
public Object[] getInterceptorInstances(InterceptorInfo[] interceptorInfos)
{
Object[] interceptors = new Object[interceptorInfos.length];
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DeploymentUnit.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DeploymentUnit.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DeploymentUnit.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -22,9 +22,10 @@
package org.jboss.ejb3;
import java.net.URL;
+import java.util.Hashtable;
import java.util.List;
import java.util.Map;
-import java.util.Hashtable;
+
import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.virtual.VirtualFile;
import org.jboss.virtual.VirtualFileFilter;
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 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -25,17 +25,13 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
-import java.util.LinkedList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Hashtable;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -45,45 +41,47 @@
import javax.ejb.EJBException;
import javax.ejb.Local;
import javax.ejb.Remote;
+import javax.ejb.TimedObject;
import javax.ejb.Timeout;
+import javax.ejb.Timer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.LinkRef;
-import javax.naming.Name;
-import javax.naming.NameClassPair;
import javax.naming.NameNotFoundException;
-import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.StringRefAddr;
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.ClassContainer;
+import org.jboss.aop.Advisor;
+import org.jboss.aop.Domain;
+import org.jboss.aop.InstanceAdvisor;
import org.jboss.aop.MethodInfo;
import org.jboss.aop.advice.Interceptor;
-import org.jboss.aop.annotation.AnnotationElement;
-import org.jboss.aop.joinpoint.ConstructorInvocation;
-import org.jboss.aop.metadata.SimpleClassMetaDataBinding;
-import org.jboss.aop.metadata.SimpleClassMetaDataLoader;
+import org.jboss.aop.advice.PerVmAdvice;
+import org.jboss.aop.annotation.AnnotationRepository;
import org.jboss.aop.util.MethodHashing;
import org.jboss.ejb3.annotation.Clustered;
import org.jboss.ejb3.annotation.SecurityDomain;
import org.jboss.ejb3.annotation.defaults.PoolDefaults;
+import org.jboss.ejb3.aop.BeanContainer;
+import org.jboss.ejb3.aop.LifeCycleInvocation;
import org.jboss.ejb3.deployers.JBoss5DependencyPolicy;
import org.jboss.ejb3.entity.PersistenceUnitDeployment;
-import org.jboss.ejb3.interceptor.InterceptorInfo;
import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.interceptor.InterceptorInjector;
-import org.jboss.ejb3.interceptor.LifecycleInterceptorHandler;
+import org.jboss.ejb3.interceptors.aop.InterceptorsFactory;
+import org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor;
+import org.jboss.ejb3.interceptors.container.ManagedObjectAdvisor;
+import org.jboss.ejb3.interceptors.direct.DirectContainer;
+import org.jboss.ejb3.interceptors.direct.IndirectContainer;
import org.jboss.ejb3.javaee.JavaEEComponent;
import org.jboss.ejb3.javaee.JavaEEComponentHelper;
import org.jboss.ejb3.javaee.JavaEEModule;
import org.jboss.ejb3.pool.Pool;
import org.jboss.ejb3.pool.PoolFactory;
-import org.jboss.ejb3.pool.PoolFactoryRegistry;
-import org.jboss.ejb3.security.JaccAuthorizationInterceptor;
+import org.jboss.ejb3.pool.PoolFactoryRegistry;
import org.jboss.ejb3.security.SecurityDomainManager;
import org.jboss.ejb3.statistics.InvocationStatistics;
import org.jboss.ejb3.tx.UserTransactionImpl;
@@ -101,13 +99,16 @@
import org.jboss.injection.ResourceHandler;
import org.jboss.injection.WebServiceRefHandler;
import org.jboss.logging.Logger;
-import org.jboss.metadata.MetaData;
import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
+import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
import org.jboss.metadata.javaee.spec.Environment;
import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData;
+import org.jboss.util.StringPropertyReplacer;
import org.jboss.util.naming.Util;
-import org.jboss.util.StringPropertyReplacer;
import org.jboss.virtual.VirtualFile;
/**
@@ -116,11 +117,16 @@
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @version $Revision$
*/
-public abstract class EJBContainer extends ClassContainer implements Container, InjectionContainer, JavaEEComponent
+public abstract class EJBContainer implements Container, IndirectContainer<EJBContainer, DirectContainer<EJBContainer>>, InjectionContainer, JavaEEComponent
{
-
private static final Logger log = Logger.getLogger(EJBContainer.class);
+ private String name;
+
+ private BeanContainer beanContainer;
+
+ private DirectContainer<EJBContainer> directContainer;
+
protected EjbEncFactory encFactory = new DefaultEjbEncFactory();
protected Pool pool;
@@ -132,6 +138,8 @@
protected int defaultConstructorIndex;
protected String beanClassName;
+
+ private Class<?> beanClass;
protected ClassLoader classloader;
@@ -140,8 +148,7 @@
protected Context enc;
- //protected SessionCallbackHandler callbackHandler;
- protected LifecycleInterceptorHandler callbackHandler;
+// protected LifecycleInterceptorHandler callbackHandler;
protected Hashtable initialContextProperties;
@@ -152,14 +159,12 @@
protected Map<String, Map<AccessibleObject, Injector>> encInjections = new HashMap<String, Map<AccessibleObject, Injector>>();
- protected InterceptorInfoRepository interceptorRepository;
+// protected List<InterceptorInfo> classInterceptors = new ArrayList<InterceptorInfo>();
+//
+// protected LinkedHashSet<InterceptorInfo> applicableInterceptors;
- protected List<InterceptorInfo> classInterceptors = new ArrayList<InterceptorInfo>();
+ private HashMap<Class<?>, InterceptorInjector> interceptorInjectors = new HashMap<Class<?>, InterceptorInjector>();
- protected LinkedHashSet<InterceptorInfo> applicableInterceptors;
-
- private HashMap<Class, InterceptorInjector> interceptorInjectors = new HashMap<Class, InterceptorInjector>();
-
private Ejb3Deployment deployment;
private DependencyPolicy dependencyPolicy;
@@ -187,31 +192,31 @@
* @param ctxProperties
* @param interceptorRepository
* @param deployment
+ * @param beanMetaData the meta data for this bean or null
*/
- public EJBContainer(String name, AspectManager manager, ClassLoader cl,
+ public EJBContainer(String name, Domain domain, ClassLoader cl,
String beanClassName, String ejbName, Hashtable ctxProperties,
- InterceptorInfoRepository interceptorRepository, Ejb3Deployment deployment)
+ Ejb3Deployment deployment, JBossEnterpriseBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(name, manager);
-
- assert interceptorRepository != null : "interceptorRepository is null";
+ assert name != null : "name is null";
assert deployment != null : "deployment is null";
+ this.name = name;
this.deployment = deployment;
this.beanClassName = beanClassName;
this.classloader = cl;
+ this.xml = beanMetaData;
- super.setChainOverridingForInheritedMethods( true );
+ this.beanClass = classloader.loadClass(beanClassName);
- try
- {
- clazz = classloader.loadClass(beanClassName);
- }
- catch (ClassNotFoundException e)
- {
- throw new RuntimeException(e);
- }
+ // We can't type cast the direct container, because we just loaded the beanClass
+ // so assuming we have an object is a safe bet.
+ this.beanContainer = new BeanContainer(this);
+ // Because interceptors will query back the EJBContainer for annotations
+ // we must have set beanContainer first and then do the advisor.
+ beanContainer.initialize(ejbName, domain, beanClass, beanMetaData, cl);
+
this.ejbName = ejbName;
String on = createObjectName(ejbName);
@@ -224,7 +229,7 @@
throw new RuntimeException("failed to create object name for: " + on, e);
}
- annotations = new AnnotationRepositoryToMetaData(this);
+ //annotations = new AnnotationRepositoryToMetaData(this);
initialContextProperties = ctxProperties;
try
@@ -235,8 +240,6 @@
{
throw new RuntimeException(e);
}
- this.interceptorRepository = interceptorRepository;
- this.interceptorRepository.addBeanClass(clazz.getName());
bindORB();
bindEJBContext();
@@ -278,11 +281,74 @@
return JavaEEComponentHelper.createObjectName(deployment, ejbName);
}
+ /**
+ * Do not call, for BeanContainer.
+ * @throws IllegalAccessException
+ * @throws InstantiationException
+ */
+ public Object createInterceptor(Class<?> interceptorClass) throws InstantiationException, IllegalAccessException
+ {
+ Object instance = interceptorClass.newInstance();
+ InterceptorInjector interceptorInjector = interceptorInjectors.get(interceptorClass);
+ assert interceptorInjector != null : "interceptorInjector not found for " + interceptorClass;
+ interceptorInjector.inject(null, instance);
+ return instance;
+ }
+
public String createObjectName(String unitName, String ejbName)
{
return JavaEEComponentHelper.createObjectName(deployment, unitName, ejbName);
}
+ // TODO: re-evaluate this exposure
+ @Deprecated
+ public Advisor getAdvisor()
+ {
+ return beanContainer._getAdvisor();
+ }
+
+ /*
+ * TODO: re-evalute this exposure
+ */
+ @Deprecated
+ public AnnotationRepository getAnnotations()
+ {
+ return beanContainer.getAnnotationRepository();
+ }
+
+ protected BeanContainer getBeanContainer()
+ {
+ return beanContainer;
+ }
+
+ /**
+ *
+ * @return the bean class of this container
+ * @deprecated use getBeanClass
+ */
+ public Class<?> getClazz()
+ {
+ return getBeanClass();
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <C extends EJBContainer> C getEJBContainer(Advisor advisor)
+ {
+ try
+ {
+ return (C) ((ManagedObjectAdvisor<Object, BeanContainer>) advisor).getContainer().getEJBContainer();
+ }
+ catch(ClassCastException e)
+ {
+ throw new ClassCastException(e.getMessage() + " using " + advisor);
+ }
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
public void pushContext(BeanContext<?> beanContext)
{
currentBean.push(beanContext);
@@ -337,6 +403,15 @@
return jaccContextId;
}
+ /**
+ * Do not call, used by BeanContainer.
+ * @return
+ */
+ public List<Method> getVirtualMethods()
+ {
+ return null;
+ }
+
public void setJaccContextId(String jaccContextId)
{
this.jaccContextId = jaccContextId;
@@ -392,6 +467,11 @@
return dependencyPolicy;
}
+ public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
+ {
+ return beanContainer.isAnnotationPresent(annotationType);
+ }
+
/**
* Is the method a business method of this container.
*
@@ -473,19 +553,25 @@
Map<AccessibleObject, Injector> tmp = InjectionUtil.processAnnotations(this, handlers, getBeanClass());
injectors.addAll(tmp.values());
+ /*
initialiseInterceptors();
- for (InterceptorInfo interceptorInfo : applicableInterceptors)
+ */
+ for (Class<?> interceptorClass : beanContainer.getInterceptorClasses())
{
+ InterceptorMetaData interceptorMetaData = findInterceptor(interceptorClass);
+ if(interceptorMetaData == null)
+ continue;
+
for (InjectionHandler<Environment> handler : handlers)
{
- handler.loadXml(interceptorInfo.getXml(), this);
+ handler.loadXml(interceptorMetaData, this);
}
}
- for (InterceptorInfo interceptorInfo : applicableInterceptors)
+ for (Class<?> interceptorClass : beanContainer.getInterceptorClasses())
{
- Map<AccessibleObject, Injector> tmpInterceptor = InjectionUtil.processAnnotations(this, handlers, interceptorInfo.getClazz());
- InterceptorInjector injector = new InterceptorInjector(this, interceptorInfo, tmpInterceptor);
- interceptorInjectors.put(interceptorInfo.getClazz(), injector);
+ Map<AccessibleObject, Injector> injections = InjectionUtil.processAnnotations(this, handlers, interceptorClass);
+ InterceptorInjector injector = new InterceptorInjector(injections);
+ interceptorInjectors.put(interceptorClass, injector);
}
// When @WebServiceRef is not used service-ref won't be processed
@@ -583,16 +669,13 @@
return xml;
}
- public void setXml(JBossEnterpriseBeanMetaData xml)
- {
- this.xml = xml;
- }
-
public JBossAssemblyDescriptorMetaData getAssemblyDescriptor()
{
return assembly;
}
+ // FIXME: remove
+ @Deprecated
public void setAssemblyDescriptor(JBossAssemblyDescriptorMetaData assembly)
{
this.assembly = assembly;
@@ -602,28 +685,9 @@
public InterceptorInfoRepository getInterceptorRepository()
{
- return interceptorRepository;
+ throw new RuntimeException("invalid");
}
-
- public List<InterceptorInfo> getClassInterceptors()
- {
- initialiseInterceptors();
- return classInterceptors;
- }
-
- public HashSet<InterceptorInfo> getApplicableInterceptors()
- {
- initialiseInterceptors();
- return applicableInterceptors;
- }
-
- public HashMap<Class, InterceptorInjector> getInterceptorInjectors()
- {
- initialiseInterceptors();
- return interceptorInjectors;
- }
-
-
+
public Map<String, EncInjector> getEncInjectors()
{
return encInjectors;
@@ -682,7 +746,7 @@
public Class<?> getBeanClass()
{
- return clazz;
+ return beanClass;
}
public Pool getPool()
@@ -707,6 +771,7 @@
protected Object construct()
{
+ /*
Interceptor[] cInterceptors = constructorInterceptors[defaultConstructorIndex];
if (cInterceptors == null)
{
@@ -740,16 +805,33 @@
{
throw new RuntimeException(throwable);
}
-
+ */
+ try
+ {
+ return beanContainer.construct();
+ }
+ catch (SecurityException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException(e);
+ }
}
protected void reinitialize()
- {
+ {
+ // FIXME: is this correct?
+ beanContainer.reinitializeAdvisor();
+
+ /*
initClassMetaDataBindingsList();
adviceBindings.clear();
doesHaveAspects = false;
constructorInfos = null;
rebuildInterceptors();
+ */
bindEJBContext();
@@ -758,8 +840,8 @@
public void create() throws Exception
{
- super.initializeClassContainer();
-
+ /*
+ initializeClassContainer();
for (int i = 0; i < constructors.length; i++)
{
if (constructors[i].getParameterTypes().length == 0)
@@ -768,6 +850,7 @@
break;
}
}
+ */
}
// Everything must be done in start to make sure all dependencies have been satisfied
@@ -790,12 +873,12 @@
Injector[] injectors2 = injectors.toArray(new Injector[injectors.size()]);
if (pool != null) pool.setInjectors(injectors2);
- createCallbackHandler();
+// createCallbackHandler();
// If we're clustered, find our partition name
findPartitionName();
- log.info("STARTED EJB: " + clazz.getName() + " ejbName: " + ejbName);
+ log.info("STARTED EJB: " + beanClass.getName() + " ejbName: " + ejbName);
}
public void stop() throws Exception
@@ -816,14 +899,15 @@
InitialContextFactory.close(enc, this.initialContextProperties);
enc = null;
- log.info("STOPPED EJB: " + clazz.getName() + " ejbName: " + ejbName);
+ log.info("STOPPED EJB: " + beanClass.getName() + " ejbName: " + ejbName);
}
public void destroy() throws Exception
{
encFactory.cleanupEnc(this);
- super.cleanup();
+ // TODO: clean up BeanContainer?
+ //super.cleanup();
}
@SuppressWarnings("unchecked")
@@ -845,6 +929,74 @@
}
}
+ protected Method getTimeoutCallback(NamedMethodMetaData timeoutMethodMetaData, Class<?> beanClass)
+ {
+ JBossEnterpriseBeanMetaData metaData = xml;
+ if(metaData != null)
+ {
+ if(timeoutMethodMetaData != null)
+ {
+ String methodName = timeoutMethodMetaData.getMethodName();
+ try
+ {
+ return beanClass.getMethod(methodName, Timer.class);
+ }
+ catch (SecurityException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException("No method " + methodName + "(javax.ejb.Timer timer) found on bean " + ejbName, e);
+ }
+ }
+ }
+
+ if(TimedObject.class.isAssignableFrom(beanClass))
+ {
+ try
+ {
+ return TimedObject.class.getMethod("ejbTimeout", Timer.class);
+ }
+ catch (SecurityException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ if(metaData != null)
+ {
+ // TODO: cross cutting concern
+ if(metaData.getEjbJarMetaData().isMetadataComplete())
+ return null;
+ }
+
+ for (Method method : beanClass.getMethods())
+ {
+ if (getAnnotation(Timeout.class, method) != null)
+ {
+ if (Modifier.isPublic(method.getModifiers()) &&
+ method.getReturnType().equals(Void.TYPE) &&
+ method.getParameterTypes().length == 1 &&
+ method.getParameterTypes()[0].equals(Timer.class))
+ {
+ // TODO: check for multiples
+ return method;
+ }
+ else
+ {
+ throw new RuntimeException("@Timeout method " + method + " must have signature: void <METHOD>(javax.ejb.Timer timer) (EJB3 18.2.2)");
+ }
+ }
+ }
+
+ return null;
+ }
+
protected void initializePool() throws Exception
{
org.jboss.ejb3.annotation.Pool poolAnnotation = getAnnotation(org.jboss.ejb3.annotation.Pool.class);
@@ -868,14 +1020,46 @@
pool.setInjectors(injectors.toArray(new Injector[injectors.size()]));
}
+ /**
+ * Note that this method is a WIP.
+ *
+ * @param beanContext
+ * @param callbackAnnotationClass on of PostConstruct, PreDestroy, PostActivate or PrePassivate
+ */
+ protected void invokeCallback(BeanContext<?> beanContext, Class<? extends Annotation> callbackAnnotationClass)
+ {
+ try
+ {
+ List<Interceptor> interceptors = new ArrayList<Interceptor>(InterceptorsFactory.getLifeCycleInterceptors((InstanceAdvisor) getAdvisor(), callbackAnnotationClass));
+ interceptors.add(0, PerVmAdvice.generateInterceptor(null, new InvocationContextInterceptor(), "setup"));
+
+ LifeCycleInvocation invocation = new LifeCycleInvocation(interceptors.toArray(new Interceptor[0]));
+ invocation.setAdvisor(getAdvisor());
+ invocation.setTargetObject(beanContext.getInstance());
+ invocation.invokeNext();
+ }
+ catch(Throwable t)
+ {
+ throw new RuntimeException(t);
+ }
+ }
+
+ public void invokePostConstruct(BeanContext<?> beanContext)
+ {
+ invokeCallback(beanContext, PostConstruct.class);
+ }
+
+ @Deprecated
public void invokePostConstruct(BeanContext beanContext, Object[] params)
{
- callbackHandler.postConstruct(beanContext, params);
+ invokePostConstruct(beanContext);
}
public void invokePreDestroy(BeanContext beanContext)
{
- callbackHandler.preDestroy(beanContext);
+ // This is the correct way to destroy an instance, do
+ // not call invokeCallback here.
+ beanContainer.destroy(beanContext.getInstance());
}
public void invokePostActivate(BeanContext beanContext)
@@ -932,6 +1116,7 @@
}
}
+ /*
protected void createCallbackHandler()
{
try
@@ -945,6 +1130,7 @@
+ beanClassName, e);
}
}
+ */
protected Class[] getHandledCallbacks()
{
@@ -952,33 +1138,23 @@
{PostConstruct.class, PreDestroy.class, Timeout.class};
}
- private void initialiseInterceptors()
+ // TODO: once injection is finalized this method will disappear
+ private InterceptorMetaData findInterceptor(Class<?> interceptorClass)
{
- if (applicableInterceptors == null)
+ if(xml == null)
+ return null;
+ JBossMetaData ejbJarMetaData = xml.getEjbJarMetaData();
+ if(ejbJarMetaData == null)
+ return null;
+ InterceptorsMetaData interceptors = ejbJarMetaData.getInterceptors();
+ if(interceptors == null)
+ return null;
+ for(InterceptorMetaData interceptorMetaData : interceptors)
{
- log.debug("Initialising interceptors for " + getEjbName() + "...");
- HashSet<InterceptorInfo> defaultInterceptors = interceptorRepository.getDefaultInterceptors();
- log.debug("Default interceptors: " + defaultInterceptors);
-
- classInterceptors = interceptorRepository.getClassInterceptors(this);
- log.debug("Class interceptors: " + classInterceptors);
-
- applicableInterceptors = new LinkedHashSet<InterceptorInfo>();
- if (defaultInterceptors != null) applicableInterceptors.addAll(defaultInterceptors);
- if (classInterceptors != null) applicableInterceptors.addAll(classInterceptors);
-
- Method[] methods = clazz.getMethods();
- for (int i = 0; i < methods.length; i++)
- {
- List methodIcptrs = interceptorRepository.getMethodInterceptors(this, methods[i]);
- if (methodIcptrs != null && methodIcptrs.size() > 0)
- {
- log.debug("Method interceptors for " + methods[i] + ": " + methodIcptrs);
- applicableInterceptors.addAll(methodIcptrs);
- }
- }
- log.debug("All applicable interceptor classes: " + applicableInterceptors);
+ if(interceptorMetaData.getInterceptorClass().equals(interceptorClass.getName()))
+ return interceptorMetaData;
}
+ return null;
}
protected void findPartitionName()
@@ -1073,6 +1249,7 @@
return null;
}
+ /*
@Override
public boolean hasAnnotation(Class tgt, String annotation)
{
@@ -1142,7 +1319,8 @@
throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
}
}
-
+ */
+
public Container resolveEjbContainer(String link, Class businessIntf)
{
return deployment.getEjbContainer(link, businessIntf);
@@ -1158,31 +1336,22 @@
return deployment.resolveMessageDestination(link);
}
- @SuppressWarnings("unchecked")
public <T extends Annotation> T getAnnotation(Class<T> annotationType)
{
if (this.getAnnotations().isDisabled(annotationType))
return null;
- return (T) resolveAnnotation(annotationType);
+ return beanContainer.getAnnotation(annotationType);
}
public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz)
{
- if (clazz == this.getBeanClass())
- {
- return (T) resolveAnnotation(annotationType);
- }
- return clazz.getAnnotation(annotationType);
+ return beanContainer.getAnnotation(clazz, annotationType);
}
public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz, Method method)
{
- if (clazz == this.getBeanClass())
- {
- return (T) resolveAnnotation(method, annotationType);
- }
- return method.getAnnotation(annotationType);
+ return beanContainer.getAnnotation(annotationType, clazz, method);
}
public <T extends Annotation> T getAnnotation(Class<T> annotationType, Method method)
@@ -1190,63 +1359,50 @@
if (this.getAnnotations().isDisabled(method, annotationType))
return null;
- return (T) resolveAnnotation(method, annotationType);
+ return beanContainer.getAnnotation(annotationType, method);
}
public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz, Field field)
{
- if (clazz == this.getBeanClass())
- {
- return (T) resolveAnnotation(field, annotationType);
- }
- return field.getAnnotation(annotationType);
+ return beanContainer.getAnnotation(annotationType, clazz, field);
}
public <T extends Annotation> T getAnnotation(Class<T> annotationType, Field field)
{
- return (T) resolveAnnotation(field, annotationType);
+ return beanContainer.getAnnotation(annotationType, field);
}
- @Override
- public Object resolveAnnotation(Method m, Class annotation)
+ /**
+ * @deprecated use getAnnotation
+ */
+ @SuppressWarnings("unchecked")
+ public Object resolveAnnotation(Class annotationType)
{
- Object value = super.resolveAnnotation(m, annotation);
- if (value == null && m.isBridge()) value = getBridgedAnnotation(m, annotation);
- return value;
+ return getAnnotation(annotationType);
}
- protected Object getBridgedAnnotation(Method bridgeMethod, Class annotation)
+ /**
+ * @deprecated use getAnnotation
+ */
+ @SuppressWarnings("unchecked")
+ public Object resolveAnnotation(Field field, Class annotationType)
{
- Method[] methods = bridgeMethod.getDeclaringClass().getMethods();
- int i = 0;
- boolean found = false;
- Class[] bridgeParams = bridgeMethod.getParameterTypes();
- while (i < methods.length && !found)
- {
- if (!methods[i].isBridge() && methods[i].getName().equals(bridgeMethod.getName()))
- {
- Class[] params = methods[i].getParameterTypes();
- if (params.length == bridgeParams.length)
- {
- int j = 0;
- boolean matches = true;
- while (j < params.length && matches)
- {
- if (!bridgeParams[j].isAssignableFrom(params[j]))
- matches = false;
- ++j;
- }
-
- if (matches)
- return resolveAnnotation(methods[i], annotation);
- }
- }
- ++i;
- }
-
- return null;
+ return getAnnotation(annotationType, field);
}
+ /**
+ * @deprecated use getAnnotation
+ */
+ @SuppressWarnings("unchecked")
+ public Object resolveAnnotation(Method method, Class annotationType)
+ {
+ return getAnnotation(annotationType, method);
+ }
+
+ /**
+ * @deprecated this is going to be gone soon
+ */
+ @SuppressWarnings("unchecked")
public Object resolveAnnotation(Method m, Class[] annotationChoices)
{
Object value = null;
@@ -1288,11 +1444,11 @@
return invokeStats;
}
-
- public MethodInfo getMethodInfo(Method method)
+ @Deprecated
+ protected MethodInfo getMethodInfo(Method method)
{
long hash = MethodHashing.calculateHash(method);
- MethodInfo info = super.getMethodInfo(hash);
+ MethodInfo info = getAdvisor().getMethodInfo(hash);
if (info == null)
{
throw new RuntimeException("Could not resolve beanClass method from proxy call: " + method.toString());
@@ -1321,9 +1477,16 @@
this.businessInterfaces = resolveBusinessInterfaces();
// Before we start to process annotations, make sure we also have the ones from interceptors-aop.
- initializeClassContainer();
+ // FIXME: because of the flaked life cycle of an EJBContainer (we add annotations after it's been
+ // constructed), we must reinitialize the whole thing.
+ beanContainer.reinitializeAdvisor();
}
+ public void setDirectContainer(DirectContainer<EJBContainer> container)
+ {
+ this.directContainer = container;
+ }
+
protected Method getNonBridgeMethod(Method bridgeMethod)
{
Class clazz = bridgeMethod.getDeclaringClass();
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocation.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocation.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocation.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -56,11 +56,13 @@
super(null, null);
}
+ /*
@SuppressWarnings("unchecked")
public A getAdvisor()
{
return (A) super.getAdvisor();
}
+ */
public T getBeanContext()
{
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocationWrapper.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocationWrapper.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainerInvocationWrapper.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -23,6 +23,8 @@
import java.lang.reflect.Method;
import java.util.Map;
+
+import org.jboss.aop.Advisor;
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.metadata.SimpleMetaData;
@@ -44,8 +46,8 @@
public EJBContainerInvocationWrapper(EJBContainerInvocation<A, T> wrapped, Interceptor[] interceptors)
{
+ super(interceptors, wrapped.getMethodHash(), wrapped.getMethod(), wrapped.getActualMethod(), wrapped.getAdvisor());
this.wrapped = wrapped;
- this.interceptors = interceptors;
}
public Object invokeNext() throws Throwable
@@ -167,7 +169,7 @@
return wrapped.invokeNext(newInterceptors);
}
- public A getAdvisor()
+ public Advisor getAdvisor()
{
return wrapped.getAdvisor();
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContextImpl.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContextImpl.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContextImpl.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -41,7 +41,6 @@
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
-import org.jboss.aop.Advisor;
import org.jboss.ejb3.annotation.SecurityDomain;
import org.jboss.ejb3.tx.TxUtil;
import org.jboss.ejb3.tx.UserTransactionImpl;
@@ -302,7 +301,7 @@
public UserTransaction getUserTransaction() throws IllegalStateException
{
- TransactionManagementType type = TxUtil.getTransactionManagementType(((Advisor) getContainer()));
+ TransactionManagementType type = TxUtil.getTransactionManagementType(getContainer());
if (type != TransactionManagementType.BEAN) throw new IllegalStateException("Container " + getContainer().getEjbName() + ": it is illegal to inject UserTransaction into a CMT bean");
return new UserTransactionImpl();
@@ -326,7 +325,7 @@
public void setRollbackOnly() throws IllegalStateException
{
// EJB1.1 11.6.1: Must throw IllegalStateException if BMT
- TransactionManagementType type = TxUtil.getTransactionManagementType(((Advisor) getContainer()));
+ TransactionManagementType type = TxUtil.getTransactionManagementType(getContainer());
if (type != TransactionManagementType.CONTAINER) throw new IllegalStateException("Container " + getContainer().getEjbName() + ": it is illegal to call setRollbackOnly from BMT: " + type);
try
@@ -349,7 +348,7 @@
public boolean getRollbackOnly() throws IllegalStateException
{
// EJB1.1 11.6.1: Must throw IllegalStateException if BMT
- TransactionManagementType type = TxUtil.getTransactionManagementType(((Advisor) getContainer()));
+ TransactionManagementType type = TxUtil.getTransactionManagementType(getContainer());
if (type != TransactionManagementType.CONTAINER)
throw new IllegalStateException("Container " + getContainer().getEjbName() + ": it is illegal to call getRollbackOnly from BMT: " + type);
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ENCPropagationInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ENCPropagationInterceptor.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ENCPropagationInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -21,8 +21,8 @@
*/
package org.jboss.ejb3;
-import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.ejb3.aop.AbstractInterceptor;
/**
* This interceptor is needed so that the ENC is propagated in asynchronous calls.
@@ -30,16 +30,11 @@
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @version $Revision$
*/
-public class ENCPropagationInterceptor implements Interceptor
+public class ENCPropagationInterceptor extends AbstractInterceptor
{
- public String getName()
- {
- return this.getClass().getName();
- }
-
public Object invoke(Invocation invocation) throws Throwable
{
- EJBContainer container = (EJBContainer) invocation.getAdvisor();
+ EJBContainer container = getEJBContainer(invocation);
try
{
container.pushEnc();
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3AnnotationHandler.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3AnnotationHandler.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3AnnotationHandler.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -34,14 +34,21 @@
import javax.ejb.TransactionAttributeType;
import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
import org.jboss.aop.DomainDefinition;
import org.jboss.ejb3.mdb.ConsumerContainer;
import org.jboss.ejb3.mdb.MDB;
-import org.jboss.ejb3.metamodel.EnterpriseBean;
import org.jboss.ejb3.service.ServiceContainer;
import org.jboss.ejb3.stateful.StatefulContainer;
import org.jboss.ejb3.stateless.StatelessContainer;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossConsumerBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
+import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
+import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
/**
* @author <a href="mailto:bdecoste at jboss.com">William DeCoste</a>
@@ -100,6 +107,56 @@
visible = (AnnotationsAttribute) cf.getAttribute(AnnotationsAttribute.visibleTag);
}
+ /**
+ * The link from an enterprise bean to it's interceptors is via the EJB Jar meta data.
+ * So we try to recreate that link it's not already established.
+ *
+ * Because of a bug in jboss-metadata an annotated bean will not always
+ * get some meta data, so we create some for it.
+ *
+ * TODO: JBMETA-4
+ *
+ * @param <M>
+ * @param deployment
+ * @param ejbName
+ * @param enterpriseBeanMetaDataClass
+ * @return
+ */
+ private <M extends JBossEnterpriseBeanMetaData> M getEnterpriseBeanMetaData(Ejb3Deployment deployment, String ejbName, Class<M> enterpriseBeanMetaDataClass)
+ {
+ JBossMetaData ejbJarMetaData = deployment.getMetaData();
+ // If there is no meta data at all, don't establish the link.
+ if(ejbJarMetaData == null)
+ return null;
+
+ M beanMetaData = deployment.getEnterpriseBeanMetaData(ejbName, enterpriseBeanMetaDataClass);
+ if(beanMetaData == null)
+ {
+ log.warn("JBMETA-4: did not find any bean meta data for annotation bean " + ejbName + ", will create some");
+ try
+ {
+ beanMetaData = enterpriseBeanMetaDataClass.newInstance();
+ }
+ catch (InstantiationException e)
+ {
+ throw new RuntimeException();
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new RuntimeException();
+ }
+ beanMetaData.setEjbName(ejbName);
+ JBossEnterpriseBeansMetaData enterpriseBeans = ejbJarMetaData.getEnterpriseBeans();
+ if(enterpriseBeans == null)
+ {
+ enterpriseBeans = new JBossEnterpriseBeansMetaData();
+ ejbJarMetaData.setEnterpriseBeans(enterpriseBeans);
+ }
+ enterpriseBeans.add(beanMetaData);
+ }
+ return beanMetaData;
+ }
+
public void setCtxProperties(Hashtable ctxProperties)
{
this.ctxProperties = ctxProperties;
@@ -131,41 +188,44 @@
public List getContainers(ClassFile cf, Ejb3Deployment deployment) throws Exception
{
- List containers = new ArrayList();
+ List<EJBContainer> containers = new ArrayList<EJBContainer>();
populateBaseInfo();
+ // TODO: because Ejb3Deployment.deploy will first do annotation deployments
+ // and then meta data deployments, bean meta data will never be attached to
+ // the container. So we do it here.
for (int ejbIndex = 0; ejbIndex < ejbNames.size(); ++ejbIndex)
{
String ejbName = ejbNames.get(ejbIndex);
if (ejbType == EJB_TYPE.STATELESS)
{
- EJBContainer container = getStatelessContainer(ejbIndex);
+ EJBContainer container = getStatelessContainer(ejbIndex, getEnterpriseBeanMetaData(deployment, ejbName, JBossSessionBeanMetaData.class));
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.STATEFUL)
{
- StatefulContainer container = getStatefulContainer(ejbIndex);
+ StatefulContainer container = getStatefulContainer(ejbIndex, getEnterpriseBeanMetaData(deployment, ejbName, JBossSessionBeanMetaData.class));
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.MESSAGE_DRIVEN)
{
- MDB container = getMDB(ejbIndex);
+ MDB container = getMDB(ejbIndex, getEnterpriseBeanMetaData(deployment, ejbName, JBossMessageDrivenBeanMetaData.class));
validateMDBTransactionAttribute(container);
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.SERVICE)
{
- ServiceContainer container = getServiceContainer(ejbIndex);
+ ServiceContainer container = getServiceContainer(ejbIndex, getEnterpriseBeanMetaData(deployment, ejbName, JBossServiceBeanMetaData.class));
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.CONSUMER)
{
- ConsumerContainer container = getConsumerContainer(ejbIndex);
+ ConsumerContainer container = getConsumerContainer(ejbIndex, getEnterpriseBeanMetaData(deployment, ejbName, JBossConsumerBeanMetaData.class));
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
@@ -192,7 +252,7 @@
return EJB3Util.getAspectDomain(visible, defaultDomain);
}
- protected ServiceContainer getServiceContainer(int ejbIndex) throws Exception
+ protected ServiceContainer getServiceContainer(int ejbIndex, JBossServiceBeanMetaData beanMetaData) throws Exception
{
String containerName = getAspectDomain(ejbIndex, defaultServiceDomain);
DomainDefinition domain = AspectManager.instance().getContainer(containerName);
@@ -202,12 +262,12 @@
+ containerName + "''");
return new ServiceContainer(deployment.getMbeanServer(), di.getClassLoader(), className,
- ejbNames.get(ejbIndex), (AspectManager) domain.getManager(), ctxProperties,
- di.getInterceptorInfoRepository(), deployment);
+ ejbNames.get(ejbIndex), (Domain) domain.getManager(), ctxProperties,
+ deployment, beanMetaData);
}
- protected ConsumerContainer getConsumerContainer(int ejbIndex) throws Exception
+ protected ConsumerContainer getConsumerContainer(int ejbIndex, JBossConsumerBeanMetaData beanMetaData) throws Exception
{
String containerName = getAspectDomain(ejbIndex, defaultConsumerDomain);
DomainDefinition domain = AspectManager.instance().getContainer(containerName);
@@ -216,13 +276,13 @@
throw new RuntimeException("No container configured with name '"
+ containerName + "''");
- return new ConsumerContainer(ejbNames.get(ejbIndex), (AspectManager) domain.getManager(),
+ return new ConsumerContainer(ejbNames.get(ejbIndex), (Domain) domain.getManager(),
di.getClassLoader(), className, ctxProperties,
- di.getInterceptorInfoRepository(), deployment);
+ deployment, beanMetaData);
}
- protected StatefulContainer getStatefulContainer(int ejbIndex) throws Exception
+ protected StatefulContainer getStatefulContainer(int ejbIndex, JBossSessionBeanMetaData beanMetaData) throws Exception
{
String containerName = getAspectDomain(ejbIndex, defaultSFSBDomain);
DomainDefinition domain = AspectManager.instance().getContainer(containerName);
@@ -232,12 +292,12 @@
+ containerName + "''");
return new StatefulContainer(di.getClassLoader(), className,
- ejbNames.get(ejbIndex), (AspectManager) domain.getManager(), ctxProperties,
- di.getInterceptorInfoRepository(), deployment);
+ ejbNames.get(ejbIndex), (Domain) domain.getManager(), ctxProperties,
+ deployment, beanMetaData);
}
- protected EJBContainer getStatelessContainer(int ejbIndex) throws Exception
+ protected EJBContainer getStatelessContainer(int ejbIndex, JBossSessionBeanMetaData beanMetaData) throws Exception
{
String containerName = getAspectDomain(ejbIndex, defaultSLSBDomain);
@@ -248,9 +308,8 @@
+ containerName + "''");
return new StatelessContainer(di.getClassLoader(), className,
- ejbNames.get(ejbIndex), (AspectManager) domain.getManager(),
- ctxProperties, di.getInterceptorInfoRepository(),
- deployment);
+ ejbNames.get(ejbIndex), (Domain) domain.getManager(),
+ ctxProperties, deployment, beanMetaData);
}
protected String getMDBDomainName(int ejbIndex)
@@ -263,13 +322,8 @@
}
- protected MDB getMDB(int ejbIndex) throws Exception
+ protected MDB getMDB(int ejbIndex, JBossMessageDrivenBeanMetaData beanMetaData) throws Exception
{
- return getMDB(ejbIndex, null);
- }
-
- protected MDB getMDB(int ejbIndex, EnterpriseBean xml) throws Exception
- {
String domainName = getMDBDomainName(ejbIndex);
String containerName = getAspectDomain(ejbIndex, domainName);
@@ -279,8 +333,8 @@
throw new RuntimeException("No container configured with name '"
+ containerName + "''");
- MDB container = new MDB(ejbNames.get(ejbIndex), (AspectManager) domain.getManager(), di.getClassLoader(), className,
- ctxProperties, di.getInterceptorInfoRepository(), deployment);
+ MDB container = new MDB(ejbNames.get(ejbIndex), (Domain) domain.getManager(), di.getClassLoader(), className,
+ ctxProperties, deployment, beanMetaData);
return container;
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -59,6 +59,7 @@
import org.jboss.ejb3.pool.PoolFactoryRegistry;
import org.jboss.ejb3.remoting.RemoteProxyFactoryRegistry;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossMetaData;
import org.jboss.metadata.javaee.spec.MessageDestinationsMetaData;
import org.jboss.system.ServiceMBeanSupport;
@@ -798,6 +799,21 @@
}
/**
+ * Do not call, for use in Ejb3Handler.
+ *
+ * @param <B>
+ * @param ejbName
+ * @param enterpriseBeanMetaDataClass
+ * @return
+ */
+ protected <B extends JBossEnterpriseBeanMetaData> B getEnterpriseBeanMetaData(String ejbName, Class<B> enterpriseBeanMetaDataClass)
+ {
+ if(metaData == null)
+ return null;
+ return enterpriseBeanMetaDataClass.cast(metaData.getEnterpriseBean(ejbName));
+ }
+
+ /**
* Get the meta data associated with this deployment or null if none.
*
* @return meta data or null
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3DescriptorHandler.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3DescriptorHandler.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3DescriptorHandler.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -55,7 +55,6 @@
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.interceptor.AroundInvoke;
-import javax.interceptor.ExcludeClassInterceptors;
import javax.interceptor.ExcludeDefaultInterceptors;
import javax.interceptor.Interceptors;
@@ -65,7 +64,6 @@
import org.jboss.ejb3.annotation.Consumer;
import org.jboss.ejb3.annotation.CurrentMessage;
import org.jboss.ejb3.annotation.DefaultActivationSpecs;
-import org.jboss.ejb3.annotation.DefaultInterceptorMarker;
import org.jboss.ejb3.annotation.DeliveryMode;
import org.jboss.ejb3.annotation.Depends;
import org.jboss.ejb3.annotation.IgnoreDependency;
@@ -93,10 +91,8 @@
import org.jboss.ejb3.annotation.impl.CurrentMessageImpl;
import org.jboss.ejb3.annotation.impl.DeclareRolesImpl;
import org.jboss.ejb3.annotation.impl.DefaultActivationSpecsImpl;
-import org.jboss.ejb3.annotation.impl.DefaultInterceptorMarkerImpl;
import org.jboss.ejb3.annotation.impl.DenyAllImpl;
import org.jboss.ejb3.annotation.impl.DependsImpl;
-import org.jboss.ejb3.annotation.impl.ExcludeClassInterceptorsImpl;
import org.jboss.ejb3.annotation.impl.ExcludeDefaultInterceptorsImpl;
import org.jboss.ejb3.annotation.impl.IgnoreDependencyImpl;
import org.jboss.ejb3.annotation.impl.InitImpl;
@@ -153,6 +149,7 @@
import org.jboss.metadata.ejb.jboss.JBossMetaData;
import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.jboss.LocalProducerMetaData;
import org.jboss.metadata.ejb.jboss.MessagePropertiesMetaData;
import org.jboss.metadata.ejb.jboss.MethodAttributeMetaData;
import org.jboss.metadata.ejb.jboss.MethodAttributesMetaData;
@@ -408,31 +405,31 @@
ejbClass = di.getClassLoader().loadClass(className);
if (ejbType == EJB_TYPE.STATELESS)
{
- EJBContainer container = getStatelessContainer(ejbIndex);
+ EJBContainer container = getStatelessContainer(ejbIndex, (JBossSessionBeanMetaData) enterpriseBean);
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.STATEFUL)
{
- StatefulContainer container = getStatefulContainer(ejbIndex);
+ StatefulContainer container = getStatefulContainer(ejbIndex, (JBossSessionBeanMetaData) enterpriseBean);
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.MESSAGE_DRIVEN)
{
- MDB container = getMDB(ejbIndex);
+ MDB container = getMDB(ejbIndex, (JBossMessageDrivenBeanMetaData) enterpriseBean);
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.SERVICE)
{
- ServiceContainer container = getServiceContainer(ejbIndex);
+ ServiceContainer container = getServiceContainer(ejbIndex, (JBossServiceBeanMetaData) enterpriseBean);
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
else if (ejbType == EJB_TYPE.CONSUMER)
{
- ConsumerContainer container = getConsumerContainer(ejbIndex);
+ ConsumerContainer container = getConsumerContainer(ejbIndex, (JBossConsumerBeanMetaData) enterpriseBean);
container.setJaccContextId(getJaccContextId());
containers.add(container);
}
@@ -443,15 +440,14 @@
return containers;
}
- protected StatefulContainer getStatefulContainer(int ejbIndex)
+ @Override
+ protected StatefulContainer getStatefulContainer(int ejbIndex, JBossSessionBeanMetaData enterpriseBean)
throws Exception
{
String ejbName = ejbNames.get(ejbIndex);
- JBossEnterpriseBeanMetaData enterpriseBean = ejbs.get(ejbIndex);
+ StatefulContainer container = super.getStatefulContainer(ejbIndex, enterpriseBean);
- StatefulContainer container = super.getStatefulContainer(ejbIndex);
-
container.setAssemblyDescriptor(dd.getAssemblyDescriptor());
if(enterpriseBean instanceof JBossSessionBeanMetaData)
@@ -482,15 +478,14 @@
}
}
- protected EJBContainer getStatelessContainer(int ejbIndex)
+ @Override
+ protected EJBContainer getStatelessContainer(int ejbIndex, JBossSessionBeanMetaData enterpriseBean)
throws Exception
{
String ejbName = ejbNames.get(ejbIndex);
- JBossEnterpriseBeanMetaData enterpriseBean = ejbs.get(ejbIndex);
+ EJBContainer container = super.getStatelessContainer(ejbIndex, enterpriseBean);
- EJBContainer container = super.getStatelessContainer(ejbIndex);
-
container.setAssemblyDescriptor(dd.getAssemblyDescriptor());
StatelessImpl annotation = new StatelessImpl(ejbName);
@@ -509,14 +504,13 @@
return container;
}
- protected ServiceContainer getServiceContainer(int ejbIndex)
+ @Override
+ protected ServiceContainer getServiceContainer(int ejbIndex, JBossServiceBeanMetaData service)
throws Exception
{
String ejbName = ejbNames.get(ejbIndex);
- JBossServiceBeanMetaData service = (JBossServiceBeanMetaData) ejbs.get(ejbIndex);
-
- ServiceContainer container = super.getServiceContainer(ejbIndex);
+ ServiceContainer container = super.getServiceContainer(ejbIndex, service);
ServiceImpl annotation = new ServiceImpl((Service) container
.resolveAnnotation(Service.class));
@@ -542,14 +536,13 @@
return container;
}
- protected ConsumerContainer getConsumerContainer(int ejbIndex)
+ @Override
+ protected ConsumerContainer getConsumerContainer(int ejbIndex, JBossConsumerBeanMetaData consumer)
throws Exception
{
String ejbName = ejbNames.get(ejbIndex);
- JBossConsumerBeanMetaData consumer = (JBossConsumerBeanMetaData) ejbs.get(ejbIndex);
-
- ConsumerContainer container = super.getConsumerContainer(ejbIndex);
+ ConsumerContainer container = super.getConsumerContainer(ejbIndex, consumer);
ConsumerImpl annotation = new ConsumerImpl((Consumer) container
.resolveAnnotation(Consumer.class));
@@ -589,18 +582,18 @@
return defaultMDBDomain;
}
- protected MDB getMDB(int ejbIndex) throws Exception
+ @Override
+ protected MDB getMDB(int ejbIndex, JBossMessageDrivenBeanMetaData enterpriseBean) throws Exception
{
String ejbName = ejbNames.get(ejbIndex);
- JBossEnterpriseBeanMetaData enterpriseBean = ejbs.get(ejbIndex);
+ MDB container = super.getMDB(ejbIndex, enterpriseBean);
- MDB container = super.getMDB(ejbIndex);
-
container.setAssemblyDescriptor(dd.getAssemblyDescriptor());
if(enterpriseBean instanceof JBossMessageDrivenBeanMetaData)
addMDBAnnotations(container, ejbName, (JBossMessageDrivenBeanMetaData) enterpriseBean);
+ /*
else if(enterpriseBean instanceof JBossGenericBeanMetaData)
{
// EJBTHREE-936: TODO: unsupported wickedness starts here
@@ -609,6 +602,7 @@
addMDBAnnotations(container, ejbName, mdb);
}
+ */
// An MDB doesn't have business interfaces, or does it?
//addInterfaces(container, enterpriseBean);
@@ -907,8 +901,6 @@
}
}
- container.setXml(enterpriseBean);
-
addTransactionAnnotations(container, enterpriseBean, ejbName);
addAssemblyAnnotations(container, enterpriseBean, ejbName);
@@ -991,7 +983,7 @@
{
addExcludeAnnotations(container, assembly.getExcludeList(), ejbName);
- addInterceptorBindingAnnotations(container, enterpriseBean, ejbName);
+// addInterceptorBindingAnnotations(container, enterpriseBean, ejbName);
}
if (enterpriseBean instanceof JBossSessionBeanMetaData)
@@ -1219,12 +1211,14 @@
}
}
+ /*
if (!definesInterceptors
&& di.getInterceptorInfoRepository().hasDefaultInterceptors())
{
addClassAnnotation(container, DefaultInterceptorMarker.class,
new DefaultInterceptorMarkerImpl());
}
+ */
}
/**
@@ -1264,6 +1258,7 @@
EJBContainer container, InterceptorBindingMetaData binding)
throws ClassNotFoundException
{
+ /*
boolean addedAnnotations = false;
for (java.lang.reflect.Method method : container.getBeanClass()
.getMethods())
@@ -1343,6 +1338,8 @@
}
return addedAnnotations;
+ */
+ return false;
}
private void addEjbAnnotations(EJBContainer container,
@@ -1558,6 +1555,7 @@
private void addClusterAnnotations(EJBContainer container,
JBossSessionBeanMetaData enterpriseBean) throws Exception
{
+ /* FIXME: Why disable the annotation?
if (!enterpriseBean.isClustered())
{
// ask directly, not the container (metadata setup in progress)
@@ -1566,6 +1564,7 @@
container.getAnnotations().disableAnnotation(Clustered.class.getName());
return;
}
+ */
ClusterConfigMetaData config = enterpriseBean.getClusterConfig();
if (config != null)
@@ -1646,28 +1645,36 @@
if (consumer == null)
return;
- if (consumer.getProducers().size() > 0
- || consumer.getLocalProducers().size() > 0)
+ List<ProducerMetaData> producers = consumer.getProducers();
+ List<LocalProducerMetaData> localProducers = consumer.getLocalProducers();
+ if ((producers != null && producers.size() > 0) || (localProducers != null && localProducers.size() > 0))
{
ProducersImpl producersAnnotation = new ProducersImpl();
- for(ProducerMetaData producer : consumer.getProducers())
+ if(producers != null)
{
- ProducerImpl annotation = new ProducerImpl(di.getClassLoader()
- .loadClass(producer.getClassName()));
- if (producer.getConnectionFactory() != null)
- annotation.setConnectionFactory(producer.getConnectionFactory());
- producersAnnotation.addProducer(annotation);
+ for(ProducerMetaData producer : producers)
+ {
+ ProducerImpl annotation = new ProducerImpl(di.getClassLoader()
+ .loadClass(producer.getClassName()));
+ if (producer.getConnectionFactory() != null)
+ annotation.setConnectionFactory(producer.getConnectionFactory());
+ producersAnnotation.addProducer(annotation);
+ }
}
- for(ProducerMetaData producer : consumer.getLocalProducers())
+ if(localProducers != null)
{
- ProducerImpl annotation = new ProducerImpl(di.getClassLoader()
- .loadClass(producer.getClassName()));
- if (producer.getConnectionFactory() != null)
- annotation.setConnectionFactory(producer.getConnectionFactory());
- producersAnnotation.addProducer(annotation);
+ for(ProducerMetaData producer : localProducers)
+ {
+ ProducerImpl annotation = new ProducerImpl(di.getClassLoader()
+ .loadClass(producer.getClassName()));
+ if (producer.getConnectionFactory() != null)
+ annotation.setConnectionFactory(producer.getConnectionFactory());
+ producersAnnotation.addProducer(annotation);
+ }
}
+
addClassAnnotation(container, Producers.class, producersAnnotation);
}
@@ -2016,9 +2023,16 @@
}
}
+ /*
+ * This method in non-deterministic. It should expect to be called
+ * in random order, so at the end there is no guarenteed security
+ * annotation configuration.
+ */
+ @Deprecated
protected void overrideAnnotations(EJBContainer container, Member m,
String annotation, Object value)
{
+ /*
AnnotationRepository annotations = container.getAnnotations();
if (value instanceof javax.annotation.security.DenyAll)
@@ -2040,6 +2054,7 @@
annotations.disableAnnotation(m,
javax.annotation.security.DenyAll.class.getName());
}
+ */
}
private void addClassAnnotation(EJBContainer container, Class<? extends Annotation> annotationClass, Annotation annotation)
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ProxyFactoryHelper.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ProxyFactoryHelper.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/ProxyFactoryHelper.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -41,7 +41,6 @@
import javax.management.ObjectInstance;
import javax.management.ObjectName;
-import org.jboss.aop.Advisor;
import org.jboss.ejb3.annotation.JndiBindingPolicy;
import org.jboss.ejb3.annotation.LocalBinding;
import org.jboss.ejb3.annotation.LocalHomeBinding;
@@ -687,7 +686,7 @@
Class<?>[] remotesArray = remoteAndRemoteBusinessInterfaces
.toArray(new Class[remoteAndRemoteBusinessInterfaces.size()]);
remoteAnnotation = new RemoteImpl(remotesArray);
- ((Advisor) container).getAnnotations().addClassAnnotation(Remote.class, remoteAnnotation);
+ ((EJBContainer) container).getAnnotations().addClassAnnotation(Remote.class, remoteAnnotation);
return remoteAnnotation.value();
}
// No remotes were found
@@ -835,13 +834,12 @@
return clientBindUrl;
}
- public static String getHomeJndiName(Container container)
+ public static String getHomeJndiName(EJBContainer container)
{
// Initialize
- Advisor advisor = (Advisor) container;
// Use explicitly-specified binding, if defined
- RemoteHomeBinding binding = (RemoteHomeBinding) advisor.resolveAnnotation(RemoteHomeBinding.class);
+ RemoteHomeBinding binding = (RemoteHomeBinding) container.resolveAnnotation(RemoteHomeBinding.class);
if (binding != null)
return binding.jndiBinding();
@@ -850,13 +848,12 @@
ProxyFactoryHelper.getDeploymentSummaryFromContainer(container));
}
- public static String getLocalHomeJndiName(Container container)
+ public static String getLocalHomeJndiName(EJBContainer container)
{
// Initialize
- Advisor advisor = (Advisor) container;
// Use explicitly-specified binding, if defined
- LocalHomeBinding binding = (LocalHomeBinding) advisor.resolveAnnotation(LocalHomeBinding.class);
+ LocalHomeBinding binding = (LocalHomeBinding) container.resolveAnnotation(LocalHomeBinding.class);
if (binding != null)
return binding.jndiBinding();
@@ -865,18 +862,17 @@
ProxyFactoryHelper.getDeploymentSummaryFromContainer(container));
}
- public static String getLocalJndiName(Container container)
+ public static String getLocalJndiName(EJBContainer container)
{
return getLocalJndiName(container, true);
}
- private static String getLocalJndiName(Container container, boolean conflictCheck)
+ private static String getLocalJndiName(EJBContainer container, boolean conflictCheck)
{
// Initialize
- Advisor advisor = (Advisor) container;
// See if local binding is explicitly-defined
- LocalBinding localBinding = (LocalBinding) advisor.resolveAnnotation(LocalBinding.class);
+ LocalBinding localBinding = (LocalBinding) container.resolveAnnotation(LocalBinding.class);
// If none specified
if (localBinding == null)
@@ -897,22 +893,21 @@
}
}
- public static String getRemoteJndiName(Container container)
+ public static String getRemoteJndiName(EJBContainer container)
{
return getRemoteJndiName(container, true);
}
- public static String getRemoteJndiName(Container container, boolean check)
+ public static String getRemoteJndiName(EJBContainer container, boolean check)
{
- Advisor advisor = (Advisor) container;
- RemoteBinding binding = (RemoteBinding) advisor.resolveAnnotation(RemoteBinding.class);
+ RemoteBinding binding = (RemoteBinding) container.resolveAnnotation(RemoteBinding.class);
return getRemoteJndiName(container, binding);
}
- private static void checkForJndiNamingConflict(Container container)
+ private static void checkForJndiNamingConflict(EJBContainer container)
{
- if (((Advisor) container).resolveAnnotation(Local.class) != null)
+ if (container.resolveAnnotation(Local.class) != null)
{
Ejb3DeploymentSummary summary = ProxyFactoryHelper.getDeploymentSummaryFromContainer(container);
String localJndiName = ProxyFactoryHelper.getJndiBindingPolicy(container).getDefaultLocalJndiName(summary);
@@ -927,12 +922,12 @@
}
}
- private static String getRemoteJndiName(Container container, RemoteBinding binding)
+ private static String getRemoteJndiName(EJBContainer container, RemoteBinding binding)
{
return getRemoteJndiName(container, binding, true);
}
- public static String getRemoteJndiName(Container container, RemoteBinding binding, boolean conflictCheck)
+ public static String getRemoteJndiName(EJBContainer container, RemoteBinding binding, boolean conflictCheck)
{
String jndiName = null;
if (binding == null || binding.jndiBinding() == null || binding.jndiBinding().equals(""))
@@ -950,7 +945,7 @@
return jndiName;
}
- public static String getDefaultRemoteJndiName(Container container)
+ public static String getDefaultRemoteJndiName(EJBContainer container)
{
return ProxyFactoryHelper.getJndiBindingPolicy(container).getDefaultRemoteJndiName(
ProxyFactoryHelper.getDeploymentSummaryFromContainer(container));
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/aop)
Deleted: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/AbstractInterceptor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/aop/AbstractInterceptor.java 2008-02-12 23:13:47 UTC (rev 69808)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/AbstractInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -1,48 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.ejb3.aop;
-
-import org.jboss.aop.advice.Interceptor;
-import org.jboss.aop.joinpoint.Invocation;
-import org.jboss.ejb3.EJBContainer;
-
-/**
- * Comment
- *
- * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
- */
-public abstract class AbstractInterceptor implements Interceptor
-{
- @SuppressWarnings("unchecked")
- public static <C extends EJBContainer> C getEJBContainer(Invocation invocation)
- {
- // Because of Sun JDK we must cast it to something, or else there will be
- // no upper bound.
- return (C) EJBContainer.getEJBContainer(invocation.getAdvisor());
- }
-
- public String getName()
- {
- return getClass().getName();
- }
-}
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/AbstractInterceptor.java (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/aop/AbstractInterceptor.java)
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/AbstractInterceptor.java (rev 0)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/AbstractInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -0,0 +1,48 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.aop;
+
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.ejb3.EJBContainer;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public abstract class AbstractInterceptor implements Interceptor
+{
+ @SuppressWarnings("unchecked")
+ public static <C extends EJBContainer> C getEJBContainer(Invocation invocation)
+ {
+ // Because of Sun JDK we must cast it to something, or else there will be
+ // no upper bound.
+ return (C) EJBContainer.getEJBContainer(invocation.getAdvisor());
+ }
+
+ public String getName()
+ {
+ return getClass().getName();
+ }
+}
Deleted: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/aop/BeanContainer.java 2008-02-12 23:13:47 UTC (rev 69808)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -1,330 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.ejb3.aop;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.interceptor.Interceptors;
-
-import org.jboss.aop.Advisor;
-import org.jboss.aop.Domain;
-import org.jboss.aop.MethodInfo;
-import org.jboss.aop.annotation.AnnotationRepository;
-import org.jboss.aop.joinpoint.MethodInvocation;
-import org.jboss.aop.util.MethodHashing;
-import org.jboss.ejb3.EJBContainer;
-import org.jboss.ejb3.cluster.metadata.ClusteredMetaDataBridge;
-import org.jboss.ejb3.interceptors.InterceptorFactoryRef;
-import org.jboss.ejb3.interceptors.aop.annotation.DefaultInterceptors;
-import org.jboss.ejb3.interceptors.container.AbstractContainer;
-import org.jboss.ejb3.interceptors.container.ContainerInterceptorFactory;
-import org.jboss.ejb3.interceptors.container.InterceptorFactoryRefImpl;
-import org.jboss.ejb3.interceptors.direct.AbstractDirectContainer;
-import org.jboss.ejb3.interceptors.lang.ClassHelper;
-import org.jboss.ejb3.interceptors.metadata.AdditiveBeanInterceptorMetaDataBridge;
-import org.jboss.ejb3.interceptors.metadata.InterceptorComponentMetaDataLoaderFactory;
-import org.jboss.ejb3.interceptors.metadata.InterceptorMetaDataBridge;
-import org.jboss.ejb3.metadata.MetaDataBridge;
-import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
-import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
-import org.jboss.metadata.ejb.spec.InterceptorMetaData;
-
-/**
- * Comment
- *
- * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
- */
-public class BeanContainer extends AbstractDirectContainer<Object, BeanContainer>
-{
- private EJBContainer container;
-
- public BeanContainer(EJBContainer container)
- {
- super();
- assert container != null : "container is null";
- this.container = container;
- }
-
- public BeanContainer(EJBContainer container, String name, String domainName, Class<? extends Object> beanClass)
- {
- super(name, domainName, beanClass);
- assert container != null : "container is null";
- this.container = container;
- }
-
- private static void addInterceptorClasses(List<Class<?>> interceptorClasses, Class<?> interceptors[])
- {
- if(interceptors != null)
- {
- for(Class<?> interceptorClass : interceptors)
- {
- if(!interceptorClasses.contains(interceptorClass))
- interceptorClasses.add(interceptorClass);
- }
- }
- }
-
- private static void addInterceptorClasses(List<Class<?>> interceptorClasses, Interceptors interceptorsAnnotation)
- {
- if(interceptorsAnnotation != null)
- {
- addInterceptorClasses(interceptorClasses, interceptorsAnnotation.value());
- }
- }
-
- public List<Class<?>> getInterceptorClasses()
- {
- // FIXME: move to ejb3-interceptors
- List<Class<?>> interceptorClasses = new ArrayList<Class<?>>();
-
- DefaultInterceptors defaultInterceptorsAnnotation = getAnnotation(DefaultInterceptors.class);
- if(defaultInterceptorsAnnotation != null)
- addInterceptorClasses(interceptorClasses, defaultInterceptorsAnnotation.value());
-
- Interceptors interceptorsAnnotation = (Interceptors) getAdvisor().resolveAnnotation(Interceptors.class);
- addInterceptorClasses(interceptorClasses, interceptorsAnnotation);
-
- for(Method beanMethod : ClassHelper.getAllMethods(getBeanClass()))
- {
- interceptorsAnnotation = (Interceptors) getAdvisor().resolveAnnotation(beanMethod, Interceptors.class);
- addInterceptorClasses(interceptorClasses, interceptorsAnnotation);
- }
-
- return interceptorClasses;
- }
-
- @Override
- protected Object createInterceptor(Class<?> interceptorClass) throws InstantiationException, IllegalAccessException
- {
- return container.createInterceptor(interceptorClass);
- }
-
- // TODO: re-evaluate this exposure
- @Deprecated
- public Advisor _getAdvisor()
- {
- return super.getAdvisor();
- }
-
- // TODO: re-evaluate this exposure
- @Deprecated
- public AnnotationRepository getAnnotationRepository()
- {
- return getAdvisor().getAnnotations();
- }
-
- @SuppressWarnings("unchecked")
- public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
- {
- return (T) getAdvisor().resolveAnnotation(annotationClass);
- }
-
- @SuppressWarnings("unchecked")
-// public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz)
- public <T extends Annotation> T getAnnotation(Class<?> clazz, Class<T> annotationType)
- {
- if(clazz == getBeanClass())
- return (T) getAdvisor().resolveAnnotation(annotationType);
- // TODO: this is not right
- return clazz.getAnnotation(annotationType);
- }
-
- @SuppressWarnings("unchecked")
- public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz, Field field)
- {
- if (clazz == this.getBeanClass())
- {
- return (T) getAdvisor().resolveAnnotation(field, annotationType);
- }
- return field.getAnnotation(annotationType);
- }
-
- @SuppressWarnings("unchecked")
- public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz, Method method)
- {
- if (clazz == this.getBeanClass())
- {
- return (T) getAdvisor().resolveAnnotation(method, annotationType);
- }
- // TODO: this is not right
- return method.getAnnotation(annotationType);
- }
-
- @SuppressWarnings("unchecked")
- public <T extends Annotation> T getAnnotation(Class<T> annotationType, Field field)
- {
- return (T) getAdvisor().resolveAnnotation(field, annotationType);
- }
-
- @SuppressWarnings("unchecked")
- public <T extends Annotation> T getAnnotation(Class<T> annotationType, Method method)
- {
- T annotation = (T) getAdvisor().resolveAnnotation(method, annotationType);
- if(annotation == null && method.isBridge())
- annotation = getBridgedAnnotation(annotationType, method);
- return annotation;
- }
-
- private <T extends Annotation> T getBridgedAnnotation(Class<T> annotationType, Method bridgeMethod)
- {
- assert bridgeMethod.isBridge();
- Method[] methods = bridgeMethod.getDeclaringClass().getMethods();
- int i = 0;
- boolean found = false;
- Class<?>[] bridgeParams = bridgeMethod.getParameterTypes();
- while (i < methods.length && !found)
- {
- if (!methods[i].isBridge() && methods[i].getName().equals(bridgeMethod.getName()))
- {
- Class<?>[] params = methods[i].getParameterTypes();
- if (params.length == bridgeParams.length)
- {
- int j = 0;
- boolean matches = true;
- while (j < params.length && matches)
- {
- if (!bridgeParams[j].isAssignableFrom(params[j]))
- matches = false;
- ++j;
- }
-
- if (matches)
- return getAnnotation(annotationType, methods[i]);
- }
- }
- ++i;
- }
-
- return null;
- }
-
- public final EJBContainer getEJBContainer()
- {
- return container;
- }
-
- protected List<Method> getVirtualMethods()
- {
- return container.getVirtualMethods();
- }
-
- public void initialize(String name, Domain domain, Class<? extends Object> beanClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
- {
- AnnotationRepositoryToMetaData annotations = new AnnotationRepositoryToMetaData(beanClass, beanMetaData, name, classLoader);
- List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
- interceptorBridges.add(new InterceptorMetaDataBridge());
- annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
- annotations.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(beanClass));
-
- // Ensure that an @Clustered annotation is visible to AOP if the XML says the bean is clustered.
- annotations.addMetaDataBridge(new ClusteredMetaDataBridge());
-
- initializeAdvisor(name, domain, beanClass, annotations);
- }
-
- @Override
- protected void initializeAdvisor(String name, Domain domain, Class<? extends Object> beanClass, AnnotationRepository annotations)
- {
- assert name != null : "name is null";
- assert domain != null : "domain is null";
- assert beanClass != null : "beanClass is null";
-
- // Decouple setting the advisor and initializing it, so interceptors
- // can get it.
- ExtendedManagedObjectAdvisor advisor = new ExtendedManagedObjectAdvisor(this, name, domain, annotations);
- setAdvisor(advisor);
- advisor.getAnnotations().addClassAnnotation(InterceptorFactoryRef.class, new InterceptorFactoryRefImpl(ContainerInterceptorFactory.class));
- advisor.initialize(beanClass);
- }
-
- @Override
- public Object invoke(Object target, Method method, Object[] arguments) throws Throwable
- {
- // TODO: make the AbstractContainer extendable
- long methodHash = MethodHashing.calculateHash(method);
- MethodInfo info = getAdvisor().getMethodInfo(methodHash);
- if(info == null)
- throw new IllegalArgumentException("method " + method + " is not under advisement by " + this);
- MethodInvocation invocation = new MethodInvocation(info, info.getInterceptors());
- invocation.setArguments(arguments);
- invocation.setTargetObject(target);
- return invocation.invokeNext();
- }
-
- public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
- {
- return getAdvisor().resolveAnnotation(annotationType) != null;
- }
-
- /**
- * FIXME: This method should not be needed. Initialization should already have happened
- * earlier in the game. (Ejb3DescriptorHandler adds annotations after a container object is constructed.)
- */
- @Deprecated
- public void reinitializeAdvisor()
- {
- // FIXME: Q&D
- try
- {
- ((ExtendedManagedObjectAdvisor) getAdvisor()).reinitialize();
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * FIXME: Q&D hack
- * @param advisor
- */
- private void setAdvisor(ExtendedManagedObjectAdvisor advisor)
- {
- try
- {
- Field field = AbstractContainer.class.getDeclaredField("advisor");
- field.setAccessible(true);
- field.set(this, advisor);
- }
- catch (IllegalArgumentException e)
- {
- throw new RuntimeException(e);
- }
- catch (IllegalAccessException e)
- {
- throw new RuntimeException(e);
- }
- catch (NoSuchFieldException e)
- {
- throw new RuntimeException(e);
- }
- catch (SecurityException e)
- {
- throw new RuntimeException(e);
- }
- }
-}
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/aop/BeanContainer.java)
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java (rev 0)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -0,0 +1,330 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.aop;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.interceptor.Interceptors;
+
+import org.jboss.aop.Advisor;
+import org.jboss.aop.Domain;
+import org.jboss.aop.MethodInfo;
+import org.jboss.aop.annotation.AnnotationRepository;
+import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.aop.util.MethodHashing;
+import org.jboss.ejb3.EJBContainer;
+import org.jboss.ejb3.cluster.metadata.ClusteredMetaDataBridge;
+import org.jboss.ejb3.interceptors.InterceptorFactoryRef;
+import org.jboss.ejb3.interceptors.aop.annotation.DefaultInterceptors;
+import org.jboss.ejb3.interceptors.container.AbstractContainer;
+import org.jboss.ejb3.interceptors.container.ContainerInterceptorFactory;
+import org.jboss.ejb3.interceptors.container.InterceptorFactoryRefImpl;
+import org.jboss.ejb3.interceptors.direct.AbstractDirectContainer;
+import org.jboss.ejb3.interceptors.lang.ClassHelper;
+import org.jboss.ejb3.interceptors.metadata.AdditiveBeanInterceptorMetaDataBridge;
+import org.jboss.ejb3.interceptors.metadata.InterceptorComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.interceptors.metadata.InterceptorMetaDataBridge;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class BeanContainer extends AbstractDirectContainer<Object, BeanContainer>
+{
+ private EJBContainer container;
+
+ public BeanContainer(EJBContainer container)
+ {
+ super();
+ assert container != null : "container is null";
+ this.container = container;
+ }
+
+ public BeanContainer(EJBContainer container, String name, String domainName, Class<? extends Object> beanClass)
+ {
+ super(name, domainName, beanClass);
+ assert container != null : "container is null";
+ this.container = container;
+ }
+
+ private static void addInterceptorClasses(List<Class<?>> interceptorClasses, Class<?> interceptors[])
+ {
+ if(interceptors != null)
+ {
+ for(Class<?> interceptorClass : interceptors)
+ {
+ if(!interceptorClasses.contains(interceptorClass))
+ interceptorClasses.add(interceptorClass);
+ }
+ }
+ }
+
+ private static void addInterceptorClasses(List<Class<?>> interceptorClasses, Interceptors interceptorsAnnotation)
+ {
+ if(interceptorsAnnotation != null)
+ {
+ addInterceptorClasses(interceptorClasses, interceptorsAnnotation.value());
+ }
+ }
+
+ public List<Class<?>> getInterceptorClasses()
+ {
+ // FIXME: move to ejb3-interceptors
+ List<Class<?>> interceptorClasses = new ArrayList<Class<?>>();
+
+ DefaultInterceptors defaultInterceptorsAnnotation = getAnnotation(DefaultInterceptors.class);
+ if(defaultInterceptorsAnnotation != null)
+ addInterceptorClasses(interceptorClasses, defaultInterceptorsAnnotation.value());
+
+ Interceptors interceptorsAnnotation = (Interceptors) getAdvisor().resolveAnnotation(Interceptors.class);
+ addInterceptorClasses(interceptorClasses, interceptorsAnnotation);
+
+ for(Method beanMethod : ClassHelper.getAllMethods(getBeanClass()))
+ {
+ interceptorsAnnotation = (Interceptors) getAdvisor().resolveAnnotation(beanMethod, Interceptors.class);
+ addInterceptorClasses(interceptorClasses, interceptorsAnnotation);
+ }
+
+ return interceptorClasses;
+ }
+
+ @Override
+ protected Object createInterceptor(Class<?> interceptorClass) throws InstantiationException, IllegalAccessException
+ {
+ return container.createInterceptor(interceptorClass);
+ }
+
+ // TODO: re-evaluate this exposure
+ @Deprecated
+ public Advisor _getAdvisor()
+ {
+ return super.getAdvisor();
+ }
+
+ // TODO: re-evaluate this exposure
+ @Deprecated
+ public AnnotationRepository getAnnotationRepository()
+ {
+ return getAdvisor().getAnnotations();
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+ {
+ return (T) getAdvisor().resolveAnnotation(annotationClass);
+ }
+
+ @SuppressWarnings("unchecked")
+// public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz)
+ public <T extends Annotation> T getAnnotation(Class<?> clazz, Class<T> annotationType)
+ {
+ if(clazz == getBeanClass())
+ return (T) getAdvisor().resolveAnnotation(annotationType);
+ // TODO: this is not right
+ return clazz.getAnnotation(annotationType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz, Field field)
+ {
+ if (clazz == this.getBeanClass())
+ {
+ return (T) getAdvisor().resolveAnnotation(field, annotationType);
+ }
+ return field.getAnnotation(annotationType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends Annotation> T getAnnotation(Class<T> annotationType, Class<?> clazz, Method method)
+ {
+ if (clazz == this.getBeanClass())
+ {
+ return (T) getAdvisor().resolveAnnotation(method, annotationType);
+ }
+ // TODO: this is not right
+ return method.getAnnotation(annotationType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends Annotation> T getAnnotation(Class<T> annotationType, Field field)
+ {
+ return (T) getAdvisor().resolveAnnotation(field, annotationType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends Annotation> T getAnnotation(Class<T> annotationType, Method method)
+ {
+ T annotation = (T) getAdvisor().resolveAnnotation(method, annotationType);
+ if(annotation == null && method.isBridge())
+ annotation = getBridgedAnnotation(annotationType, method);
+ return annotation;
+ }
+
+ private <T extends Annotation> T getBridgedAnnotation(Class<T> annotationType, Method bridgeMethod)
+ {
+ assert bridgeMethod.isBridge();
+ Method[] methods = bridgeMethod.getDeclaringClass().getMethods();
+ int i = 0;
+ boolean found = false;
+ Class<?>[] bridgeParams = bridgeMethod.getParameterTypes();
+ while (i < methods.length && !found)
+ {
+ if (!methods[i].isBridge() && methods[i].getName().equals(bridgeMethod.getName()))
+ {
+ Class<?>[] params = methods[i].getParameterTypes();
+ if (params.length == bridgeParams.length)
+ {
+ int j = 0;
+ boolean matches = true;
+ while (j < params.length && matches)
+ {
+ if (!bridgeParams[j].isAssignableFrom(params[j]))
+ matches = false;
+ ++j;
+ }
+
+ if (matches)
+ return getAnnotation(annotationType, methods[i]);
+ }
+ }
+ ++i;
+ }
+
+ return null;
+ }
+
+ public final EJBContainer getEJBContainer()
+ {
+ return container;
+ }
+
+ protected List<Method> getVirtualMethods()
+ {
+ return container.getVirtualMethods();
+ }
+
+ public void initialize(String name, Domain domain, Class<? extends Object> beanClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
+ {
+ AnnotationRepositoryToMetaData annotations = new AnnotationRepositoryToMetaData(beanClass, beanMetaData, name, classLoader);
+ List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
+ interceptorBridges.add(new InterceptorMetaDataBridge());
+ annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
+ annotations.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(beanClass));
+
+ // Ensure that an @Clustered annotation is visible to AOP if the XML says the bean is clustered.
+ annotations.addMetaDataBridge(new ClusteredMetaDataBridge());
+
+ initializeAdvisor(name, domain, beanClass, annotations);
+ }
+
+ @Override
+ protected void initializeAdvisor(String name, Domain domain, Class<? extends Object> beanClass, AnnotationRepository annotations)
+ {
+ assert name != null : "name is null";
+ assert domain != null : "domain is null";
+ assert beanClass != null : "beanClass is null";
+
+ // Decouple setting the advisor and initializing it, so interceptors
+ // can get it.
+ ExtendedManagedObjectAdvisor advisor = new ExtendedManagedObjectAdvisor(this, name, domain, annotations);
+ setAdvisor(advisor);
+ advisor.getAnnotations().addClassAnnotation(InterceptorFactoryRef.class, new InterceptorFactoryRefImpl(ContainerInterceptorFactory.class));
+ advisor.initialize(beanClass);
+ }
+
+ @Override
+ public Object invoke(Object target, Method method, Object[] arguments) throws Throwable
+ {
+ // TODO: make the AbstractContainer extendable
+ long methodHash = MethodHashing.calculateHash(method);
+ MethodInfo info = getAdvisor().getMethodInfo(methodHash);
+ if(info == null)
+ throw new IllegalArgumentException("method " + method + " is not under advisement by " + this);
+ MethodInvocation invocation = new MethodInvocation(info, info.getInterceptors());
+ invocation.setArguments(arguments);
+ invocation.setTargetObject(target);
+ return invocation.invokeNext();
+ }
+
+ public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
+ {
+ return getAdvisor().resolveAnnotation(annotationType) != null;
+ }
+
+ /**
+ * FIXME: This method should not be needed. Initialization should already have happened
+ * earlier in the game. (Ejb3DescriptorHandler adds annotations after a container object is constructed.)
+ */
+ @Deprecated
+ public void reinitializeAdvisor()
+ {
+ // FIXME: Q&D
+ try
+ {
+ ((ExtendedManagedObjectAdvisor) getAdvisor()).reinitialize();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * FIXME: Q&D hack
+ * @param advisor
+ */
+ private void setAdvisor(ExtendedManagedObjectAdvisor advisor)
+ {
+ try
+ {
+ Field field = AbstractContainer.class.getDeclaredField("advisor");
+ field.setAccessible(true);
+ field.set(this, advisor);
+ }
+ catch (IllegalArgumentException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (NoSuchFieldException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (SecurityException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}
Deleted: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java 2008-02-12 23:13:47 UTC (rev 69808)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -1,81 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.ejb3.aop;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.annotation.AnnotationRepository;
-import org.jboss.aop.util.MethodHashing;
-import org.jboss.ejb3.interceptors.container.ManagedObjectAdvisor;
-
-/**
- * The extended manager object advisor allows for virtual methods.
- *
- * TODO: move this functionality to ejb3-interceptors
- *
- * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
- */
-public class ExtendedManagedObjectAdvisor extends ManagedObjectAdvisor<Object, BeanContainer>
-{
- protected ExtendedManagedObjectAdvisor(BeanContainer container, String name, AspectManager manager, AnnotationRepository annotations)
- {
- super(container, name, manager, annotations);
- }
-
- @Override
- protected void createMethodTables() throws Exception
- {
- super.createMethodTables();
- List<Method> virtualMethods = getVirtualMethods();
- if(virtualMethods != null)
- {
- for(Method virtualMethod : virtualMethods)
- {
- long hash = MethodHashing.methodHash(virtualMethod);
- advisedMethods.put(hash, virtualMethod);
- }
- }
- }
-
- private List<Method> getVirtualMethods()
- {
- return getContainer().getVirtualMethods();
- }
-
- @Override
- protected void initialize(Class<?> beanClass)
- {
- super.initialize(beanClass);
- }
-
- protected void reinitialize() throws Exception
- {
- // recreate the advised methods, because virtual methods are now filled
- createMethodTables();
- // for some reason methodInfos are not rebuild during rebuildInterceptors
- initializeMethodChain();
- rebuildInterceptors();
- }
-}
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java)
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java (rev 0)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/ExtendedManagedObjectAdvisor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -0,0 +1,81 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.aop;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.annotation.AnnotationRepository;
+import org.jboss.aop.util.MethodHashing;
+import org.jboss.ejb3.interceptors.container.ManagedObjectAdvisor;
+
+/**
+ * The extended manager object advisor allows for virtual methods.
+ *
+ * TODO: move this functionality to ejb3-interceptors
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class ExtendedManagedObjectAdvisor extends ManagedObjectAdvisor<Object, BeanContainer>
+{
+ protected ExtendedManagedObjectAdvisor(BeanContainer container, String name, AspectManager manager, AnnotationRepository annotations)
+ {
+ super(container, name, manager, annotations);
+ }
+
+ @Override
+ protected void createMethodTables() throws Exception
+ {
+ super.createMethodTables();
+ List<Method> virtualMethods = getVirtualMethods();
+ if(virtualMethods != null)
+ {
+ for(Method virtualMethod : virtualMethods)
+ {
+ long hash = MethodHashing.methodHash(virtualMethod);
+ advisedMethods.put(hash, virtualMethod);
+ }
+ }
+ }
+
+ private List<Method> getVirtualMethods()
+ {
+ return getContainer().getVirtualMethods();
+ }
+
+ @Override
+ protected void initialize(Class<?> beanClass)
+ {
+ super.initialize(beanClass);
+ }
+
+ protected void reinitialize() throws Exception
+ {
+ // recreate the advised methods, because virtual methods are now filled
+ createMethodTables();
+ // for some reason methodInfos are not rebuild during rebuildInterceptors
+ initializeMethodChain();
+ rebuildInterceptors();
+ }
+}
Deleted: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/LifeCycleInvocation.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/aop/LifeCycleInvocation.java 2008-02-12 23:13:47 UTC (rev 69808)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/LifeCycleInvocation.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -1,70 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.ejb3.aop;
-
-import org.jboss.aop.advice.Interceptor;
-import org.jboss.aop.joinpoint.Invocation;
-import org.jboss.aop.joinpoint.InvocationBase;
-
-/**
- * Comment
- *
- * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
- */
-public class LifeCycleInvocation extends InvocationBase
-{
- private static final long serialVersionUID = 1L;
-
- public LifeCycleInvocation(Interceptor interceptors[])
- {
- super(interceptors);
- }
-
- public Invocation copy()
- {
- return new LifeCycleInvocation(interceptors);
- }
-
- public Invocation getWrapper(Interceptor[] newchain)
- {
- return new LifeCycleInvocation(newchain);
- }
-
- @Override
- public Object invokeNext() throws Throwable
- {
- if (interceptors != null && currentInterceptor < interceptors.length)
- {
- try
- {
- return interceptors[currentInterceptor++].invoke(this);
- }
- finally
- {
- // so that interceptors like clustering can reinvoke down the chain
- currentInterceptor--;
- }
- }
- return null;
- }
-}
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/LifeCycleInvocation.java (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/aop/LifeCycleInvocation.java)
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/LifeCycleInvocation.java (rev 0)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/LifeCycleInvocation.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.aop;
+
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.aop.joinpoint.InvocationBase;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class LifeCycleInvocation extends InvocationBase
+{
+ private static final long serialVersionUID = 1L;
+
+ public LifeCycleInvocation(Interceptor interceptors[])
+ {
+ super(interceptors);
+ }
+
+ public Invocation copy()
+ {
+ return new LifeCycleInvocation(interceptors);
+ }
+
+ public Invocation getWrapper(Interceptor[] newchain)
+ {
+ return new LifeCycleInvocation(newchain);
+ }
+
+ @Override
+ public Object invokeNext() throws Throwable
+ {
+ if (interceptors != null && currentInterceptor < interceptors.length)
+ {
+ try
+ {
+ return interceptors[currentInterceptor++].invoke(this);
+ }
+ finally
+ {
+ // so that interceptors like clustering can reinvoke down the chain
+ currentInterceptor--;
+ }
+ }
+ return null;
+ }
+}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/NoPassivationCache.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/NoPassivationCache.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/NoPassivationCache.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -22,9 +22,11 @@
package org.jboss.ejb3.cache;
import java.util.HashMap;
+
import javax.ejb.EJBException;
import javax.ejb.NoSuchEJBException;
-import org.jboss.ejb3.Container;
+
+import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.pool.Pool;
import org.jboss.ejb3.stateful.StatefulBeanContext;
@@ -41,7 +43,7 @@
private int createCount = 0;
private int removeCount = 0;
- public void initialize(Container container) throws Exception
+ public void initialize(EJBContainer container) throws Exception
{
this.pool = container.getPool();
cacheMap = new HashMap<Object, StatefulBeanContext>();
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/StatefulCache.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/StatefulCache.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/StatefulCache.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -22,7 +22,9 @@
package org.jboss.ejb3.cache;
import javax.ejb.EJBException;
-import org.jboss.ejb3.Container;
+import javax.ejb.NoSuchEJBException;
+
+import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.stateful.StatefulBeanContext;
/**
@@ -88,5 +90,5 @@
int getTotalSize();
- public void initialize(Container container) throws Exception;
+ public void initialize(EJBContainer container) throws Exception;
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -30,7 +30,6 @@
import javax.ejb.NoSuchEJBException;
import org.jboss.aop.Advisor;
-import org.jboss.ejb3.Container;
import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.annotation.CacheConfig;
import org.jboss.ejb3.annotation.PersistenceManager;
@@ -239,9 +238,9 @@
}
}
- public void initialize(Container container) throws Exception
+ public void initialize(EJBContainer container) throws Exception
{
- Advisor advisor = (Advisor) container;
+ Advisor advisor = container.getAdvisor();
this.pool = container.getPool();
cacheMap = new CacheMap();
PersistenceManager pmConfig = (PersistenceManager) advisor.resolveAnnotation(PersistenceManager.class);
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/tree/StatefulTreeCache.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/tree/StatefulTreeCache.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cache/tree/StatefulTreeCache.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -32,7 +32,6 @@
import javax.management.MBeanServer;
import javax.management.ObjectName;
-import org.jboss.aop.Advisor;
import org.jboss.cache.Cache;
import org.jboss.cache.CacheException;
import org.jboss.cache.CacheSPI;
@@ -49,7 +48,6 @@
import org.jboss.cache.notifications.annotation.NodePassivated;
import org.jboss.cache.notifications.event.NodeActivatedEvent;
import org.jboss.cache.notifications.event.NodePassivatedEvent;
-import org.jboss.ejb3.Container;
import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.annotation.CacheConfig;
import org.jboss.ejb3.cache.ClusteredStatefulCache;
@@ -300,18 +298,17 @@
}
}
- public void initialize(Container container) throws Exception
+ public void initialize(EJBContainer container) throws Exception
{
- this.ejbContainer = (EJBContainer) container;
-
+ this.ejbContainer = container;
+
log = Logger.getLogger(getClass().getName() + "." + this.ejbContainer.getEjbName());
this.pool = this.ejbContainer.getPool();
ClassLoader cl = this.ejbContainer.getClassloader();
this.classloader = new WeakReference<ClassLoader>(cl);
-
- Advisor advisor = this.ejbContainer;
- CacheConfig config = (CacheConfig) advisor.resolveAnnotation(CacheConfig.class);
+
+ CacheConfig config = (CacheConfig) ejbContainer.resolveAnnotation(CacheConfig.class);
MBeanServer server = MBeanServerLocator.locateJBoss();
String name = config.name();
if (name == null || name.trim().length() == 0)
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/cluster)
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/cluster/metadata)
Deleted: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java 2008-02-12 23:13:47 UTC (rev 69808)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -1,116 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.ejb3.cluster.metadata;
-
-import java.lang.annotation.Annotation;
-
-import org.jboss.ejb3.annotation.Clustered;
-import org.jboss.ejb3.annotation.impl.ClusteredImpl;
-import org.jboss.ejb3.metadata.MetaDataBridge;
-import org.jboss.ha.client.loadbalance.LoadBalancePolicy;
-import org.jboss.logging.Logger;
-import org.jboss.metadata.ejb.jboss.ClusterConfigMetaData;
-import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
-import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
-
-/**
- * Creates a ClusteredImpl to match a ClusterConfigMetaData.
- *
- * @author <a href="mailto:brian.stansberry at jboss.com">Brian Stansberry</a>
- * @version $Revision: $
- */
-public class ClusteredMetaDataBridge implements MetaDataBridge<JBossEnterpriseBeanMetaData>
-{
- private static final Logger log = Logger.getLogger(ClusteredMetaDataBridge.class);
-
- private ClusteredImpl createAnnotationImpl()
- {
- try
- {
- return ClusteredImpl.class.newInstance();
- }
- catch (InstantiationException e)
- {
- throw new RuntimeException(e);
- }
- catch (IllegalAccessException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData metaData, ClassLoader classLoader)
- {
- if(log.isTraceEnabled()) log.trace("retrieve annotation " + annotationClass + " on " + metaData);
- if (annotationClass == Clustered.class && isClustered(metaData))
- {
- ClusteredImpl impl = createAnnotationImpl();
- ClusterConfigMetaData ccmd = findClusterConfigMetaData(metaData);
- if (ccmd != null)
- {
- if (ccmd.getPartitionName() != null)
- impl.setPartition(ccmd.getPartitionName());
- // FIXME Once @Clustered and ClusteredImpl are updated, just use the string values
- if (ccmd.getBeanLoadBalancePolicy() != null)
- impl.setLoadBalancePolicy(loadClass(classLoader, ccmd.getBeanLoadBalancePolicy()));
- if (ccmd.getHomeLoadBalancePolicy() != null)
- impl.setHomeLoadBalancePolicy(loadClass(classLoader, ccmd.getHomeLoadBalancePolicy()));
- }
- return annotationClass.cast(impl);
- }
- return null;
- }
-
- public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData metaData, ClassLoader classLoader, String methodName, String... parameterNames)
- {
- return null;
- }
-
- private boolean isClustered(JBossEnterpriseBeanMetaData metadata)
- {
- if (metadata instanceof JBossSessionBeanMetaData)
- return ((JBossSessionBeanMetaData) metadata).isClustered();
- return false;
- }
-
- private ClusterConfigMetaData findClusterConfigMetaData(JBossEnterpriseBeanMetaData metaData)
- {
- if (metaData instanceof JBossSessionBeanMetaData)
- {
- return ((JBossSessionBeanMetaData) metaData).getClusterConfig();
- }
- return null;
- }
-
- @SuppressWarnings("unchecked")
- private static <A extends LoadBalancePolicy> Class<A> loadClass(ClassLoader classLoader, String name)
- {
- try
- {
- return (Class<A>) classLoader.loadClass(name);
- }
- catch (ClassNotFoundException e)
- {
- throw new RuntimeException(e);
- }
- }
-}
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java)
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java (rev 0)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/cluster/metadata/ClusteredMetaDataBridge.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -0,0 +1,116 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.cluster.metadata;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.ejb3.annotation.Clustered;
+import org.jboss.ejb3.annotation.impl.ClusteredImpl;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.ha.client.loadbalance.LoadBalancePolicy;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.ClusterConfigMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+
+/**
+ * Creates a ClusteredImpl to match a ClusterConfigMetaData.
+ *
+ * @author <a href="mailto:brian.stansberry at jboss.com">Brian Stansberry</a>
+ * @version $Revision: $
+ */
+public class ClusteredMetaDataBridge implements MetaDataBridge<JBossEnterpriseBeanMetaData>
+{
+ private static final Logger log = Logger.getLogger(ClusteredMetaDataBridge.class);
+
+ private ClusteredImpl createAnnotationImpl()
+ {
+ try
+ {
+ return ClusteredImpl.class.newInstance();
+ }
+ catch (InstantiationException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData metaData, ClassLoader classLoader)
+ {
+ if(log.isTraceEnabled()) log.trace("retrieve annotation " + annotationClass + " on " + metaData);
+ if (annotationClass == Clustered.class && isClustered(metaData))
+ {
+ ClusteredImpl impl = createAnnotationImpl();
+ ClusterConfigMetaData ccmd = findClusterConfigMetaData(metaData);
+ if (ccmd != null)
+ {
+ if (ccmd.getPartitionName() != null)
+ impl.setPartition(ccmd.getPartitionName());
+ // FIXME Once @Clustered and ClusteredImpl are updated, just use the string values
+ if (ccmd.getBeanLoadBalancePolicy() != null)
+ impl.setLoadBalancePolicy(ccmd.getBeanLoadBalancePolicy());
+ if (ccmd.getHomeLoadBalancePolicy() != null)
+ impl.setHomeLoadBalancePolicy(ccmd.getHomeLoadBalancePolicy());
+ }
+ return annotationClass.cast(impl);
+ }
+ return null;
+ }
+
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData metaData, ClassLoader classLoader, String methodName, String... parameterNames)
+ {
+ return null;
+ }
+
+ private boolean isClustered(JBossEnterpriseBeanMetaData metadata)
+ {
+ if (metadata instanceof JBossSessionBeanMetaData)
+ return ((JBossSessionBeanMetaData) metadata).isClustered();
+ return false;
+ }
+
+ private ClusterConfigMetaData findClusterConfigMetaData(JBossEnterpriseBeanMetaData metaData)
+ {
+ if (metaData instanceof JBossSessionBeanMetaData)
+ {
+ return ((JBossSessionBeanMetaData) metaData).getClusterConfig();
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <A extends LoadBalancePolicy> Class<A> loadClass(ClassLoader classLoader, String name)
+ {
+ try
+ {
+ return (Class<A>) classLoader.loadClass(name);
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -25,10 +25,10 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.JarURLConnection;
+import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLConnection;
-import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
@@ -38,6 +38,7 @@
import java.util.Properties;
import java.util.Set;
import java.util.zip.ZipFile;
+
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.naming.InitialContext;
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -22,15 +22,12 @@
package org.jboss.ejb3.interceptor;
import java.lang.reflect.Method;
-import java.util.Arrays;
import javax.jms.MessageListener;
import org.jboss.aop.Advisor;
import org.jboss.aop.InstanceAdvisor;
import org.jboss.aop.joinpoint.Joinpoint;
-import org.jboss.aop.joinpoint.MethodJoinpoint;
-import org.jboss.ejb3.EJBContainer;
import org.jboss.logging.Logger;
import org.jboss.util.MethodHashing;
@@ -80,9 +77,10 @@
public Object createPerJoinpoint(Advisor advisor, Joinpoint jp)
{
+ /*
if (jp instanceof MethodJoinpoint)
{
- EJBContainer container = (EJBContainer) advisor;
+ EJBContainer container = EJBContainer.getEJBContainer(advisor);
Class beanClass = container.getBeanClass();
try
@@ -105,6 +103,8 @@
}
}
return new EJB3InterceptorsInterceptor(new InterceptorInfo[0], null);
+ */
+ throw new RuntimeException("no longer supported (EJBTHREE-1174)");
}
public Object createPerClass(Advisor advisor)
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfo.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfo.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfo.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -36,6 +36,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision$
*/
+ at Deprecated
public class InterceptorInfo
{
Class<?> clazz;
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -37,14 +37,13 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.CreateException;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.interceptor.AroundInvoke;
-import javax.interceptor.ExcludeClassInterceptors;
-import javax.interceptor.ExcludeDefaultInterceptors;
import javax.interceptor.InvocationContext;
import org.jboss.ejb3.EJBContainer;
@@ -73,7 +72,9 @@
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision$
+ * @deprecated use the new interceptors component
*/
+ at Deprecated
public class InterceptorInfoRepository
{
private static Logger log = Logger.getLogger(InterceptorInfoRepository.class);
@@ -135,6 +136,7 @@
return defaultInterceptors.size() > 0;
}
+ /*
public ArrayList<InterceptorInfo> getClassInterceptors(EJBContainer container)
{
javax.interceptor.Interceptors interceptors = (javax.interceptor.Interceptors) container
@@ -143,7 +145,8 @@
return infos;
}
-
+ */
+
public ArrayList<InterceptorInfo> getMethodInterceptors(EJBContainer container, Method m)
{
javax.interceptor.Interceptors interceptors = (javax.interceptor.Interceptors) container.resolveAnnotation(m,
@@ -184,6 +187,7 @@
return getMethodsForEvent(info, type);
}
+ /*
public InterceptorInfo[] getBusinessInterceptors(EJBContainer container, Method method)
{
return getInterceptors(container, AroundInvoke.class, method);
@@ -208,7 +212,9 @@
{
return getInterceptors(container, PreDestroy.class, null);
}
-
+ */
+
+ /*
private InterceptorInfo[] getInterceptors(EJBContainer container, Class type, Method method)
{
ArrayList<InterceptorInfo> interceptors = new ArrayList<InterceptorInfo>();
@@ -252,7 +258,9 @@
InterceptorInfo[] ints = interceptors.toArray(new InterceptorInfo[interceptors.size()]);
return ints;
}
-
+ */
+
+ /*
private List<InterceptorInfo> getMethodOnlyInterceptorsForLifecycle(EJBContainer container, Class type, List<InterceptorInfo> infos)
{
HashSet<InterceptorInfo> methodLevelInterceptors = (HashSet<InterceptorInfo>)container.getApplicableInterceptors().clone();
@@ -279,10 +287,12 @@
List<InterceptorInfo> trimmedInfos = trimUnwanted(methodLevelInterceptors, type);
return trimmedInfos;
}
+ */
+ /*
private boolean hasAnnotation(EJBContainer container, Class annotation, Method method)
{
- if (container.resolveAnnotation(annotation) != null)
+ if (container.getAnnotation(annotation) != null)
{
return true;
}
@@ -294,7 +304,8 @@
return false;
}
-
+ */
+
private List<InterceptorInfo> trimUnwanted(Collection<InterceptorInfo> interceptors, Class type)
{
ArrayList<InterceptorInfo> ints = new ArrayList<InterceptorInfo>(interceptors.size());
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInjector.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInjector.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/InterceptorInjector.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -21,14 +21,12 @@
*/
package org.jboss.ejb3.interceptor;
+import java.lang.reflect.AccessibleObject;
+import java.util.Map;
+
import org.jboss.ejb3.BeanContext;
-import org.jboss.ejb3.Container;
-import org.jboss.ejb3.EJBContainer;
import org.jboss.injection.Injector;
import org.jboss.injection.PojoInjector;
-import org.jboss.metadata.ejb.spec.InterceptorMetaData;
-import java.lang.reflect.AccessibleObject;
-import java.util.Map;
/**
*
@@ -37,33 +35,13 @@
*/
public class InterceptorInjector
{
- EJBContainer container;
- InterceptorInfo info;
- PojoInjector[] injectors;
- protected Map<AccessibleObject, Injector> encInjections;
+ private PojoInjector[] injectors;
- public InterceptorInjector(Container container, InterceptorInfo info, Map<AccessibleObject, Injector> injections)
+ public InterceptorInjector(Map<AccessibleObject, Injector> injections)
{
- this.container = (EJBContainer)container;
- this.info = info;
injectors = injections.values().toArray(new PojoInjector[injections.size()]);
}
- public InterceptorMetaData getXml()
- {
- return info.getXml();
- }
-
- public Class<?> getClazz()
- {
- return info.getClazz();
- }
-
- public Container getContainer()
- {
- return container;
- }
-
public void inject(BeanContext ctx, Object instance)
{
for (PojoInjector injector : injectors)
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -42,7 +42,9 @@
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision$
+ * @deprecated EJBTHREE-1174
*/
+ at Deprecated
public class LifecycleInterceptorHandler
{
private static final Logger log = Logger.getLogger(LifecycleInterceptorHandler.class);
@@ -61,6 +63,7 @@
public LifecycleInterceptorHandler(EJBContainer container, Class[] handledCallbacks)
{
+ /*
this.container = container;
InterceptorInfoRepository repostitory = container.getInterceptorRepository();
for (Class clazz : handledCallbacks)
@@ -90,6 +93,8 @@
resolveTimeoutCallback();
}
}
+ */
+ throw new RuntimeException("no longer supported (EJBTHREE-1174)");
}
public long getTimeoutCalllbackHash()
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/ConsumerContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/ConsumerContainer.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/ConsumerContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -32,9 +32,10 @@
import javax.ejb.Local;
import javax.jms.Destination;
import javax.jms.Message;
+import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.InvocationResponse;
@@ -48,9 +49,10 @@
import org.jboss.ejb3.annotation.Producer;
import org.jboss.ejb3.annotation.Producers;
import org.jboss.ejb3.annotation.impl.MessagePropertiesImpl;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossConsumerBeanMetaData;
import org.jboss.metadata.ejb.spec.ActivationConfigPropertyMetaData;
+import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
/**
* Comment
@@ -82,11 +84,10 @@
public static final String CONSUMER_MESSAGE = "CONSUMER_MESSAGE";
- public ConsumerContainer(String ejbName, AspectManager manager, ClassLoader cl, String beanClassName,
- Hashtable ctxProperties, InterceptorInfoRepository interceptorRepository,
- Ejb3Deployment deployment)
+ public ConsumerContainer(String ejbName, Domain domain, ClassLoader cl, String beanClassName,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossConsumerBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(ejbName, manager, cl, beanClassName, ctxProperties, interceptorRepository, deployment);
+ super(ejbName, domain, cl, beanClassName, ctxProperties, deployment, beanMetaData);
}
public InvocationResponse dynamicInvoke(Invocation invocation) throws Throwable
@@ -98,7 +99,7 @@
{
Thread.currentThread().setContextClassLoader(classloader);
MethodInvocation si = (MethodInvocation) invocation;
- MethodInfo info = super.getMethodInfo(si.getMethodHash());
+ MethodInfo info = getAdvisor().getMethodInfo(si.getMethodHash());
if (info == null)
{
throw new RuntimeException("Could not resolve beanClass method from proxy call");
@@ -107,7 +108,7 @@
newSi = new EJBContainerInvocation(info);
newSi.setArguments(si.getArguments());
newSi.setMetaData(si.getMetaData());
- newSi.setAdvisor(this);
+ newSi.setAdvisor(getAdvisor());
InvocationResponse response = new InvocationResponse(newSi.invokeNext());
response.setContextInfo(newSi.getResponseContextInfo());
@@ -139,6 +140,13 @@
return ON_MESSAGE;
}
+ @Override
+ protected NamedMethodMetaData getTimeoutMethodMetaData()
+ {
+ // TODO: add timeout method meta data to JBossConsumerBeanMetaData
+ return null;
+ }
+
public Object localInvoke(MethodInfo info, Object[] args) throws Throwable
{
if (info.getMethod().equals(getOnMessage()))
@@ -163,7 +171,7 @@
return super.localInvoke(info, args);
}
- public Class getMessagingType()
+ public Class<MessageListener> getMessagingType()
{
return javax.jms.MessageListener.class;
}
@@ -171,7 +179,7 @@
public MethodInfo getMethodInfo(Method method)
{
MethodInfo info = new MethodInfo();
- info.setAdvisor(this);
+ info.setAdvisor(getAdvisor());
info.setAdvisedMethod(method);
info.setUnadvisedMethod(method);
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MDB.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MDB.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MDB.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -21,7 +21,6 @@
*/
package org.jboss.ejb3.mdb;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
@@ -34,13 +33,12 @@
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.MethodInfo;
-import org.jboss.aop.util.MethodHashing;
+import org.jboss.aop.Domain;
import org.jboss.ejb3.Ejb3Deployment;
import org.jboss.ejb3.ProxyFactoryHelper;
import org.jboss.ejb3.annotation.DefaultActivationSpecs;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
+import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBeanMetaData;
+import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
/**
* Comment
@@ -59,10 +57,10 @@
protected Class<?> messagingType = null;
- public MDB(String ejbName, AspectManager manager, ClassLoader cl, String beanClassName, Hashtable ctxProperties,
- InterceptorInfoRepository interceptorRepository, Ejb3Deployment deployment)
+ public MDB(String ejbName, Domain domain, ClassLoader cl, String beanClassName, Hashtable ctxProperties,
+ Ejb3Deployment deployment, JBossMessageDrivenBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(ejbName, manager, cl, beanClassName, ctxProperties, interceptorRepository, deployment);
+ super(ejbName, domain, cl, beanClassName, ctxProperties, deployment, beanMetaData);
}
public Class<?> getMessagingType()
@@ -73,7 +71,7 @@
messagingType = annotation.messageListenerInterface();
if (messagingType.getName().equals(Object.class.getName()))
{
- Set<Class<?>> businessInterfaces = ProxyFactoryHelper.getBusinessInterfaces(clazz,false);
+ Set<Class<?>> businessInterfaces = ProxyFactoryHelper.getBusinessInterfaces(getBeanClass(), false);
if (businessInterfaces.size() > 1 || businessInterfaces.size() == 0)
throw new RuntimeException("Unable to choose messagingType interface for MDB " + getEjbName() + " from " + businessInterfaces);
messagingType = businessInterfaces.iterator().next();
@@ -83,12 +81,14 @@
return messagingType;
}
+ /*
public MethodInfo getMethodInfo(Method method)
{
long hash = MethodHashing.calculateHash(method);
MethodInfo info = super.getMethodInfo(hash);
return info;
}
+ */
public Map getActivationConfigProperties()
{
@@ -111,6 +111,21 @@
return result;
}
+ protected JBossMessageDrivenBeanMetaData getMetaData()
+ {
+ // TODO: use generics
+ return (JBossMessageDrivenBeanMetaData) super.getMetaData();
+ }
+
+ @Override
+ protected NamedMethodMetaData getTimeoutMethodMetaData()
+ {
+ JBossMessageDrivenBeanMetaData metaData = getMetaData();
+ if(metaData != null)
+ return metaData.getTimeoutMethod();
+ return null;
+ }
+
protected List<Class<?>> resolveBusinessInterfaces()
{
List<Class<?>> list = new ArrayList<Class<?>>();
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -37,7 +37,7 @@
import javax.naming.Context;
import javax.naming.NamingException;
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
import org.jboss.deployment.DeploymentException;
import org.jboss.ejb3.BeanContext;
@@ -47,14 +47,15 @@
import org.jboss.ejb3.Ejb3Module;
import org.jboss.ejb3.ProxyFactoryHelper;
import org.jboss.ejb3.annotation.ResourceAdapter;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.jms.JMSDestinationFactory;
import org.jboss.ejb3.mdb.inflow.JBossMessageEndpointFactory;
import org.jboss.ejb3.timerservice.TimedObjectInvoker;
import org.jboss.ejb3.timerservice.TimerServiceFactory;
import org.jboss.jms.jndi.JMSProviderAdapter;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
import org.jboss.metadata.ejb.spec.ActivationConfigPropertyMetaData;
+import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
/**
* @version <tt>$Revision$</tt>
@@ -65,6 +66,7 @@
private static final Logger log = Logger.getLogger(MessagingContainer.class);
protected TimerService timerService;
+ private Method timeout;
protected ActivationSpec activationSpec = new ActivationSpec();
protected JBossMessageEndpointFactory messageEndpointFactory;
private MessagingDelegateWrapper mbean = new MessagingDelegateWrapper(this);
@@ -76,13 +78,15 @@
*/
protected final static String DEFAULT_DESTINATION_TYPE = "javax.jms.Topic";
- public MessagingContainer(String ejbName, AspectManager manager, ClassLoader cl, String beanClassName, Hashtable ctxProperties,
- InterceptorInfoRepository interceptorRepository, Ejb3Deployment deployment)
+ public MessagingContainer(String ejbName, Domain domain, ClassLoader cl, String beanClassName, Hashtable ctxProperties,
+ Ejb3Deployment deployment, JBossEnterpriseBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(Ejb3Module.BASE_EJB3_JMX_NAME + ",name=" + ejbName, manager, cl, beanClassName, ejbName, ctxProperties, interceptorRepository, deployment);
+ super(Ejb3Module.BASE_EJB3_JMX_NAME + ",name=" + ejbName, domain, cl, beanClassName, ejbName, ctxProperties, deployment, beanMetaData);
messageEndpointFactory = new JBossMessageEndpointFactory();
messageEndpointFactory.setContainer(this);
+
+ initializeTimeout();
}
@Override
@@ -96,14 +100,31 @@
return mbean;
}
+ protected JBossEnterpriseBeanMetaData getMetaData()
+ {
+ // TODO: resolve this cast using generics on EJBContainer
+ return (JBossEnterpriseBeanMetaData) getXml();
+ }
+
+ abstract protected NamedMethodMetaData getTimeoutMethodMetaData();
+
public abstract Class getMessagingType();
public abstract Map<String, ActivationConfigPropertyMetaData> getActivationConfigProperties();
protected abstract void populateActivationSpec();
- public abstract MethodInfo getMethodInfo(Method method);
+ @Deprecated
+ public MethodInfo getMethodInfo(Method method)
+ {
+ return super.getMethodInfo(method);
+ }
+ private void initializeTimeout()
+ {
+ this.timeout = getTimeoutCallback(getTimeoutMethodMetaData(), getBeanClass());
+ }
+
public void setMessageEndpointFactory(JBossMessageEndpointFactory messageEndpointFactory)
{
this.messageEndpointFactory = messageEndpointFactory;
@@ -231,17 +252,16 @@
throw new RuntimeException("Could not resolve beanClass method from proxy call: " + method.toString());
}
return localInvoke(info, args);
-
}
public Object localInvoke(MethodInfo info, Object[] args) throws Throwable
- {
+ {
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
pushEnc();
try
{
EJBContainerInvocation nextInvocation = new EJBContainerInvocation(info);
- nextInvocation.setAdvisor(this);
+ nextInvocation.setAdvisor(getAdvisor());
nextInvocation.setArguments(args);
return nextInvocation.invokeNext();
}
@@ -265,7 +285,6 @@
public void callTimeout(Timer timer) throws Exception
{
- Method timeout = callbackHandler.getTimeoutCallback();
if (timeout == null) throw new EJBException("No method has been annotated with @Timeout");
Object[] args = {timer};
try
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -21,10 +21,10 @@
*/
package org.jboss.ejb3.pool;
-import org.jboss.aop.Advisor;
-import org.jboss.ejb3.annotation.CacheConfig;
import org.jboss.ejb3.BeanContext;
import org.jboss.ejb3.Container;
+import org.jboss.ejb3.EJBContainer;
+import org.jboss.ejb3.annotation.CacheConfig;
import org.jboss.ejb3.stateful.StatefulBeanContext;
import org.jboss.injection.Injector;
import org.jboss.logging.Logger;
@@ -83,9 +83,10 @@
if (ctx instanceof StatefulBeanContext)
{
StatefulBeanContext sfctx = (StatefulBeanContext) ctx;
+ // FIXME: remove this class cast
+ EJBContainer c = (EJBContainer) container;
// Tell context how to handle replication
- Advisor advisor = (Advisor) container;
- CacheConfig config = (CacheConfig) advisor.resolveAnnotation(CacheConfig.class);
+ CacheConfig config = c.getAnnotation(CacheConfig.class);
if (config != null)
{
sfctx.setReplicationIsPassivation(config.replicationIsPassivation());
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/IsLocalInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/IsLocalInterceptor.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/IsLocalInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -24,14 +24,13 @@
import java.io.Serializable;
import java.util.Map;
-import org.jboss.aop.Dispatcher;
-import org.jboss.aop.Advisor;
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
-import org.jboss.logging.Logger;
-import org.jboss.serial.io.MarshalledObjectForLocalCalls;
import org.jboss.ejb3.Container;
import org.jboss.ejb3.Ejb3Registry;
+import org.jboss.ejb3.session.SessionContainer;
+import org.jboss.logging.Logger;
+import org.jboss.serial.io.MarshalledObjectForLocalCalls;
/**
* Routes the call to the local container, bypassing further client-side
@@ -78,7 +77,7 @@
{
Invocation copy = (Invocation) new MarshalledObjectForLocalCalls(invocation).get();
copy.getMetaData().addMetaData(IS_LOCAL, IS_LOCAL, Boolean.TRUE);
- org.jboss.aop.joinpoint.InvocationResponse response = ((Advisor) container).dynamicInvoke(null, copy);
+ org.jboss.aop.joinpoint.InvocationResponse response = ((SessionContainer) container).dynamicInvoke(null, copy);
Map contextInfo = response.getContextInfo();
if (contextInfo != null)
{
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -21,6 +21,8 @@
*/
package org.jboss.ejb3.remoting;
+import java.util.Map;
+
import org.jboss.aop.Advisor;
import org.jboss.aop.InstanceAdvisor;
import org.jboss.aop.advice.AspectFactory;
@@ -43,8 +45,10 @@
public Object createPerClass(Advisor advisor)
{
- SessionContainer container = (SessionContainer) advisor;
- return new ReplicantsManagerInterceptor(container.getClusterFamilies());
+ SessionContainer container = SessionContainer.getEJBContainer(advisor);
+ Map<?, ?> families = container.getClusterFamilies();
+ assert families != null : "families is null";
+ return new ReplicantsManagerInterceptor(families);
}
public Object createPerInstance(Advisor advisor, InstanceAdvisor instanceAdvisor)
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -24,6 +24,7 @@
import org.jboss.aop.Advisor;
import org.jboss.aop.advice.AspectFactory;
import org.jboss.ejb3.Container;
+import org.jboss.ejb3.EJBContainer;
import org.jboss.logging.Logger;
import org.jboss.security.AuthenticationManager;
@@ -39,7 +40,7 @@
public Object createPerClass(Advisor advisor)
{
- Container container = (Container)advisor;
+ Container container = EJBContainer.getEJBContainer(advisor);
AuthenticationManager manager = container.getSecurityManager(AuthenticationManager.class);
log.debug("Creating interceptor with authentication manager '" + manager + "'" + (manager != null ? " (security domain '" + manager.getSecurityDomain() + "')" : ""));
//return new Ejb3AuthenticationInterceptor(manager, container);
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -47,7 +47,9 @@
CodeSource ejbCS = advisor.getClazz().getProtectionDomain().getCodeSource();
- String ejbName = ((EJBContainer)advisor).getEjbName();
+ // Must be a separate line (EJBContainer cannot be dereferenced)
+ EJBContainer container = EJBContainer.getEJBContainer(advisor);
+ String ejbName = container.getEjbName();
JaccAuthorizationInterceptor jai = new JaccAuthorizationInterceptor(ejbName, ejbCS);
jai.setRealmMapping(getSecurityManager(advisor));
return jai;
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccHelper.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccHelper.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/JaccHelper.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -303,7 +303,7 @@
jaccCtx.addDefaultMetaData(JaccAuthorizationInterceptor.JACC,
JaccAuthorizationInterceptor.CTX, jaccContextId);
- container.addClassMetaData(jaccCtx);
+ container.getAdvisor().addClassMetaData(jaccCtx);
}
public static void checkPermission(CodeSource ejbCS, EJBMethodPermission methodPerm,
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -28,7 +28,6 @@
import org.jboss.aop.Advisor;
import org.jboss.aop.advice.AspectFactory;
-import org.jboss.ejb3.Container;
import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.annotation.SecurityDomain;
import org.jboss.security.AuthenticationManager;
@@ -48,7 +47,8 @@
public Object createPerClass(Advisor advisor)
{
Object domain = null;
- Container container = (Container)advisor;
+ // Must be a separate line (EJBContainer cannot be dereferenced)
+ EJBContainer container = EJBContainer.getEJBContainer(advisor);
try
{
InitialContext ctx = container.getInitialContext();
@@ -69,7 +69,7 @@
if (manager == null) throw new RuntimeException("Unable to find Security Domain");
//return new RoleBasedAuthorizationInterceptor(manager, mapping, container);
CodeSource ejbCS = advisor.getClazz().getProtectionDomain().getCodeSource();
- String ejbName = ((EJBContainer)advisor).getEjbName();
+ String ejbName = container.getEjbName();
return new RoleBasedAuthorizationInterceptorv2(container, ejbCS, ejbName);
}
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -73,7 +73,7 @@
public Object createPerClass(Advisor advisor)
{
- EJBContainer container = (EJBContainer)advisor;
+ EJBContainer container = EJBContainer.getEJBContainer(advisor);
RunAsIdentity runAsIdentity = getRunAsIdentity(container);
/*if (runAsIdentity == null)
{
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -25,7 +25,6 @@
import java.util.Hashtable;
import java.util.List;
-import javax.ejb.EJBException;
import javax.ejb.Handle;
import javax.ejb.Timer;
import javax.ejb.TimerService;
@@ -41,7 +40,7 @@
import javax.management.ObjectName;
import javax.management.ReflectionException;
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.InvocationResponse;
@@ -49,8 +48,6 @@
import org.jboss.aop.util.MethodHashing;
import org.jboss.aop.util.PayloadKey;
import org.jboss.aspects.asynch.FutureHolder;
-import org.jboss.ejb.AllowedOperationsAssociation;
-import org.jboss.ejb.AllowedOperationsFlags;
import org.jboss.ejb3.BeanContext;
import org.jboss.ejb3.EJBContainerInvocation;
import org.jboss.ejb3.Ejb3Deployment;
@@ -60,13 +57,13 @@
import org.jboss.ejb3.annotation.RemoteBinding;
import org.jboss.ejb3.annotation.Service;
import org.jboss.ejb3.asynchronous.AsynchronousInterceptor;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.remoting.RemoteProxyFactory;
import org.jboss.ejb3.session.SessionContainer;
import org.jboss.ejb3.timerservice.TimedObjectInvoker;
import org.jboss.ejb3.timerservice.TimerServiceFactory;
import org.jboss.injection.Injector;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
/**
* @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
@@ -86,15 +83,16 @@
private static final Logger log = Logger.getLogger(ServiceContainer.class);
public ServiceContainer(MBeanServer server, ClassLoader cl, String beanClassName, String ejbName,
- AspectManager manager, Hashtable ctxProperties, InterceptorInfoRepository interceptorRepository,
- Ejb3Deployment deployment)
+ Domain domain, Hashtable ctxProperties,
+ Ejb3Deployment deployment, JBossServiceBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(cl, beanClassName, ejbName, manager, ctxProperties, interceptorRepository, deployment);
+ super(cl, beanClassName, ejbName, domain, ctxProperties, deployment, beanMetaData);
this.mbeanServer = server;
}
public void callTimeout(Timer timer) throws Exception
{
+ /*
Method timeout = callbackHandler.getTimeoutCallback();
if (timeout == null) throw new EJBException("No method has been annotated with @Timeout");
Object[] args = {timer};
@@ -113,6 +111,9 @@
{
AllowedOperationsAssociation.popInMethodFlag();
}
+ */
+ // FIXME: interceptors
+ throw new RuntimeException("NYI");
}
@Override
@@ -354,13 +355,13 @@
Thread.currentThread().setContextClassLoader(classloader);
long hash = MethodHashing.calculateHash(method);
- MethodInfo info = super.getMethodInfo(hash);
+ MethodInfo info = getAdvisor().getMethodInfo(hash);
if (info == null)
{
throw new RuntimeException("Could not resolve beanClass method from proxy call: " + method.toString());
}
EJBContainerInvocation nextInvocation = new EJBContainerInvocation(info);
- nextInvocation.setAdvisor(this);
+ nextInvocation.setAdvisor(getAdvisor());
nextInvocation.setArguments(args);
nextInvocation = populateInvocation(nextInvocation);
@@ -395,7 +396,7 @@
EJBContainerInvocation newSi = null;
MethodInvocation si = (MethodInvocation) invocation;
- MethodInfo info = super.getMethodInfo(si.getMethodHash());
+ MethodInfo info = getAdvisor().getMethodInfo(si.getMethodHash());
Method method = info.getUnadvisedMethod();
try
{
@@ -410,7 +411,7 @@
newSi = new EJBContainerInvocation(info);
newSi.setArguments(si.getArguments());
newSi.setMetaData(si.getMetaData());
- newSi.setAdvisor(this);
+ newSi.setAdvisor(getAdvisor());
newSi = populateInvocation(newSi);
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -26,7 +26,6 @@
import java.util.HashSet;
import java.util.Set;
-import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
import org.jboss.aop.advice.AdviceStack;
import org.jboss.ejb3.JBossProxy;
@@ -89,7 +88,7 @@
stackName = binding.interceptorStack();
}
AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
- Object[] args = {new ServiceRemoteProxy(container, stack.createInterceptors((Advisor) container, null), locator)};
+ Object[] args = {new ServiceRemoteProxy(container, stack.createInterceptors(container.getAdvisor(), null), locator)};
return proxyConstructor.newInstance(args);
}
catch (InstantiationException e)
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/BaseSessionProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/BaseSessionProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/BaseSessionProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -87,7 +87,7 @@
this.isClustered = container.isClustered();
}
- protected Container getContainer()
+ protected EJBContainer getContainer()
{
if (container == null)
{
Copied: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ClassProxyHack.java (from rev 69808, trunk/ejb3/src/main/org/jboss/ejb3/session/ClassProxyHack.java)
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ClassProxyHack.java (rev 0)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ClassProxyHack.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -0,0 +1,70 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.session;
+
+import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.aop.joinpoint.InvocationResponse;
+import org.jboss.aop.proxy.ClassProxy;
+import org.jboss.aop.proxy.ProxyMixin;
+
+/**
+ * Don't ask. Try observing a volcano eruption from 1 mile or outrun
+ * a lightning bolt. It's safer.
+ *
+ * org.jboss.aop.Dispatcher can handle only certain types.
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+class ClassProxyHack implements ClassProxy
+{
+ private SessionContainer container;
+
+ ClassProxyHack(SessionContainer container)
+ {
+ assert container != null : "container is null";
+
+ this.container = container;
+ }
+
+ public InvocationResponse _dynamicInvoke(Invocation invocation) throws Throwable
+ {
+ return container.dynamicInvoke(null, invocation);
+ }
+
+ public void setMixins(ProxyMixin[] mixins)
+ {
+ throw new RuntimeException("Go away, stop bothering me");
+ }
+
+ public InstanceAdvisor _getInstanceAdvisor()
+ {
+ throw new RuntimeException("Go away, stop bothering me");
+ }
+
+ public void _setInstanceAdvisor(InstanceAdvisor newAdvisor)
+ {
+ throw new RuntimeException("Go away, stop bothering me");
+ }
+
+}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/SessionContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/SessionContainer.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/SessionContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -34,8 +34,8 @@
import javax.ejb.LocalHome;
import javax.ejb.RemoteHome;
-import org.jboss.aop.AspectManager;
import org.jboss.aop.Dispatcher;
+import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.InvocationResponse;
@@ -52,11 +52,12 @@
import org.jboss.ejb3.annotation.LocalBinding;
import org.jboss.ejb3.annotation.RemoteBinding;
import org.jboss.ejb3.annotation.RemoteBindings;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.remoting.IsLocalInterceptor;
import org.jboss.ejb3.remoting.RemoteProxyFactory;
import org.jboss.ejb3.stateful.StatefulContainerInvocation;
+import org.jboss.ha.framework.server.HATarget;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
import org.jboss.serial.io.MarshalledObjectForLocalCalls;
/**
@@ -71,7 +72,7 @@
private static final Logger log = Logger.getLogger(SessionContainer.class);
protected ProxyDeployer proxyDeployer;
- protected Map clusterFamilies = new HashMap();
+ private Map<String, HATarget> clusterFamilies;
public class InvokedMethod
{
@@ -137,11 +138,10 @@
protected ThreadLocalStack<InvokedMethod> invokedMethod = new ThreadLocalStack<InvokedMethod>();
- public SessionContainer(ClassLoader cl, String beanClassName, String ejbName, AspectManager manager,
- Hashtable ctxProperties, InterceptorInfoRepository interceptorRepository,
- Ejb3Deployment deployment)
+ public SessionContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossSessionBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(Ejb3Module.BASE_EJB3_JMX_NAME + ",name=" + ejbName, manager, cl, beanClassName, ejbName, ctxProperties, interceptorRepository, deployment);
+ super(Ejb3Module.BASE_EJB3_JMX_NAME + ",name=" + ejbName, domain, cl, beanClassName, ejbName, ctxProperties, deployment, beanMetaData);
proxyDeployer = new ProxyDeployer(this);
}
@@ -161,6 +161,8 @@
*/
protected abstract RemoteProxyFactory createRemoteProxyFactory(RemoteBinding binding);
+ public abstract InvocationResponse dynamicInvoke(Object target, Invocation invocation) throws Throwable;
+
public Class<?> getInvokedBusinessInterface()
{
InvokedMethod method = invokedMethod.get();
@@ -183,6 +185,12 @@
throw new IllegalStateException("Unable to find geInvokedBusinessInterface()");
}
+ protected JBossSessionBeanMetaData getMetaData()
+ {
+ // TODO: resolve this cast using generics on EJBContainer
+ return (JBossSessionBeanMetaData) getXml();
+ }
+
@Override
public void instantiated()
{
@@ -206,12 +214,27 @@
{
super.start();
// So that Remoting layer can reference this container easily.
- Dispatcher.singleton.registerTarget(getObjectName().getCanonicalName(), this);
+ Dispatcher.singleton.registerTarget(getObjectName().getCanonicalName(), new ClassProxyHack(this));
proxyDeployer.start();
}
- public Map getClusterFamilies()
+ /**
+ * This gets called by replicants manager interceptor factory
+ * during the initialization of the bean container (during construction of EJBContainer).
+ * So we have detached construction here.
+ *
+ * @return the cluster families, never null
+ */
+ public Map<String, HATarget> getClusterFamilies()
{
+ if(clusterFamilies != null)
+ return clusterFamilies;
+
+ synchronized (this)
+ {
+ if(clusterFamilies == null)
+ clusterFamilies = new HashMap<String, HATarget>();
+ }
return clusterFamilies;
}
@@ -236,6 +259,45 @@
super.stop();
}
+ @Override
+ public List<Method> getVirtualMethods()
+ {
+ List<Method> virtualMethods = new ArrayList<Method>();
+ try
+ {
+ RemoteHome home = getAnnotation(RemoteHome.class);
+ if (home != null)
+ {
+ Method[] declaredMethods = home.value().getMethods();
+ for(Method declaredMethod : declaredMethods)
+ virtualMethods.add(declaredMethod);
+
+ declaredMethods = javax.ejb.EJBObject.class.getMethods();
+ for(Method declaredMethod : declaredMethods)
+ virtualMethods.add(declaredMethod);
+ }
+
+ LocalHome localHome = getAnnotation(LocalHome.class);
+ if (localHome != null)
+ {
+ Method[] declaredMethods = localHome.value().getMethods();
+ for(Method declaredMethod : declaredMethods)
+ virtualMethods.add(declaredMethod);
+
+ declaredMethods = javax.ejb.EJBLocalObject.class.getMethods();
+ for(Method declaredMethod : declaredMethods)
+ virtualMethods.add(declaredMethod);
+ }
+ }
+ catch (SecurityException e)
+ {
+ // TODO: privileged?
+ throw new RuntimeException(e);
+ }
+ return virtualMethods;
+ }
+
+ /*
protected void createMethodMap()
{
super.createMethodMap();
@@ -282,6 +344,7 @@
throw new RuntimeException(e);
}
}
+ */
protected boolean isHomeMethod(Method method)
{
@@ -357,7 +420,7 @@
try
{
long hash = MethodHashing.calculateHash(method);
- MethodInfo info = super.getMethodInfo(hash);
+ MethodInfo info = getAdvisor().getMethodInfo(hash);
if (info == null)
{
throw new RuntimeException(
@@ -378,7 +441,7 @@
// FIXME: Ahem, stateful container invocation works on all.... (violating contract though)
EJBContainerInvocation nextInvocation = new StatefulContainerInvocation(info, id);
- nextInvocation.setAdvisor(this);
+ nextInvocation.setAdvisor(getAdvisor());
nextInvocation.setArguments(args);
// allow a container to supplement information into an invocation
@@ -524,4 +587,4 @@
}
abstract protected void removeHandle(Handle handle) throws Exception;
-}
\ No newline at end of file
+}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -28,10 +28,11 @@
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;
+
import javax.ejb.EJBContext;
import javax.persistence.EntityManager;
+
import org.jboss.aop.metadata.SimpleMetaData;
-import org.jboss.ejb3.Container;
import org.jboss.ejb3.interceptor.InterceptorInfo;
import org.jboss.ejb3.session.SessionContainer;
@@ -308,11 +309,13 @@
getDelegate().extractBeanAndInterceptors();
}
+ /*
@Override
public void initialiseInterceptorInstances()
{
getDelegate().initialiseInterceptorInstances();
}
+ */
@Override
public EJBContext getEJBContext()
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulBeanContext.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -84,7 +84,10 @@
if (isClustered && container == null)
container = (StatefulContainer)Ejb3Registry.getClusterContainer(containerClusterUid);
-
+
+ if(container == null)
+ throw new IllegalStateException("Can't find container " + containerGuid);
+
StatefulBeanContext context = new StatefulBeanContext(container, beanMO);
context.id = this.id;
context.metadata = this.metadata;
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -26,7 +26,6 @@
import javax.naming.NamingException;
-import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
import org.jboss.aop.Dispatcher;
import org.jboss.aop.advice.AdviceStack;
@@ -159,7 +158,7 @@
}
AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
String partitionName = ((SessionContainer) getContainer()).getPartitionName();
- return constructProxy(new StatefulClusteredProxy(getContainer(), stack.createInterceptors((Advisor) getContainer(), null),
+ return constructProxy(new StatefulClusteredProxy(getContainer(), stack.createInterceptors(getContainer().getAdvisor(), null),
wrapper, lbPolicy, partitionName));
}
@@ -181,7 +180,7 @@
protected StatefulHandleImpl getHandle()
{
StatefulHandleImpl handle = new StatefulHandleImpl();
- RemoteBinding remoteBinding = (RemoteBinding)((Advisor)getContainer()).resolveAnnotation(RemoteBinding.class);
+ RemoteBinding remoteBinding = (RemoteBinding) getContainer().resolveAnnotation(RemoteBinding.class);
if (remoteBinding != null)
handle.jndiName = remoteBinding.jndiBinding();
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 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -25,11 +25,11 @@
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.List;
import java.util.Map;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
import javax.ejb.EJBHome;
import javax.ejb.EJBObject;
import javax.ejb.Handle;
@@ -40,9 +40,12 @@
import javax.ejb.RemoteHome;
import javax.ejb.TimerService;
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
+import org.jboss.aop.InstanceAdvisor;
import org.jboss.aop.MethodInfo;
import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.advice.PerVmAdvice;
+import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.InvocationResponse;
import org.jboss.aop.util.MethodHashing;
@@ -58,11 +61,13 @@
import org.jboss.ejb3.annotation.LocalBinding;
import org.jboss.ejb3.annotation.RemoteBinding;
import org.jboss.ejb3.annotation.RemoteBindings;
+import org.jboss.ejb3.aop.LifeCycleInvocation;
import org.jboss.ejb3.cache.CacheFactoryRegistry;
import org.jboss.ejb3.cache.Ejb3CacheFactory;
import org.jboss.ejb3.cache.StatefulCache;
import org.jboss.ejb3.cache.StatefulObjectFactory;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
+import org.jboss.ejb3.interceptors.aop.InterceptorsFactory;
+import org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor;
import org.jboss.ejb3.proxy.EJBMetaDataImpl;
import org.jboss.ejb3.proxy.handle.HomeHandleImpl;
import org.jboss.ejb3.remoting.RemoteProxyFactory;
@@ -70,6 +75,7 @@
import org.jboss.injection.Injector;
import org.jboss.injection.JndiPropertyInjector;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
/**
* Comment
@@ -84,11 +90,10 @@
protected StatefulCache cache;
private StatefulDelegateWrapper mbean = new StatefulDelegateWrapper(this);
- public StatefulContainer(ClassLoader cl, String beanClassName, String ejbName, AspectManager manager,
- Hashtable ctxProperties, InterceptorInfoRepository interceptorRepository,
- Ejb3Deployment deployment)
+ public StatefulContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossSessionBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(cl, beanClassName, ejbName, manager, ctxProperties, interceptorRepository, deployment);
+ super(cl, beanClassName, ejbName, domain, ctxProperties, deployment, beanMetaData);
}
public StatefulBeanContext create(Class<?>[] initTypes, Object[] initValues)
@@ -197,7 +202,7 @@
try
{
long hash = MethodHashing.calculateHash(method);
- MethodInfo info = super.getMethodInfo(hash);
+ MethodInfo info = getAdvisor().getMethodInfo(hash);
if (info == null)
{
throw new RuntimeException(
@@ -228,7 +233,7 @@
try
{
long hash = MethodHashing.calculateHash(method);
- MethodInfo info = super.getMethodInfo(hash);
+ MethodInfo info = getAdvisor().getMethodInfo(hash);
if (info == null)
{
throw new RuntimeException(
@@ -253,7 +258,7 @@
}
StatefulContainerInvocation nextInvocation = new StatefulContainerInvocation(info, id);
- nextInvocation.setAdvisor(this);
+ nextInvocation.setAdvisor(getAdvisor());
nextInvocation.setArguments(args);
ProxyUtils.addLocalAsynchronousInfo(nextInvocation, provider);
@@ -329,10 +334,10 @@
{
Thread.currentThread().setContextClassLoader(classloader);
StatefulRemoteInvocation si = (StatefulRemoteInvocation) invocation;
- MethodInfo info = super.getMethodInfo(si.getMethodHash());
+ MethodInfo info = getAdvisor().getMethodInfo(si.getMethodHash());
if (info == null)
{
- throw new RuntimeException("Could not resolve beanClass method from proxy call");
+ throw new RuntimeException("Could not resolve beanClass method from proxy call " + invocation);
}
InvocationResponse response = null;
@@ -356,7 +361,7 @@
if (unadvisedMethod.isBridge())
{
unadvisedMethod = this.getNonBridgeMethod(unadvisedMethod);
- info = super.getMethodInfo(MethodHashing.calculateHash(unadvisedMethod));
+ info = super.getMethodInfo(unadvisedMethod);
}
if (si.getId() == null)
@@ -371,7 +376,7 @@
newSi = new StatefulContainerInvocation(info, newId);
newSi.setArguments(si.getArguments());
newSi.setMetaData(si.getMetaData());
- newSi.setAdvisor(this);
+ newSi.setAdvisor(getAdvisor());
Object rtn = null;
@@ -450,15 +455,44 @@
}
}
}
- callbackHandler.postActivate(beanContext);
+ // FIXME: this is just a hack, use an interceptor stack
+ try
+ {
+ List<Interceptor> interceptors = new ArrayList<Interceptor>(InterceptorsFactory.getLifeCycleInterceptors((InstanceAdvisor) getAdvisor(), PostActivate.class));
+ interceptors.add(0, PerVmAdvice.generateInterceptor(null, new InvocationContextInterceptor(), "setup"));
+
+ LifeCycleInvocation invocation = new LifeCycleInvocation(interceptors.toArray(new Interceptor[0]));
+ invocation.setAdvisor(getAdvisor());
+ invocation.setTargetObject(beanContext.getInstance());
+ invocation.invokeNext();
+ }
+ catch(Throwable t)
+ {
+ throw new RuntimeException(t);
+ }
}
@Override
public void invokePrePassivate(BeanContext beanContext)
{
- callbackHandler.prePassivate(beanContext);
+ // FIXME: this is just a hack, use an interceptor stack
+ try
+ {
+ List<Interceptor> interceptors = new ArrayList<Interceptor>(InterceptorsFactory.getLifeCycleInterceptors((InstanceAdvisor) getAdvisor(), PrePassivate.class));
+ interceptors.add(0, PerVmAdvice.generateInterceptor(null, new InvocationContextInterceptor(), "setup"));
+
+ LifeCycleInvocation invocation = new LifeCycleInvocation(interceptors.toArray(new Interceptor[0]));
+ invocation.setAdvisor(getAdvisor());
+ invocation.setTargetObject(beanContext.getInstance());
+ invocation.invokeNext();
+ }
+ catch(Throwable t)
+ {
+ throw new RuntimeException(t);
+ }
}
+ /*
@Override
protected Class[] getHandledCallbacks()
{
@@ -466,6 +500,7 @@
{PostConstruct.class, PreDestroy.class, PostActivate.class,
PrePassivate.class};
}
+ */
public void invokeInit(Object bean, Class[] initParameterTypes,
Object[] initParameterValues)
@@ -695,7 +730,7 @@
public boolean isClustered()
{
- return hasAnnotation(getBeanClass(), Clustered.class.getName());
+ return isAnnotationPresent(Clustered.class);
}
protected InvocationResponse invokeHomeMethod(MethodInfo info,
@@ -873,7 +908,7 @@
newStatefulInvocation.setArguments(statefulInvocation.getArguments());
newStatefulInvocation.setMetaData(statefulInvocation.getMetaData());
- newStatefulInvocation.setAdvisor(this);
+ newStatefulInvocation.setAdvisor(getAdvisor());
return newStatefulInvocation;
}
@@ -896,7 +931,7 @@
newStatefulInvocation.setArguments(statefulInvocation.getArguments());
newStatefulInvocation.setMetaData(statefulInvocation.getMetaData());
- newStatefulInvocation.setAdvisor(this);
+ newStatefulInvocation.setAdvisor(getAdvisor());
return newStatefulInvocation;
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulInstanceInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulInstanceInterceptor.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulInstanceInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -27,11 +27,11 @@
import javax.ejb.ConcurrentAccessException;
import javax.ejb.EJBException;
-import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.MethodInvocation;
import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.annotation.SerializedConcurrentAccess;
+import org.jboss.ejb3.aop.AbstractInterceptor;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
import org.jboss.metadata.ejb.spec.ApplicationExceptionMetaData;
@@ -43,7 +43,7 @@
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @version $Revision$
*/
-public class StatefulInstanceInterceptor implements Interceptor
+public class StatefulInstanceInterceptor extends AbstractInterceptor
{
private static final Logger log = Logger.getLogger(StatefulInstanceInterceptor.class);
@@ -60,7 +60,7 @@
{
StatefulContainerInvocation ejb = (StatefulContainerInvocation) invocation;
Object id = ejb.getId();
- StatefulContainer container = (StatefulContainer) ejb.getAdvisor();
+ StatefulContainer container = getEJBContainer(invocation);
StatefulBeanContext target = container.getCache().get(id);
boolean block = container.getAnnotation(SerializedConcurrentAccess.class) != null;
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -24,18 +24,16 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.rmi.dgc.VMID;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
-import java.rmi.dgc.VMID;
-
import javax.ejb.LocalHome;
import javax.naming.NamingException;
-import org.jboss.aop.Advisor;
-import org.jboss.ejb3.Ejb3Registry;
import org.jboss.ejb3.EJBContainer;
+import org.jboss.ejb3.Ejb3Registry;
import org.jboss.ejb3.JBossProxy;
import org.jboss.ejb3.ProxyFactoryHelper;
import org.jboss.ejb3.annotation.LocalBinding;
@@ -164,7 +162,7 @@
protected StatefulHandleImpl getHandle()
{
StatefulHandleImpl handle = new StatefulHandleImpl();
- LocalBinding remoteBinding = (LocalBinding) ((Advisor)getContainer()).resolveAnnotation(LocalBinding.class);
+ LocalBinding remoteBinding = (LocalBinding) getContainer().resolveAnnotation(LocalBinding.class);
if (remoteBinding != null)
handle.jndiName = remoteBinding.jndiBinding();
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -29,7 +29,6 @@
import javax.ejb.RemoteHome;
import javax.naming.NamingException;
-import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
import org.jboss.aop.Dispatcher;
import org.jboss.aop.advice.AdviceStack;
@@ -176,7 +175,7 @@
}
AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
if (stack == null) throw new RuntimeException("unable to find interceptor stack: " + stackName);
- StatefulHomeRemoteProxy proxy = new StatefulHomeRemoteProxy(getContainer(), stack.createInterceptors((Advisor) getContainer(), null), locator);
+ StatefulHomeRemoteProxy proxy = new StatefulHomeRemoteProxy(getContainer(), stack.createInterceptors(getContainer().getAdvisor(), null), locator);
setEjb21Objects(proxy);
Class[] intfs = {homeInterface};
@@ -187,6 +186,7 @@
throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
}
}
+
public Object createProxy()
{
String stackName = "StatefulSessionClientInterceptors";
@@ -196,7 +196,7 @@
}
AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
if (stack == null) throw new RuntimeException("unable to find interceptor stack: " + stackName);
- StatefulRemoteProxy proxy = new StatefulRemoteProxy(getContainer(), stack.createInterceptors((Advisor) getContainer(), null), locator);
+ StatefulRemoteProxy proxy = new StatefulRemoteProxy(getContainer(), stack.createInterceptors(getContainer().getAdvisor(), null), locator);
setEjb21Objects(proxy);
return constructProxy(proxy);
@@ -218,7 +218,7 @@
stackName = binding.interceptorStack();
}
AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
- StatefulRemoteProxy proxy = new StatefulRemoteProxy(getContainer(), stack.createInterceptors((Advisor) getContainer(), null), locator, id);
+ StatefulRemoteProxy proxy = new StatefulRemoteProxy(getContainer(), stack.createInterceptors(getContainer().getAdvisor(), null), locator, id);
setEjb21Objects(proxy);
return constructProxy(proxy);
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 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -22,15 +22,15 @@
package org.jboss.ejb3.stateful;
import java.lang.reflect.Method;
+import javax.transaction.RollbackException;
import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
import javax.transaction.Transaction;
-import javax.transaction.SystemException;
-import javax.transaction.RollbackException;
-import org.jboss.aop.advice.Interceptor;
+
import org.jboss.aop.joinpoint.MethodInvocation;
import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.ejb3.aop.AbstractInterceptor;
import org.jboss.ejb3.tx.TxUtil;
-import org.jboss.ejb3.BeanContext;
import org.jboss.logging.Logger;
import org.jboss.tm.TxUtils;
@@ -39,7 +39,7 @@
*
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
*/
-public class StatefulRemoveInterceptor implements Interceptor
+public class StatefulRemoveInterceptor extends AbstractInterceptor
{
private static final Logger log = Logger.getLogger(StatefulRemoveInterceptor.class);
protected boolean retainIfException;
@@ -143,7 +143,7 @@
if (ctx == null || ctx.isDiscarded() || ctx.isRemoved()) return;
Object id = ejb.getId();
- StatefulContainer container = (StatefulContainer) ejb.getAdvisor();
+ StatefulContainer container = getEJBContainer(invocation);
Transaction tx = null;
try
{
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -24,7 +24,6 @@
import java.util.ArrayList;
import java.util.List;
-import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
import org.jboss.aop.advice.AdviceStack;
import org.jboss.aspects.remoting.FamilyWrapper;
@@ -137,43 +136,22 @@
public Object createProxy()
{
-// try
+ Object containerId = getContainer().getObjectName().getCanonicalName();
+ String stackName = "ClusteredStatelessSessionClientInterceptors";
+ if (binding.interceptorStack() != null && !binding.interceptorStack().equals(""))
{
- Object containerId = getContainer().getObjectName().getCanonicalName();
- String stackName = "ClusteredStatelessSessionClientInterceptors";
- if (binding.interceptorStack() != null && !binding.interceptorStack().equals(""))
- {
- stackName = binding.interceptorStack();
- }
- AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
- /*
- Object[] args = {new StatelessClusteredProxy(containerId, stack.createInterceptors((Advisor) container, null), wrapper, lbPolicy)};
- return proxyConstructor.newInstance(args);
- */
- String partitionName = ((StatelessContainer) getContainer()).getPartitionName();
-
- proxy = constructProxy(new StatelessClusteredProxy(getContainer(), stack.createInterceptors((Advisor) getContainer(), null),
- wrapper, lbPolicy, partitionName));
- return proxy;
+ stackName = binding.interceptorStack();
}
+ AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
/*
- catch (InstantiationException e)
- {
- throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
- }
- catch (IllegalAccessException e)
- {
- throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
- }
- catch (IllegalArgumentException e)
- {
- throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
- }
- catch (InvocationTargetException e)
- {
- throw new RuntimeException(e.getTargetException()); //To change body of catch statement use Options | File Templates.
- }
+ Object[] args = {new StatelessClusteredProxy(containerId, stack.createInterceptors((Advisor) container, null), wrapper, lbPolicy)};
+ return proxyConstructor.newInstance(args);
*/
+ String partitionName = ((StatelessContainer) getContainer()).getPartitionName();
+
+ proxy = constructProxy(new StatelessClusteredProxy(getContainer(), stack.createInterceptors(getContainer().getAdvisor(), null),
+ wrapper, lbPolicy, partitionName));
+ return proxy;
}
protected StatelessHandleImpl getHandle()
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -32,7 +32,7 @@
import javax.ejb.TimerService;
import javax.naming.NamingException;
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.InvocationResponse;
@@ -51,12 +51,13 @@
import org.jboss.ejb3.annotation.LocalBinding;
import org.jboss.ejb3.annotation.RemoteBinding;
import org.jboss.ejb3.annotation.RemoteBindings;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.remoting.RemoteProxyFactory;
import org.jboss.ejb3.session.SessionContainer;
import org.jboss.ejb3.timerservice.TimedObjectInvoker;
import org.jboss.ejb3.timerservice.TimerServiceFactory;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
import org.jboss.proxy.ejb.handle.HomeHandleImpl;
import org.jboss.proxy.ejb.handle.StatelessHandleImpl;
@@ -72,13 +73,15 @@
private static final Logger log = Logger.getLogger(StatelessContainer.class);
protected TimerService timerService;
+ private Method timeout;
private StatelessDelegateWrapper mbean = new StatelessDelegateWrapper(this);
- public StatelessContainer(ClassLoader cl, String beanClassName, String ejbName, AspectManager manager,
- Hashtable ctxProperties, InterceptorInfoRepository interceptorRepository,
- Ejb3Deployment deployment)
+ public StatelessContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossSessionBeanMetaData beanMetaData) throws ClassNotFoundException
{
- super(cl, beanClassName, ejbName, manager, ctxProperties, interceptorRepository, deployment);
+ super(cl, beanClassName, ejbName, domain, ctxProperties, deployment, beanMetaData);
+
+ initializeTimeout();
}
@Override
@@ -117,6 +120,15 @@
return mbean;
}
+ private void initializeTimeout()
+ {
+ JBossSessionBeanMetaData metaData = getMetaData();
+ NamedMethodMetaData timeoutMethodMetaData = null;
+ if(metaData != null)
+ timeoutMethodMetaData = metaData.getTimeoutMethod();
+ this.timeout = getTimeoutCallback(timeoutMethodMetaData, getBeanClass());
+ }
+
public void start() throws Exception
{
try
@@ -165,7 +177,6 @@
public void callTimeout(Timer timer) throws Exception
{
- Method timeout = callbackHandler.getTimeoutCallback();
if (timeout == null) throw new EJBException("No method has been annotated with @Timeout");
Object[] args = {timer};
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
@@ -174,9 +185,9 @@
AllowedOperationsAssociation.pushInMethodFlag(AllowedOperationsFlags.IN_EJB_TIMEOUT);
try
{
- MethodInfo info = super.getMethodInfo(callbackHandler.getTimeoutCalllbackHash());
+ MethodInfo info = super.getMethodInfo(timeout);
EJBContainerInvocation nextInvocation = new EJBContainerInvocation(info);
- nextInvocation.setAdvisor(this);
+ nextInvocation.setAdvisor(getAdvisor());
nextInvocation.setArguments(args);
nextInvocation.invokeNext();
}
@@ -241,7 +252,7 @@
}
EJBContainerInvocation<StatelessContainer, StatelessBeanContext> nextInvocation = new EJBContainerInvocation<StatelessContainer, StatelessBeanContext>(info);
- nextInvocation.setAdvisor(this);
+ nextInvocation.setAdvisor(getAdvisor());
nextInvocation.setArguments(args);
nextInvocation.setContextCallback(callback);
@@ -277,10 +288,10 @@
{
Thread.currentThread().setContextClassLoader(classloader);
MethodInvocation si = (MethodInvocation) invocation;
- MethodInfo info = super.getMethodInfo(si.getMethodHash());
+ MethodInfo info = getAdvisor().getMethodInfo(si.getMethodHash());
if (info == null)
{
- throw new RuntimeException("Could not resolve beanClass method from proxy call");
+ throw new RuntimeException("Could not resolve beanClass method from proxy call " + invocation);
}
Method unadvisedMethod = info.getUnadvisedMethod();
@@ -307,7 +318,7 @@
newSi = new EJBContainerInvocation(info);
newSi.setArguments(si.getArguments());
newSi.setMetaData(si.getMetaData());
- newSi.setAdvisor(this);
+ newSi.setAdvisor(getAdvisor());
try
{
rtn = newSi.invokeNext();
@@ -341,7 +352,6 @@
{
Thread.currentThread().setContextClassLoader(oldLoader);
}
-
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -21,25 +21,27 @@
*/
package org.jboss.ejb3.stateless;
-import org.jboss.aop.advice.Interceptor;
+import java.rmi.RemoteException;
+
+import javax.ejb.EJBException;
+
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.MethodInvocation;
-import org.jboss.ejb3.*;
+import org.jboss.ejb3.BeanContext;
+import org.jboss.ejb3.EJBContainer;
+import org.jboss.ejb3.EJBContainerInvocation;
+import org.jboss.ejb3.aop.AbstractInterceptor;
import org.jboss.ejb3.pool.Pool;
import org.jboss.ejb3.stateful.StatefulRemoveInterceptor;
-import org.jboss.ejb3.tx.Ejb3TxPolicy;
import org.jboss.logging.Logger;
-import javax.ejb.EJBException;
-import java.rmi.RemoteException;
-
/**
* Comment
*
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @version $Revision$
*/
-public class StatelessInstanceInterceptor implements Interceptor
+public class StatelessInstanceInterceptor extends AbstractInterceptor
{
private static final Logger log = Logger.getLogger(StatelessInstanceInterceptor.class);
@@ -51,7 +53,7 @@
public Object invoke(Invocation invocation) throws Throwable
{
EJBContainerInvocation ejb = (EJBContainerInvocation) invocation;
- EJBContainer container = (EJBContainer)ejb.getAdvisor();
+ EJBContainer container = getEJBContainer(invocation);
Pool pool = container.getPool();
BeanContext<?> ctx = pool.get();
ejb.setTargetObject(ctx.getInstance());
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -27,7 +27,6 @@
import javax.ejb.LocalHome;
-import org.jboss.aop.Advisor;
import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.JBossProxy;
import org.jboss.ejb3.ProxyFactoryHelper;
@@ -157,7 +156,7 @@
protected StatelessHandleImpl getHandle()
{
StatelessHandleImpl handle = new StatelessHandleImpl();
- LocalBinding remoteBinding = (LocalBinding) ((Advisor)getContainer()).resolveAnnotation(LocalBinding.class);
+ LocalBinding remoteBinding = (LocalBinding) getContainer().resolveAnnotation(LocalBinding.class);
if (remoteBinding != null)
handle.jndiName = remoteBinding.jndiBinding();
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -28,7 +28,6 @@
import javax.ejb.RemoteHome;
import javax.naming.NamingException;
-import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
import org.jboss.aop.advice.AdviceStack;
import org.jboss.ejb3.EJBContainer;
@@ -153,7 +152,7 @@
protected StatelessHandleImpl getHandle()
{
StatelessHandleImpl handle = new StatelessHandleImpl();
- RemoteBinding remoteBinding = (RemoteBinding) ((Advisor)getContainer()).resolveAnnotation(RemoteBinding.class);
+ RemoteBinding remoteBinding = (RemoteBinding) getContainer().resolveAnnotation(RemoteBinding.class);
if (remoteBinding != null)
handle.jndiName = remoteBinding.jndiBinding() ;
@@ -171,7 +170,7 @@
}
AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
StatelessRemoteProxy proxy = new StatelessRemoteProxy(getContainer(),
- stack.createInterceptors((Advisor) getContainer(), null), locator);
+ stack.createInterceptors(getContainer().getAdvisor(), null), locator);
setEjb21Objects(proxy);
Class[] interfaces = {homeInterface};
return java.lang.reflect.Proxy.newProxyInstance(getContainer().getBeanClass().getClassLoader(), interfaces, proxy);
@@ -184,41 +183,16 @@
public Object createProxy()
{
-// try
+ String stackName = "StatelessSessionClientInterceptors";
+ if (binding.interceptorStack() != null && !binding.interceptorStack().equals(""))
{
- String stackName = "StatelessSessionClientInterceptors";
- if (binding.interceptorStack() != null && !binding.interceptorStack().equals(""))
- {
- stackName = binding.interceptorStack();
- }
- AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
- StatelessRemoteProxy proxy = new StatelessRemoteProxy(getContainer(),
- stack.createInterceptors((Advisor) getContainer(), null), locator);
- setEjb21Objects(proxy);
- /*
- Object[] args = {proxy};
- return proxyConstructor.newInstance(args);
- */
- return constructProxy(proxy);
+ stackName = binding.interceptorStack();
}
- /*
- catch (InstantiationException e)
- {
- throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
- }
- catch (IllegalAccessException e)
- {
- throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
- }
- catch (IllegalArgumentException e)
- {
- throw new RuntimeException(e); //To change body of catch statement use Options | File Templates.
- }
- catch (InvocationTargetException e)
- {
- throw new RuntimeException(e.getTargetException()); //To change body of catch statement use Options | File Templates.
- }
- */
+ AdviceStack stack = AspectManager.instance().getAdviceStack(stackName);
+ StatelessRemoteProxy proxy = new StatelessRemoteProxy(getContainer(),
+ stack.createInterceptors(getContainer().getAdvisor(), null), locator);
+ setEjb21Objects(proxy);
+ return constructProxy(proxy);
}
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/BMTInterceptor.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/BMTInterceptor.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/BMTInterceptor.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -26,11 +26,12 @@
import javax.transaction.SystemException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
-import org.jboss.aop.advice.Interceptor;
+
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.util.PayloadKey;
import org.jboss.ejb3.Container;
import org.jboss.ejb3.EJBContainerInvocation;
+import org.jboss.ejb3.aop.AbstractInterceptor;
import org.jboss.ejb3.stateful.StatefulBeanContext;
import org.jboss.logging.Logger;
import org.jboss.tm.TxUtils;
@@ -42,7 +43,7 @@
* @author <a href="mailto:osh at sparre.dk">Ole Husgaard</a>
* @version $Revision$
*/
-public class BMTInterceptor implements Interceptor
+public class BMTInterceptor extends AbstractInterceptor
{
private TransactionManager tm;
private boolean isStateless;
@@ -64,7 +65,7 @@
public Object handleStateless(Invocation invocation) throws Throwable
{
- Container container = (Container)invocation.getAdvisor();
+ Container container = getEJBContainer(invocation);
boolean exceptionThrown = false;
try
{
@@ -92,7 +93,7 @@
public Object handleStateful(Invocation invocation) throws Throwable
{
EJBContainerInvocation ejb = (EJBContainerInvocation)invocation;
- Container container = (Container)invocation.getAdvisor();
+ Container container = getEJBContainer(invocation);
StatefulBeanContext ctx = (StatefulBeanContext)ejb.getBeanContext();
Transaction tx = (Transaction)ctx.getMetaData().getMetaData("TX", "TX");
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxInterceptorFactory.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxInterceptorFactory.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -30,6 +30,7 @@
import org.jboss.aop.Advisor;
import org.jboss.aop.joinpoint.Joinpoint;
import org.jboss.aop.joinpoint.MethodJoinpoint;
+import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.annotation.TransactionTimeout;
import org.jboss.ejb3.stateful.StatefulContainer;
import org.jboss.logging.Logger;
@@ -87,7 +88,11 @@
// We have to do this until AOP supports matching based on annotation attributes
TransactionManagementType type = TxUtil.getTransactionManagementType(advisor);
if (type == TransactionManagementType.BEAN)
- return new BMTInterceptor(TxUtil.getTransactionManager(), !(advisor instanceof StatefulContainer));
+ {
+ // Must be a separate line (EJBContainer cannot be dereferenced)
+ EJBContainer container = EJBContainer.getEJBContainer(advisor);
+ return new BMTInterceptor(TxUtil.getTransactionManager(), !(container instanceof StatefulContainer));
+ }
Method method = ((MethodJoinpoint) jp).getMethod();
int timeout = resolveTransactionTimeout(advisor, method);
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxUtil.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxUtil.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/tx/TxUtil.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -31,9 +31,11 @@
import org.jboss.aop.Advisor;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.ejb3.Container;
import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.InitialContextFactory;
import org.jboss.ejb3.annotation.impl.ApplicationExceptionImpl;
+import org.jboss.ejb3.aop.AbstractInterceptor;
import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
import org.jboss.metadata.ejb.spec.ApplicationExceptionMetaData;
import org.jboss.metadata.ejb.spec.ApplicationExceptionsMetaData;
@@ -62,9 +64,20 @@
}
}
- public static TransactionManagementType getTransactionManagementType(Advisor c)
+ public static TransactionManagementType getTransactionManagementType(Advisor advisor)
{
- TransactionManagement transactionManagement = (TransactionManagement) c.resolveAnnotation(TransactionManagement.class);
+ return getTransactionManagementType(EJBContainer.getEJBContainer(advisor));
+ }
+
+ @Deprecated
+ public static TransactionManagementType getTransactionManagementType(Container container)
+ {
+ return getTransactionManagementType((EJBContainer) container);
+ }
+
+ public static TransactionManagementType getTransactionManagementType(EJBContainer container)
+ {
+ TransactionManagement transactionManagement = (TransactionManagement) container.getAnnotation(TransactionManagement.class);
if (transactionManagement == null) return TransactionManagementType.CONTAINER;
return transactionManagement.value();
}
@@ -72,7 +85,7 @@
public static ApplicationException getApplicationException(Class<?> exceptionClass, Invocation invocation)
{
MethodInvocation ejb = (MethodInvocation) invocation;
- EJBContainer container = (EJBContainer) ejb.getAdvisor();
+ EJBContainer container = AbstractInterceptor.getEJBContainer(invocation);
// TODO: Wolf: refactor onto a unified metadata view
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionFieldInjector.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionFieldInjector.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionFieldInjector.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -22,9 +22,10 @@
package org.jboss.injection;
import java.lang.reflect.Field;
+
import javax.ejb.TransactionManagementType;
import javax.transaction.UserTransaction;
-import org.jboss.aop.Advisor;
+
import org.jboss.ejb3.BeanContext;
import org.jboss.ejb3.Container;
import org.jboss.ejb3.tx.TxUtil;
@@ -45,7 +46,7 @@
{
if (container instanceof Container)
{
- TransactionManagementType type = TxUtil.getTransactionManagementType(((Advisor) container));
+ TransactionManagementType type = TxUtil.getTransactionManagementType((Container) container);
if (type != TransactionManagementType.BEAN)
throw new IllegalStateException("Container " + ((Container) container).getEjbName() + ": it is illegal to inject UserTransaction into a CMT bean");
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionMethodInjector.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionMethodInjector.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionMethodInjector.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -21,17 +21,17 @@
*/
package org.jboss.injection;
-import org.jboss.aop.Advisor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.ejb.TransactionManagementType;
+import javax.transaction.UserTransaction;
+
import org.jboss.ejb3.BeanContext;
import org.jboss.ejb3.Container;
import org.jboss.ejb3.tx.TxUtil;
import org.jboss.ejb3.tx.UserTransactionImpl;
-import javax.ejb.TransactionManagementType;
-import javax.transaction.UserTransaction;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
/**
* Comment
*
@@ -47,7 +47,7 @@
{
if (container instanceof Container)
{
- TransactionManagementType type = TxUtil.getTransactionManagementType(((Advisor) container));
+ TransactionManagementType type = TxUtil.getTransactionManagementType(((Container) container));
if (type != TransactionManagementType.BEAN)
throw new IllegalStateException("Container " + ((Container) container).getEjbName() + ": it is illegal to inject UserTransaction into a CMT bean");
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionPropertyInjector.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionPropertyInjector.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/injection/UserTransactionPropertyInjector.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -24,7 +24,6 @@
import javax.ejb.TransactionManagementType;
import javax.transaction.UserTransaction;
-import org.jboss.aop.Advisor;
import org.jboss.ejb3.Container;
import org.jboss.ejb3.tx.TxUtil;
import org.jboss.ejb3.tx.UserTransactionImpl;
@@ -45,7 +44,7 @@
if (container instanceof Container)
{
- TransactionManagementType type = TxUtil.getTransactionManagementType(((Advisor) container));
+ TransactionManagementType type = TxUtil.getTransactionManagementType(((Container) container));
if (type != TransactionManagementType.BEAN)
throw new IllegalStateException("Container " + ((Container) container).getEjbName() + ": it is illegal to inject UserTransaction into a CMT bean");
}
Property changes on: projects/ejb3/trunk/core/src/test/java
___________________________________________________________________
Name: subclipse:tags
+ 70154,AS trunk src/test,/trunk/ejb3/src/test,branch
Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -23,9 +23,8 @@
import java.util.Hashtable;
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
import org.jboss.ejb3.Ejb3Deployment;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.stateful.StatefulContainer;
/**
@@ -38,10 +37,10 @@
{
@SuppressWarnings("unchecked")
- public MockStatefulContainer(ClassLoader cl, String beanClassName, String ejbName, AspectManager manager,
- Hashtable ctxProperties, InterceptorInfoRepository interceptorRepository, Ejb3Deployment deployment)
+ public MockStatefulContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
+ Hashtable ctxProperties, Ejb3Deployment deployment) throws ClassNotFoundException
{
- super(cl, beanClassName, ejbName, manager, ctxProperties, interceptorRepository, deployment);
+ super(cl, beanClassName, ejbName, domain, ctxProperties, deployment, null);
}
@Override
Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java 2008-03-05 07:11:49 UTC (rev 70408)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java 2008-03-05 09:17:19 UTC (rev 70409)
@@ -28,10 +28,10 @@
import junit.framework.TestCase;
import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
import org.jboss.cache.transaction.DummyTransactionManager;
import org.jboss.ejb3.Ejb3Deployment;
import org.jboss.ejb3.Ejb3Registry;
-import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.stateful.StatefulBeanContext;
import org.jboss.ejb3.test.cachepassivation.MockBean;
import org.jboss.ejb3.test.cachepassivation.MockDeploymentUnit;
@@ -67,10 +67,9 @@
ClassLoader cl = Thread.currentThread().getContextClassLoader();
String beanClassName = MockBean.class.getName();
String ejbName = "MockBean";
- AspectManager aspectManager = new AspectManager();
- InterceptorInfoRepository interceptorRepository = new InterceptorInfoRepository(cl);
+ Domain domain = new Domain(new AspectManager(), "Test", false);
Ejb3Deployment deployment = new MockEjb3Deployment(new MockDeploymentUnit(), null);
- MockStatefulContainer container = new MockStatefulContainer(cl, beanClassName, ejbName, aspectManager, ctxProperties, interceptorRepository, deployment);
+ MockStatefulContainer container = new MockStatefulContainer(cl, beanClassName, ejbName, domain, ctxProperties, deployment);
container.instantiated();
container.processMetadata();
System.out.println("injectors = " + container.getInjectors());
More information about the jboss-cvs-commits
mailing list