[jboss-cvs] JBossAS SVN: r69805 - in trunk: ejb3 and 22 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Feb 12 18:02:47 EST 2008
Author: wolfc
Date: 2008-02-12 18:02:47 -0500 (Tue, 12 Feb 2008)
New Revision: 69805
Modified:
trunk/build/build-distr.xml
trunk/build/build-thirdparty.xml
trunk/ejb3/.classpath
trunk/ejb3/build-test.xml
trunk/ejb3/build.xml
trunk/ejb3/local.properties
trunk/ejb3/src/main/org/jboss/ejb3/BaseContext.java
trunk/ejb3/src/main/org/jboss/ejb3/DeploymentUnit.java
trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocation.java
trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocationWrapper.java
trunk/ejb3/src/main/org/jboss/ejb3/EJBContextImpl.java
trunk/ejb3/src/main/org/jboss/ejb3/ENCPropagationInterceptor.java
trunk/ejb3/src/main/org/jboss/ejb3/Ejb3AnnotationHandler.java
trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java
trunk/ejb3/src/main/org/jboss/ejb3/Ejb3DescriptorHandler.java
trunk/ejb3/src/main/org/jboss/ejb3/ProxyFactoryHelper.java
trunk/ejb3/src/main/org/jboss/ejb3/cache/NoPassivationCache.java
trunk/ejb3/src/main/org/jboss/ejb3/cache/StatefulCache.java
trunk/ejb3/src/main/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java
trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java
trunk/ejb3/src/main/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java
trunk/ejb3/src/main/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfo.java
trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java
trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInjector.java
trunk/ejb3/src/main/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java
trunk/ejb3/src/main/org/jboss/ejb3/mdb/ConsumerContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/mdb/MDB.java
trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/pool/AbstractPool.java
trunk/ejb3/src/main/org/jboss/ejb3/remoting/IsLocalInterceptor.java
trunk/ejb3/src/main/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/security/JaccHelper.java
trunk/ejb3/src/main/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/session/BaseSessionProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/session/SessionContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulBeanContext.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulInstanceInterceptor.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java
trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java
trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java
trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/tx/BMTInterceptor.java
trunk/ejb3/src/main/org/jboss/ejb3/tx/TxInterceptorFactory.java
trunk/ejb3/src/main/org/jboss/ejb3/tx/TxUtil.java
trunk/ejb3/src/main/org/jboss/injection/UserTransactionFieldInjector.java
trunk/ejb3/src/main/org/jboss/injection/UserTransactionMethodInjector.java
trunk/ejb3/src/main/org/jboss/injection/UserTransactionPropertyInjector.java
trunk/ejb3/src/resources/ejb3-interceptors-aop.xml
trunk/ejb3/src/resources/test/aspectdomain/aspectdomain-ejb3-interceptors-aop.xml
trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java
trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java
trunk/webservices/.classpath
trunk/webservices/build.xml
trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java
Log:
EJBTHREE-1174: integration of ejb3-interceptors
Modified: trunk/build/build-distr.xml
===================================================================
--- trunk/build/build-distr.xml 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/build/build-distr.xml 2008-02-12 23:02:47 UTC (rev 69805)
@@ -168,6 +168,10 @@
excludes="*-sources.jar, *-javadoc.jar"/>
<fileset dir="${jboss.jboss.ejb3.impl.lib}" includes="*.jar"
excludes="*-sources.jar, *-javadoc.jar"/>
+ <fileset dir="${jboss.jboss.ejb3.interceptors.lib}" includes="*.jar"
+ excludes="*-sources.jar, *-javadoc.jar"/>
+ <fileset dir="${jboss.jboss.ejb3.metadata.lib}" includes="*.jar"
+ excludes="*-sources.jar, *-javadoc.jar"/>
<fileset dir="${hibernate.commons.annotations.lib}" includes="*.jar"/>
<fileset dir="${hibernate.entitymanager.lib}" includes="*.jar"/>
<fileset dir="${hibernate.annotations.lib}" includes="*.jar"/>
Modified: trunk/build/build-thirdparty.xml
===================================================================
--- trunk/build/build-thirdparty.xml 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/build/build-thirdparty.xml 2008-02-12 23:02:47 UTC (rev 69805)
@@ -93,6 +93,8 @@
<componentref name="jboss/jboss-ejb3-cache" version="0.11.1"/>
<componentref name="jboss/jboss-ejb3-ext-api" version="0.1.2.Beta1"/>
<componentref name="jboss/jboss-ejb3-impl" version="0.1.2.Beta1"/>
+ <componentref name="jboss/jboss-ejb3-interceptors" version="0.12.0-SNAPSHOT"/>
+ <componentref name="jboss/jboss-ejb3-metadata" version="0.12.0-SNAPSHOT"/>
<componentref name="jboss/jboss-ha-client" version="1.0.0.BETA1"/>
<componentref name="jboss/jboss-ha-server-api" version="1.0.0.GA"/>
<componentref name="jboss/jboss-jaspi-api" version="1.0-BETA1"/>
Modified: trunk/ejb3/.classpath
===================================================================
--- trunk/ejb3/.classpath 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/.classpath 2008-02-12 23:02:47 UTC (rev 69805)
@@ -68,7 +68,10 @@
<classpathentry kind="lib" path="/thirdparty/jboss/jboss-ejb3-cache/lib/jboss-ejb3-cache.jar" sourcepath="/thirdparty/jboss/jboss-ejb3-cache/lib/jboss-ejb3-cache-sources.jar"/>
<classpathentry kind="lib" path="/thirdparty/jboss/jboss-ejb3-ext-api/lib/jboss-ejb3-ext-api.jar" sourcepath="/thirdparty/jboss/jboss-ejb3-ext-api/lib/jboss-ejb3-ext-api-sources.jar"/>
<classpathentry kind="lib" path="/thirdparty/jboss/jboss-ejb3-impl/lib/jboss-ejb3-impl.jar" sourcepath="/thirdparty/jboss/jboss-ejb3-impl/lib/jboss-ejb3-impl-sources.jar"/>
- <classpathentry kind="lib" path="/thirdparty/jboss/jboss-ha-client/lib/jboss-ha-client.jar"/>
+ <classpathentry kind="lib" path="/thirdparty/jboss/jboss-ha-client/lib/jboss-ha-client.jar" sourcepath="/thirdparty/jboss/jboss-ha-client/lib/jboss-ha-client-sources.jar"/>
<classpathentry kind="lib" path="/thirdparty/jboss/jboss-ha-server-api/lib/jboss-ha-server-api.jar"/>
+ <classpathentry kind="lib" path="/thirdparty/jboss/web/lib/jbossweb.jar" sourcepath="/thirdparty/jboss/web/lib/jbossweb-src.zip"/>
+ <classpathentry kind="lib" path="/thirdparty/jboss/jboss-ejb3-interceptors/lib/jboss-ejb3-interceptors.jar" sourcepath="/thirdparty/jboss/jboss-ejb3-interceptors/lib/jboss-ejb3-interceptors-sources.jar"/>
+ <classpathentry kind="lib" path="/thirdparty/jboss/jboss-ejb3-metadata/lib/jboss-ejb3-metadata.jar" sourcepath="/thirdparty/jboss/jboss-ejb3-metadata/lib/jboss-ejb3-metadata-sources.jar"/>
<classpathentry kind="output" path="output/eclipse-classes"/>
</classpath>
Modified: trunk/ejb3/build-test.xml
===================================================================
--- trunk/ejb3/build-test.xml 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/build-test.xml 2008-02-12 23:02:47 UTC (rev 69805)
@@ -162,6 +162,7 @@
<path refid="jboss.jboss.ejb3.cache.classpath"/>
<path refid="jboss.jboss.ejb3.ext.api.classpath"/>
<path refid="jboss.jboss.ejb3.impl.classpath"/>
+ <path refid="jboss.jboss.ejb3.interceptors.classpath"/>
<path refid="jboss.metadata.classpath"/>
<path refid="jboss.jboss.ha.client.classpath"/>
<path refid="jboss.jboss.ha.server.api.classpath"/>
@@ -5462,6 +5463,11 @@
<echo message="Nodes have started, waiting for cluster to stablize..."/>
</target>
+ <target name="tests-clustering-setup">
+ <create-cluster-node conf="node0"/>
+ <create-cluster-node conf="node1"/>
+ </target>
+
<target name="tests-clustering-startup" unless="${tests.clustering.skip.startup}">
<!-- Caller can pass in the node names; if not these are the defaults -->
Modified: trunk/ejb3/build.xml
===================================================================
--- trunk/ejb3/build.xml 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/build.xml 2008-02-12 23:02:47 UTC (rev 69805)
@@ -116,6 +116,8 @@
<path refid="jboss.jboss.ejb3.cache.classpath"/>
<path refid="jboss.jboss.ejb3.ext.api.classpath" />
<path refid="jboss.jboss.ejb3.impl.classpath" />
+ <path refid="jboss.jboss.ejb3.interceptors.classpath" />
+ <path refid="jboss.jboss.ejb3.metadata.classpath" />
</path>
<!-- ======= -->
Modified: trunk/ejb3/local.properties
===================================================================
--- trunk/ejb3/local.properties 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/local.properties 2008-02-12 23:02:47 UTC (rev 69805)
@@ -19,3 +19,5 @@
#Timeout for jboss to start
jboss.startup.timeout=180
+
+javac.deprecation=false
\ No newline at end of file
Modified: trunk/ejb3/src/main/org/jboss/ejb3/BaseContext.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/BaseContext.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/BaseContext.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/DeploymentUnit.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/DeploymentUnit.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/DeploymentUnit.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/EJBContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -25,16 +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.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;
@@ -44,7 +41,9 @@
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;
@@ -55,23 +54,29 @@
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.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.Ejb3Deployer;
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;
@@ -98,6 +103,10 @@
import org.jboss.logging.Logger;
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.naming.Util;
@@ -110,11 +119,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;
@@ -126,6 +140,8 @@
protected int defaultConstructorIndex;
protected String beanClassName;
+
+ private Class<?> beanClass;
protected ClassLoader classloader;
@@ -134,8 +150,7 @@
protected Context enc;
- //protected SessionCallbackHandler callbackHandler;
- protected LifecycleInterceptorHandler callbackHandler;
+// protected LifecycleInterceptorHandler callbackHandler;
protected Hashtable initialContextProperties;
@@ -146,14 +161,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;
@@ -179,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);
try
@@ -215,7 +228,7 @@
throw new RuntimeException("failed to create object name for: " + on, e);
}
- annotations = new AnnotationRepositoryToMetaData(this);
+ //annotations = new AnnotationRepositoryToMetaData(this);
initialContextProperties = ctxProperties;
try
@@ -226,8 +239,6 @@
{
throw new RuntimeException(e);
}
- this.interceptorRepository = interceptorRepository;
- this.interceptorRepository.addBeanClass(clazz.getName());
bindORB();
bindEJBContext();
@@ -269,11 +280,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);
@@ -328,6 +402,15 @@
return jaccContextId;
}
+ /**
+ * Do not call, used by BeanContainer.
+ * @return
+ */
+ public List<Method> getVirtualMethods()
+ {
+ return null;
+ }
+
public void setJaccContextId(String jaccContextId)
{
this.jaccContextId = jaccContextId;
@@ -378,6 +461,11 @@
return dependencyPolicy;
}
+ public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
+ {
+ return beanContainer.isAnnotationPresent(annotationType);
+ }
+
/**
* Is the method a business method of this container.
*
@@ -459,19 +547,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
@@ -569,16 +663,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;
@@ -588,28 +679,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;
@@ -668,7 +740,7 @@
public Class<?> getBeanClass()
{
- return clazz;
+ return beanClass;
}
public Pool getPool()
@@ -693,6 +765,7 @@
protected Object construct()
{
+ /*
Interceptor[] cInterceptors = constructorInterceptors[defaultConstructorIndex];
if (cInterceptors == null)
{
@@ -726,11 +799,24 @@
{
throw new RuntimeException(throwable);
}
-
+ */
+ try
+ {
+ return beanContainer.construct();
+ }
+ catch (SecurityException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException(e);
+ }
}
public void create() throws Exception
{
+ /*
initializeClassContainer();
for (int i = 0; i < constructors.length; i++)
{
@@ -740,6 +826,7 @@
break;
}
}
+ */
}
// Everything must be done in start to make sure all dependencies have been satisfied
@@ -759,14 +846,14 @@
Injector[] injectors2 = injectors.toArray(new Injector[injectors.size()]);
if (pool != null) pool.setInjectors(injectors2);
- createCallbackHandler();
+// createCallbackHandler();
JaccHelper.configureContainer(jaccContextId, this);
// 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
@@ -779,12 +866,11 @@
pool = null;
}
- log.info("STOPPED EJB: " + clazz.getName() + " ejbName: " + ejbName);
+ log.info("STOPPED EJB: " + beanClass.getName() + " ejbName: " + ejbName);
}
public void destroy() throws Exception
{
- super.cleanup();
}
@SuppressWarnings("unchecked")
@@ -806,6 +892,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);
@@ -830,14 +984,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)
@@ -894,6 +1080,7 @@
}
}
+ /*
protected void createCallbackHandler()
{
try
@@ -907,6 +1094,7 @@
+ beanClassName, e);
}
}
+ */
protected Class[] getHandledCallbacks()
{
@@ -914,33 +1102,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()
@@ -1035,6 +1213,7 @@
return null;
}
+ /*
@Override
public boolean hasAnnotation(Class tgt, String annotation)
{
@@ -1104,7 +1283,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);
@@ -1120,89 +1300,67 @@
return deployment.resolveMessageDestination(link);
}
- @SuppressWarnings("unchecked")
public <T extends Annotation> T getAnnotation(Class<T> annotationType)
{
- 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)
{
- 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;
@@ -1244,11 +1402,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());
@@ -1277,9 +1435,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;
+ }
+
public String toString()
{
return getObjectName().getCanonicalName();
Modified: trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocation.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocation.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocation.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -56,11 +56,13 @@
super(null, null);
}
+ /*
@SuppressWarnings("unchecked")
public A getAdvisor()
{
return (A) super.getAdvisor();
}
+ */
public T getBeanContext()
{
Modified: trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocationWrapper.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocationWrapper.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/EJBContainerInvocationWrapper.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/EJBContextImpl.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/EJBContextImpl.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/EJBContextImpl.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/ENCPropagationInterceptor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/ENCPropagationInterceptor.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/ENCPropagationInterceptor.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/Ejb3AnnotationHandler.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/Ejb3AnnotationHandler.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/Ejb3AnnotationHandler.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/Ejb3Deployment.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -59,6 +59,7 @@
import org.jboss.ejb3.metadata.jpa.spec.PersistenceUnitsMetaData;
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.virtual.VirtualFile;
@@ -732,6 +733,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: trunk/ejb3/src/main/org/jboss/ejb3/Ejb3DescriptorHandler.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/Ejb3DescriptorHandler.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/Ejb3DescriptorHandler.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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;
@@ -86,7 +85,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;
@@ -111,9 +109,7 @@
import org.jboss.ejb3.annotation.impl.ConsumerImpl;
import org.jboss.ejb3.annotation.impl.CurrentMessageImpl;
import org.jboss.ejb3.annotation.impl.DefaultActivationSpecsImpl;
-import org.jboss.ejb3.annotation.impl.DefaultInterceptorMarkerImpl;
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.LocalBindingImpl;
@@ -154,6 +150,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;
@@ -409,31 +406,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);
}
@@ -444,15 +441,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)
@@ -483,15 +479,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);
@@ -510,14 +505,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));
@@ -543,14 +537,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));
@@ -590,18 +583,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
@@ -610,6 +603,7 @@
addMDBAnnotations(container, ejbName, mdb);
}
+ */
// An MDB doesn't have business interfaces, or does it?
//addInterfaces(container, enterpriseBean);
@@ -908,8 +902,6 @@
}
}
- container.setXml(enterpriseBean);
-
addTransactionAnnotations(container, enterpriseBean, ejbName);
addAssemblyAnnotations(container, enterpriseBean, ejbName);
@@ -992,7 +984,7 @@
{
addExcludeAnnotations(container, assembly.getExcludeList(), ejbName);
- addInterceptorBindingAnnotations(container, enterpriseBean, ejbName);
+// addInterceptorBindingAnnotations(container, enterpriseBean, ejbName);
}
if (enterpriseBean instanceof JBossSessionBeanMetaData)
@@ -1220,12 +1212,14 @@
}
}
+ /*
if (!definesInterceptors
&& di.getInterceptorInfoRepository().hasDefaultInterceptors())
{
addClassAnnotation(container, DefaultInterceptorMarker.class,
new DefaultInterceptorMarkerImpl());
}
+ */
}
/**
@@ -1265,6 +1259,7 @@
EJBContainer container, InterceptorBindingMetaData binding)
throws ClassNotFoundException
{
+ /*
boolean addedAnnotations = false;
for (java.lang.reflect.Method method : container.getBeanClass()
.getMethods())
@@ -1344,6 +1339,8 @@
}
return addedAnnotations;
+ */
+ return false;
}
private void addEjbAnnotations(EJBContainer container,
@@ -1559,6 +1556,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)
@@ -1567,6 +1565,7 @@
container.getAnnotations().disableAnnotation(Clustered.class.getName());
return;
}
+ */
ClusterConfigMetaData config = enterpriseBean.getClusterConfig();
if (config != null)
@@ -1649,28 +1648,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);
}
@@ -2019,9 +2026,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)
@@ -2043,6 +2057,7 @@
annotations.disableAnnotation(m,
javax.annotation.security.DenyAll.class.getName());
}
+ */
}
private void addClassAnnotation(EJBContainer container, Class<? extends Annotation> annotationClass, Annotation annotation)
Modified: trunk/ejb3/src/main/org/jboss/ejb3/ProxyFactoryHelper.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/ProxyFactoryHelper.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/ProxyFactoryHelper.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -38,7 +38,6 @@
import javax.jws.WebService;
import javax.management.ObjectName;
-import org.jboss.aop.Advisor;
import org.jboss.ejb.LocalImpl;
import org.jboss.ejb.RemoteImpl;
import org.jboss.ejb3.annotation.JndiBindingPolicy;
@@ -684,7 +683,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
@@ -793,13 +792,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();
@@ -808,13 +806,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();
@@ -823,18 +820,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)
@@ -855,22 +851,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);
@@ -885,12 +880,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(""))
@@ -908,7 +903,7 @@
return jndiName;
}
- public static String getDefaultRemoteJndiName(Container container)
+ public static String getDefaultRemoteJndiName(EJBContainer container)
{
return ProxyFactoryHelper.getJndiBindingPolicy(container).getDefaultRemoteJndiName(
ProxyFactoryHelper.getDeploymentSummaryFromContainer(container));
Modified: trunk/ejb3/src/main/org/jboss/ejb3/cache/NoPassivationCache.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/cache/NoPassivationCache.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/cache/NoPassivationCache.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/cache/StatefulCache.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/cache/StatefulCache.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/cache/StatefulCache.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/cache/simple/SimpleStatefulCache.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -30,12 +30,10 @@
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;
import org.jboss.ejb3.cache.StatefulCache;
-import org.jboss.ejb3.deployers.Ejb3Deployer;
import org.jboss.ejb3.pool.Pool;
import org.jboss.ejb3.stateful.StatefulBeanContext;
import org.jboss.logging.Logger;
@@ -240,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: trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/cache/tree/StatefulTreeCache.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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;
@@ -305,18 +303,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)
Modified: trunk/ejb3/src/main/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/embedded/EJB3StandaloneDeployer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/interceptor/EJB3InterceptorsFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfo.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfo.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfo.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInjector.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInjector.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInjector.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/interceptor/LifecycleInterceptorHandler.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/mdb/ConsumerContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/mdb/ConsumerContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/mdb/ConsumerContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/mdb/MDB.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/mdb/MDB.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/mdb/MDB.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/mdb/MessagingContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/pool/AbstractPool.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/pool/AbstractPool.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/pool/AbstractPool.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -81,7 +81,7 @@
// {
// StatefulBeanContext sfctx = (StatefulBeanContext) ctx;
// // Tell context how to handle replication
-// Advisor advisor = (Advisor) container;
+// Advisor advisor = *** (Advisor) container; BOGUS CLASSCAST ***
// CacheConfig config = (CacheConfig) advisor.resolveAnnotation(CacheConfig.class);
// if (config != null)
// {
Modified: trunk/ejb3/src/main/org/jboss/ejb3/remoting/IsLocalInterceptor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/remoting/IsLocalInterceptor.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/remoting/IsLocalInterceptor.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/remoting/ReplicantsManagerInterceptorFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/security/AuthenticationInterceptorFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/security/JaccAuthorizationInterceptorFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/security/JaccHelper.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/security/JaccHelper.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/security/JaccHelper.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/security/RoleBasedAuthorizationInterceptorFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/security/RunAsSecurityInterceptorFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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>
@@ -87,15 +84,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};
@@ -114,6 +112,9 @@
{
AllowedOperationsAssociation.popInMethodFlag();
}
+ */
+ // FIXME: interceptors
+ throw new RuntimeException("NYI");
}
@Override
@@ -345,13 +346,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);
@@ -386,7 +387,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
{
@@ -401,7 +402,7 @@
newSi = new EJBContainerInvocation(info);
newSi.setArguments(si.getArguments());
newSi.setMetaData(si.getMetaData());
- newSi.setAdvisor(this);
+ newSi.setAdvisor(getAdvisor());
newSi = populateInvocation(newSi);
Modified: trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/service/ServiceRemoteProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/session/BaseSessionProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/session/BaseSessionProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/session/BaseSessionProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -87,7 +87,7 @@
this.isClustered = container.isClustered();
}
- protected Container getContainer()
+ protected EJBContainer getContainer()
{
if (container == null)
{
Modified: trunk/ejb3/src/main/org/jboss/ejb3/session/SessionContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/session/SessionContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/session/SessionContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/ProxiedStatefulBeanContext.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulBeanContext.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulBeanContext.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulBeanContext.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulClusterProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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;
@@ -144,7 +143,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));
}
@@ -166,7 +165,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: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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,8 +40,11 @@
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.joinpoint.Invocation;
import org.jboss.aop.joinpoint.InvocationResponse;
import org.jboss.aop.util.MethodHashing;
@@ -57,11 +60,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;
@@ -69,6 +74,7 @@
import org.jboss.injection.Injector;
import org.jboss.injection.JndiPropertyInjector;
import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
/**
* Comment
@@ -83,11 +89,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)
@@ -196,7 +201,7 @@
try
{
long hash = MethodHashing.calculateHash(method);
- MethodInfo info = super.getMethodInfo(hash);
+ MethodInfo info = getAdvisor().getMethodInfo(hash);
if (info == null)
{
throw new RuntimeException(
@@ -227,7 +232,7 @@
try
{
long hash = MethodHashing.calculateHash(method);
- MethodInfo info = super.getMethodInfo(hash);
+ MethodInfo info = getAdvisor().getMethodInfo(hash);
if (info == null)
{
throw new RuntimeException(
@@ -252,7 +257,7 @@
}
StatefulContainerInvocation nextInvocation = new StatefulContainerInvocation(info, id);
- nextInvocation.setAdvisor(this);
+ nextInvocation.setAdvisor(getAdvisor());
nextInvocation.setArguments(args);
ProxyUtils.addLocalAsynchronousInfo(nextInvocation, provider);
@@ -328,10 +333,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;
@@ -364,7 +369,7 @@
newSi = new StatefulContainerInvocation(info, newId);
newSi.setArguments(si.getArguments());
newSi.setMetaData(si.getMetaData());
- newSi.setAdvisor(this);
+ newSi.setAdvisor(getAdvisor());
Object rtn = null;
@@ -443,15 +448,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()
{
@@ -459,6 +493,7 @@
{PostConstruct.class, PreDestroy.class, PostActivate.class,
PrePassivate.class};
}
+ */
public void invokeInit(Object bean, Class[] initParameterTypes,
Object[] initParameterValues)
@@ -688,7 +723,7 @@
public boolean isClustered()
{
- return hasAnnotation(getBeanClass(), Clustered.class.getName());
+ return isAnnotationPresent(Clustered.class);
}
protected InvocationResponse invokeHomeMethod(MethodInfo info,
@@ -866,7 +901,7 @@
newStatefulInvocation.setArguments(statefulInvocation.getArguments());
newStatefulInvocation.setMetaData(statefulInvocation.getMetaData());
- newStatefulInvocation.setAdvisor(this);
+ newStatefulInvocation.setAdvisor(getAdvisor());
return newStatefulInvocation;
}
@@ -889,7 +924,7 @@
newStatefulInvocation.setArguments(statefulInvocation.getArguments());
newStatefulInvocation.setMetaData(statefulInvocation.getMetaData());
- newStatefulInvocation.setAdvisor(this);
+ newStatefulInvocation.setAdvisor(getAdvisor());
return newStatefulInvocation;
}
Modified: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulInstanceInterceptor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulInstanceInterceptor.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulInstanceInterceptor.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -27,10 +27,10 @@
import javax.ejb.ConcurrentAccessException;
import javax.ejb.EJBException;
-import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
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;
@@ -42,7 +42,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);
@@ -59,7 +59,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.resolveAnnotation(SerializedConcurrentAccess.class) != null;
Modified: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulLocalProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoteProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateful/StatefulRemoveInterceptor.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -21,14 +21,14 @@
*/
package org.jboss.ejb3.stateful;
+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.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;
@@ -37,7 +37,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;
@@ -117,7 +117,7 @@
Object id = ejb.getId();
- StatefulContainer container = (StatefulContainer) ejb.getAdvisor();
+ StatefulContainer container = getEJBContainer(invocation);
Transaction tx = null;
try
{
Modified: trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessClusterProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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;
@@ -121,43 +120,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: trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessInstanceInterceptor.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -21,24 +21,26 @@
*/
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.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.StatefulInstanceInterceptor;
-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);
@@ -50,7 +52,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: trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessLocalProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/stateless/StatelessRemoteProxyFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/tx/BMTInterceptor.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/tx/BMTInterceptor.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/tx/BMTInterceptor.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/ejb3/tx/TxInterceptorFactory.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/tx/TxInterceptorFactory.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/tx/TxInterceptorFactory.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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;
@@ -112,7 +113,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: trunk/ejb3/src/main/org/jboss/ejb3/tx/TxUtil.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/tx/TxUtil.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/ejb3/tx/TxUtil.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -32,8 +32,10 @@
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.MethodInvocation;
import org.jboss.ejb.ApplicationExceptionImpl;
+import org.jboss.ejb3.Container;
import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.InitialContextFactory;
+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: trunk/ejb3/src/main/org/jboss/injection/UserTransactionFieldInjector.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/injection/UserTransactionFieldInjector.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/injection/UserTransactionFieldInjector.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/injection/UserTransactionMethodInjector.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/injection/UserTransactionMethodInjector.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/injection/UserTransactionMethodInjector.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/main/org/jboss/injection/UserTransactionPropertyInjector.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/injection/UserTransactionPropertyInjector.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/main/org/jboss/injection/UserTransactionPropertyInjector.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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");
}
Modified: trunk/ejb3/src/resources/ejb3-interceptors-aop.xml
===================================================================
--- trunk/ejb3/src/resources/ejb3-interceptors-aop.xml 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/resources/ejb3-interceptors-aop.xml 2008-02-12 23:02:47 UTC (rev 69805)
@@ -78,13 +78,65 @@
<interceptor class="org.jboss.ejb3.cache.StatefulReplicationInterceptor" scope="PER_VM"/>
<interceptor factory="org.jboss.ejb3.stateful.StatefulRemoveFactory" scope="PER_CLASS_JOINPOINT"/>
<interceptor factory="org.jboss.ejb3.tx.TxInterceptorFactory" scope="PER_CLASS_JOINPOINT"/>
- <interceptor factory="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory" scope="PER_CLASS_JOINPOINT"/>
+ <!-- interceptor factory="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory" scope="PER_CLASS_JOINPOINT"/ -->
<interceptor factory="org.jboss.ejb3.remoting.ReplicantsManagerInterceptorFactory" scope="PER_CLASS"/>
<interceptor class="org.jboss.ejb3.AllowedOperationsInterceptor" scope="PER_VM"/>
<interceptor factory="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory" scope="PER_CLASS"/>
<interceptor class="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor" scope="PER_VM"/>
- <domain name="Stateless Bean">
+ <!--
+ INTERCEPTORS
+ -->
+
+ <aspect name="InjectInterceptorsFactory" factory="org.jboss.ejb3.interceptors.aop.InjectInterceptorsFactory" scope="PER_JOINPOINT"/>
+ <aspect name="InterceptorsFactory" factory="org.jboss.ejb3.interceptors.aop.InterceptorsFactory" scope="PER_INSTANCE"/>
+ <aspect name="InvocationContextInterceptor" class="org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor" scope="PER_VM"/>
+
+ <!-- TODO: this is actually the bootstrap container -->
+ <domain name="Intercepted Bean">
+ <pointcut name="beanAroundInvokeCallbackMethods" expr="execution(* @org.jboss.ejb3.interceptors.ManagedObject->@javax.interceptor.AroundInvoke(..))"/>
+ <pointcut name="beanPostConstructCallbackMethods" expr="execution(* @org.jboss.ejb3.interceptors.ManagedObject->@javax.interceptor.PostConstruct(..))"/>
+ <pointcut name="beanPreDestroyCallbackMethods" expr="execution(* @org.jboss.ejb3.interceptors.ManagedObject->@javax.interceptor.PreDestroy(..))"/>
+
+ <pointcut name="beanLifecycleCallbackMethods" expr="beanAroundInvokeCallbackMethods OR beanPostConstructCallbackMethods OR beanPreDestroyCallbackMethods"/>
+
+ <!-- Prepare for dynamic AOP -->
+ <!-- TODO: optimize, we only need managed objects (and interceptors!) to be aspectized -->
+ <!-- prepare expr="all(*) AND has(@org.jboss.ejb3.interceptors.ManagedObject->new(..))"/ -->
+ <!-- TODO: let's see if we can do without
+ <prepare expr="all(*)"/>
+ -->
+
+ <!-- Setup AOP interceptors based on spec interceptors -->
+ <bind pointcut="construction(@org.jboss.ejb3.interceptors.ManagedObject->new(..))">
+ <!-- interceptor-ref name="LoggingInterceptor"/ -->
+ <!-- TODO: we don't need invocation context here -->
+ <!-- TODO: we do until we've seperated the post constructs -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="invoke" aspect="InterceptorsFactory"/>
+ </bind>
+
+ <!-- Lifecycle Event Callbacks (EJB 3 12.4) -->
+
+ <!-- TODO: for now handled in EJBContainer.invokePostConstruct until injection is refactored
+ <bind pointcut="construction(@org.jboss.ejb3.interceptors.ManagedObject->new(..))">
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="postConstruct" aspect="InjectInterceptorsFactory"/>
+ </bind>
+ -->
+
+ <!-- this is the usual way, now we move it into the other domains
+ <bind pointcut="execution(* @org.jboss.ejb3.interceptors.ManagedObject->*(..)) AND !beanLifecycleCallbackMethods">
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
+ </bind>
+ -->
+ </domain>
+
+
+
+ <domain name="Stateless Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
@@ -105,7 +157,10 @@
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.ejb3.annotation.Pool)">
@org.jboss.ejb3.annotation.Pool (value="ThreadlocalPool", maxSize=30, timeout=10000)
@@ -115,7 +170,7 @@
</annotation>
</domain>
- <domain name="JACC Stateless Bean">
+ <domain name="JACC Stateless Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
@@ -136,7 +191,10 @@
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.ejb3.annotation.Pool)">
@org.jboss.ejb3.annotation.Pool (value="ThreadlocalPool", maxSize=30, timeout=10000)
@@ -146,7 +204,7 @@
</annotation>
</domain>
- <domain name="Base Stateful Bean">
+ <domain name="Base Stateful Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
@@ -183,7 +241,10 @@
</bind>
<bind pointcut="execution(public * *->*(..))">
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.ejb3.annotation.Pool)">
@@ -215,7 +276,7 @@
</annotation>
</domain>
- <domain name="JACC Stateful Bean">
+ <domain name="JACC Stateful Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
@@ -245,7 +306,10 @@
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor"/>
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<bind pointcut="execution(public * @org.jboss.ejb3.annotation.Clustered->*(..)) AND !execution(public * *->@javax.ejb.Remove(..))">
@@ -289,7 +353,7 @@
</domain>
- <domain name="Message Driven Bean">
+ <domain name="Message Driven Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.AuthenticationInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
@@ -300,7 +364,10 @@
<interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
<interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.ejb3.annotation.Pool)">
@org.jboss.ejb3.annotation.Pool (value="StrictMaxPool", maxSize=15, timeout=10000)
@@ -310,7 +377,7 @@
</annotation>
</domain>
- <domain name="Consumer Bean">
+ <domain name="Consumer Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
</bind>
@@ -324,7 +391,10 @@
<interceptor-ref name="org.jboss.ejb3.mdb.CurrentMessageInjectorInterceptorFactory"/>
</bind>
<bind pointcut="execution(public * *->*(..))">
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.ejb3.annotation.Pool)">
@org.jboss.ejb3.annotation.Pool (value="StrictMaxPool", maxSize=15, timeout=10000)
@@ -334,7 +404,7 @@
</annotation>
</domain>
- <domain name="Service Bean">
+ <domain name="Service Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
@@ -355,14 +425,17 @@
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
</bind>
<bind pointcut="execution(public * *->*(..)) AND !execution(* *->create()) AND !execution(* *->start())">
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.ejb3.annotation.JndiBindingPolicy)">
@org.jboss.ejb3.annotation.JndiBindingPolicy (policy=org.jboss.ejb3.jndipolicy.impl.PackagingBasedJndiBindingPolicy.class)
</annotation>
</domain>
- <domain name="JACC Service Bean">
+ <domain name="JACC Service Bean" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.asynchronous.AsynchronousInterceptor"/>
<interceptor-ref name="org.jboss.ejb3.ENCPropagationInterceptor"/>
@@ -383,7 +456,10 @@
<interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
</bind>
<bind pointcut="execution(public * *->*(..)) AND !execution(* *->create()) AND !execution(* *->start())">
- <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
+ <!-- interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/ -->
+ <advice name="setup" aspect="InvocationContextInterceptor"/>
+ <advice name="fillMethod" aspect="InvocationContextInterceptor"/>
+ <advice name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
</bind>
<annotation expr="!class(@org.jboss.ejb3.annotation.JndiBindingPolicy)">
@org.jboss.ejb3.annotation.JndiBindingPolicy (policy=org.jboss.ejb3.jndipolicy.impl.PackagingBasedJndiBindingPolicy.class)
Modified: trunk/ejb3/src/resources/test/aspectdomain/aspectdomain-ejb3-interceptors-aop.xml
===================================================================
--- trunk/ejb3/src/resources/test/aspectdomain/aspectdomain-ejb3-interceptors-aop.xml 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/resources/test/aspectdomain/aspectdomain-ejb3-interceptors-aop.xml 2008-02-12 23:02:47 UTC (rev 69805)
@@ -6,7 +6,7 @@
<aop>
<interceptor class="org.jboss.ejb3.test.aspectdomain.TestInterceptor" scope="PER_VM"/>
- <domain name="Test Aspect Domain">
+ <domain name="Test Aspect Domain" extends="Intercepted Bean" inheritBindings="true">
<bind pointcut="execution(* *->*(..))">
<interceptor-ref name="org.jboss.ejb3.test.aspectdomain.TestInterceptor"/>
</bind>
Modified: trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java
===================================================================
--- trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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: trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java
===================================================================
--- trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/ejb3/src/test/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -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());
Modified: trunk/webservices/.classpath
===================================================================
--- trunk/webservices/.classpath 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/webservices/.classpath 2008-02-12 23:02:47 UTC (rev 69805)
@@ -39,5 +39,6 @@
<classpathentry kind="lib" path="/thirdparty/sun-jaxb/lib/jaxb-api.jar"/>
<classpathentry kind="lib" path="/thirdparty/jboss/jbossws-framework/lib/jbossws-framework.jar" sourcepath="/thirdparty/jboss/jbossws-framework/lib/jbossws-framework-src.zip"/>
<classpathentry kind="lib" path="/thirdparty/jboss/jboss-ejb3-ext-api/lib/jboss-ejb3-ext-api.jar" sourcepath="/thirdparty/jboss/jboss-ejb3-ext-api/lib/jboss-ejb3-ext-api-sources.jar"/>
+ <classpathentry kind="lib" path="/thirdparty/jboss/jboss-ejb3-interceptors/lib/jboss-ejb3-interceptors.jar" sourcepath="/thirdparty/jboss/jboss-ejb3-interceptors/lib/jboss-ejb3-interceptors-sources.jar"/>
<classpathentry kind="output" path="output/eclipse-classes"/>
</classpath>
Modified: trunk/webservices/build.xml
===================================================================
--- trunk/webservices/build.xml 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/webservices/build.xml 2008-02-12 23:02:47 UTC (rev 69805)
@@ -73,6 +73,7 @@
<path refid="jboss.common.core.classpath"/>
<path refid="jboss.common.logging.spi.classpath"/>
<path refid="jboss.jboss.ejb3.ext.api.classpath" />
+ <path refid="jboss.jboss.ejb3.interceptors.classpath" />
<path refid="jboss.jboss.javaee.classpath"/>
<path refid="jboss.jboss.security.spi.classpath"/>
<path refid="jboss.jboss.vfs.classpath"/>
Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java 2008-02-12 21:11:34 UTC (rev 69804)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java 2008-02-12 23:02:47 UTC (rev 69805)
@@ -31,6 +31,7 @@
import org.jboss.aop.Dispatcher;
import org.jboss.aop.MethodInfo;
+import org.jboss.aop.util.MethodHashing;
import org.jboss.ejb3.BeanContext;
import org.jboss.ejb3.BeanContextLifecycleCallback;
import org.jboss.ejb3.EJBContainerInvocation;
@@ -44,7 +45,6 @@
import org.jboss.wsf.spi.deployment.Endpoint;
import org.jboss.wsf.spi.invocation.ExtensibleWebServiceContext;
import org.jboss.wsf.spi.invocation.Invocation;
-import org.jboss.wsf.spi.invocation.InvocationHandler;
import org.jboss.wsf.spi.invocation.InvocationType;
import org.jboss.wsf.spi.invocation.WebServiceContextFactory;
@@ -95,9 +95,10 @@
Method method = getImplMethod(beanClass, wsInv.getJavaMethod());
Object[] args = wsInv.getArgs();
- MethodInfo info = container.getMethodInfo(method);
+ long hash = MethodHashing.calculateHash(method);
+ MethodInfo info = container.getAdvisor().getMethodInfo(hash);
EJBContainerInvocation<StatelessContainer, StatelessBeanContext> jbInv = new EJBContainerInvocation<StatelessContainer, StatelessBeanContext>(info);
- jbInv.setAdvisor(container);
+ jbInv.setAdvisor(container.getAdvisor());
jbInv.setArguments(args);
jbInv.setContextCallback(new CallbackImpl(wsInv));
More information about the jboss-cvs-commits
mailing list