[jboss-cvs] JBossAS SVN: r109389 - in projects/ejb3/trunk/core: src/main/java/org/jboss/ejb3 and 10 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Nov 19 06:58:57 EST 2010
Author: jaikiran
Date: 2010-11-19 06:58:57 -0500 (Fri, 19 Nov 2010)
New Revision: 109389
Added:
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockServiceContainer.java
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatefulContainer.java
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatelessContainer.java
Modified:
projects/ejb3/trunk/core/pom.xml
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionHelper.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionInvocation.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/AbstractEJB3TestCase.java
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1150/unit/WebServiceContextInjectionTestCase.java
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java
Log:
EJBTHREE-2200 First round of integration changes for SwitchBoard and InjectionManager integration
Modified: projects/ejb3/trunk/core/pom.xml
===================================================================
--- projects/ejb3/trunk/core/pom.xml 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/pom.xml 2010-11-19 11:58:57 UTC (rev 109389)
@@ -51,6 +51,9 @@
<version.org.jboss.ejb3.instantiator>1.0.0-alpha-3</version.org.jboss.ejb3.instantiator>
<version.org.jboss.ejb3.effigy>0.1.0</version.org.jboss.ejb3.effigy>
<version.org.jboss.ejb3.ejbref.resolver>1.0.0-alpha-1</version.org.jboss.ejb3.ejbref.resolver>
+ <version.switchboard>1.0.0-alpha-9</version.switchboard>
+ <version.org.jboss.injection>1.0.0-alpha-3</version.org.jboss.injection>
+
</properties>
<!-- Build Information -->
@@ -558,6 +561,7 @@
</exclusion>
</exclusions>
</dependency>
+
<dependency>
<groupId>org.jboss.javaee</groupId>
@@ -735,6 +739,26 @@
</dependency>
<dependency>
+ <groupId>org.jboss.injection</groupId>
+ <artifactId>jboss-injection-manager</artifactId>
+ <version>${version.org.jboss.injection}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.injection</groupId>
+ <artifactId>jboss-injection-injector</artifactId>
+ <version>${version.org.jboss.injection}</version>
+ </dependency>
+
+ <!-- For LazyEEInjector -->
+ <dependency>
+ <groupId>org.jboss.injection</groupId>
+ <artifactId>jboss-injection-mc-impl</artifactId>
+ <version>${version.org.jboss.injection}</version>
+ </dependency>
+
+
+ <dependency>
<groupId>org.jboss.microcontainer</groupId>
<artifactId>jboss-kernel</artifactId>
</dependency>
@@ -746,6 +770,12 @@
</dependency>
<dependency>
+ <groupId>org.jboss.switchboard</groupId>
+ <artifactId>jboss-switchboard-spi</artifactId>
+ <version>${version.switchboard}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.jboss.security</groupId>
<artifactId>jbosssx</artifactId>
<version>${version.org.jboss.security}</version>
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/EJBContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -21,6 +21,52 @@
*/
package org.jboss.ejb3;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Proxy;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ejb.ApplicationException;
+import javax.ejb.EJBException;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.Local;
+import javax.ejb.Remote;
+import javax.ejb.Timeout;
+import javax.ejb.Timer;
+import javax.ejb.TimerService;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.LinkRef;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+
import org.jboss.aop.Advisor;
import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
@@ -38,7 +84,6 @@
import org.jboss.ejb3.annotation.impl.ApplicationExceptionImpl;
import org.jboss.ejb3.aop.BeanContainer;
import org.jboss.ejb3.cluster.metadata.ClusteredMetaDataBridge;
-import org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator;
import org.jboss.ejb3.common.spi.ErrorCodes;
import org.jboss.ejb3.deployers.JBoss5DependencyPolicy;
import org.jboss.ejb3.effigy.ApplicationExceptionEffigy;
@@ -49,7 +94,6 @@
import org.jboss.ejb3.instantiator.impl.Ejb31SpecBeanInstantiator;
import org.jboss.ejb3.instantiator.spi.BeanInstantiationException;
import org.jboss.ejb3.instantiator.spi.BeanInstantiator;
-import org.jboss.ejb3.instantiator.spi.BeanInstantiatorRegistration;
import org.jboss.ejb3.instantiator.spi.InvalidConstructionParamsException;
import org.jboss.ejb3.interceptor.InterceptorInfoRepository;
import org.jboss.ejb3.interceptor.InterceptorInjector;
@@ -91,6 +135,7 @@
import org.jboss.injection.PersistenceUnitHandler;
import org.jboss.injection.ResourceHandler;
import org.jboss.injection.WebServiceRefHandler;
+import org.jboss.injection.manager.spi.InjectionManager;
import org.jboss.jca.spi.ComponentStack;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
@@ -106,51 +151,6 @@
import org.jboss.util.StringPropertyReplacer;
import org.jboss.util.naming.Util;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.ejb.ApplicationException;
-import javax.ejb.EJBException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.Local;
-import javax.ejb.Remote;
-import javax.ejb.Timeout;
-import javax.ejb.Timer;
-import javax.ejb.TimerService;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.LinkRef;
-import javax.naming.NameNotFoundException;
-import javax.naming.NamingException;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-import java.lang.annotation.Annotation;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-
/**
* Comment
*
@@ -237,6 +237,11 @@
*/
protected AnnotationRepositoryToMetaData metadataBasedAnnotationRepo;
+ /**
+ * Manages injection into beans and interceptors
+ */
+ private InjectionManager injectionManager;
+
private static final int TOTAL_PERMITS = Integer.MAX_VALUE;
// To support clean startup/shutdown
@@ -343,6 +348,12 @@
this(name, domain, cl, beanClassName, ejbName, ctxProperties, null, beanMetaData);
}
+ /**
+ * @deprecated {@link EJBContainer} is no longer responsible for setting up
+ * ENC. Instead, SwitchBoard http://community.jboss.org/wiki/Switchboard
+ * will be setting it up.
+ */
+ @Deprecated
private void bindEJBContext()
{
try
@@ -361,6 +372,12 @@
}
}
+ /**
+ * @deprecated {@link EJBContainer} is no longer responsible for setting up
+ * ENC. Instead, SwitchBoard http://community.jboss.org/wiki/Switchboard
+ * will be setting it up.
+ */
+ @Deprecated
private void bindORB()
{
try
@@ -377,7 +394,12 @@
* Creates a {@link LinkRef} for java:comp/TimerService to
* an internal jndi name for {@link TimerService}
* @throws NamingException
+
+ * @deprecated {@link EJBContainer} is no longer responsible for setting up
+ * ENC. Instead, SwitchBoard http://community.jboss.org/wiki/Switchboard
+ * will be setting it up.
*/
+ @Deprecated
private void bindTimerService() throws NamingException
{
// link to java:internal/TimerService (which is setup by
@@ -408,9 +430,22 @@
public Object createInterceptor(Class<?> interceptorClass) throws InstantiationException, IllegalAccessException
{
Object instance = interceptorClass.newInstance();
+ // TODO: This needs to be removed once we have all the RPs functioning
+ // and the InjectionManager will solely be responsible for injection
InterceptorInjector interceptorInjector = interceptorInjectors.get(interceptorClass);
assert interceptorInjector != null : "interceptorInjector not found for " + interceptorClass;
interceptorInjector.inject(null, instance);
+
+ // inject into the interceptor instance using InjectionManager.
+ // the injection manager in a real environment should never
+ // be null. But there are various legacy unit tests which
+ // start up a container in various different ways and it's
+ // a real big task to set a mock injection manager in all those places
+ if (this.injectionManager != null)
+ {
+ this.injectionManager.inject(instance);
+ }
+
return instance;
}
@@ -477,6 +512,16 @@
return beanContainer;
}
+ public Collection<Class<?>> getInterceptorClasses()
+ {
+ return this.beanContainer.getInterceptorClasses();
+ }
+
+ public Map<Class<?>, InterceptorInjector> getInterceptorInjectors()
+ {
+ return this.interceptorInjectors;
+ }
+
/**
*
* @return the bean class of this container
@@ -716,8 +761,8 @@
handlers.add(new JndiInjectHandler<Environment>());
handlers.add(new PersistenceContextHandler<Environment>());
handlers.add(new PersistenceUnitHandler<Environment>());
- handlers.add(new ResourceHandler<Environment>());
- handlers.add(new WebServiceRefHandler<Environment>());
+ //handlers.add(new ResourceHandler<Environment>());
+ //handlers.add(new WebServiceRefHandler<Environment>());
}
ClassLoader old = Thread.currentThread().getContextClassLoader();
@@ -1004,6 +1049,7 @@
{
throw new RuntimeException(e);
}
+
}
protected void reinitialize()
@@ -1035,29 +1081,6 @@
encFactory = new DefaultEjbEncFactory();
}
- try
- {
- Util.createSubcontext(getEnc(), "env");
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- bindORB();
- bindEJBContext();
- // bind the timerservice to java:comp/TimerService
- bindTimerService();
- /*
- initializeClassContainer();
- for (int i = 0; i < constructors.length; i++)
- {
- if (constructors[i].getParameterTypes().length == 0)
- {
- defaultConstructorIndex = i;
- break;
- }
- }
- */
if(log.isDebugEnabled())
log.debug("Current context class loader is " + Thread.currentThread().getContextClassLoader());
@@ -1092,6 +1115,8 @@
initializePool();
+ // TODO: Should be removed after switchboard (backed by ResourceProviders)
+ // is fully functional
for (EncInjector injector : encInjectors.values())
{
injector.inject(this);
@@ -1306,7 +1331,6 @@
pool = factory.createPool();
pool.initialize(this, maxSize, timeout);
- resolveInjectors();
pool.setInjectors(injectors.toArray(new Injector[injectors.size()]));
}
@@ -1319,9 +1343,20 @@
public void injectBeanContext(BeanContext<?> beanContext)
{
try
- {
+ {
+ // the injection manager in a real environment should never
+ // be null. But there are various legacy unit tests which
+ // start up a container in various different ways and it's
+ // a real big task to set a mock injection manager in all those places
+ if (this.injectionManager != null)
+ {
+ this.injectionManager.inject(beanContext.getInstance());
+ }
+ // TODO: Remove the rest of this stuff from here, once we
+ // have fully integrated SwitchBoard and jboss-injection in place
if(injectors == null)
return;
+ // [Jaikiran] Hmm, why all this AOP stuff during injection?
Advisor advisor = getAdvisor();
InjectionInvocation invocation = new InjectionInvocation(beanContext, injectors, injectionCallbackStack);
invocation.setAdvisor(advisor);
@@ -1401,6 +1436,12 @@
public static final String ENTITY_MANAGER_FACTORY = "EntityManagerFactory";
+ /**
+ * @deprecated {@link EJBContainer} is no longer responsible for setting up
+ * ENC. Instead, SwitchBoard http://community.jboss.org/wiki/Switchboard
+ * will be setting it up.
+ */
+ @Deprecated
protected void resolveInjectors() throws Exception
{
pushEnc();
@@ -1834,6 +1875,16 @@
}
+ public void setInjectionManager(InjectionManager injectionManager)
+ {
+ if (injectionManager == null)
+ {
+ throw new IllegalArgumentException("Cannot set null InjectionManager for container of bean " + this.getEjbName());
+ }
+
+ this.injectionManager = injectionManager;
+ }
+
/**
* Returns {@link AnnotationRepositoryToMetaData} corresponding to this {@link EJBContainer}.
* The returned {@link AnnotationRepositoryToMetaData} is an implementation of {@link AnnotationRepository}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/Ejb3Deployment.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -545,6 +545,24 @@
registerDeployment();
+ for (Object o : ejbContainers.values())
+ {
+ Container con = (Container) o;
+ try
+ {
+ processEJBContainerMetadata(con);
+ }
+ catch (Exception e)
+ {
+ String message = "Exception while processing container metadata for EJB: " + con.getEjbName()
+ + " in unit: " + this.getDeploymentUnit().getShortName();
+ // now wrap the original exception with a meaningful message and
+ // throw back the exception.
+ throw new Exception(message, e);
+ }
+ }
+
+
log.debug("EJB3 deployment time took: " + (System.currentTimeMillis() - start));
}
catch (Exception e)
@@ -572,42 +590,12 @@
if (reinitialize)
reinitialize();
+ // register the containers
for (Object o : ejbContainers.values())
{
Container con = (Container) o;
try
{
- processEJBContainerMetadata(con);
- }
- catch (Exception e)
- {
- String message = "Exception while processing container metadata for EJB: " + con.getEjbName() + " in unit: " + this.getDeploymentUnit().getShortName();
- // just log the message, no need to dump the stacktrace since we are finally going to
- // throw back the exception
- log.error(message);
- // stop/destroy the container(s) in this deployment
- try
- {
- stop();
- destroy();
- }
- catch (Exception ignoredException)
- {
- // we catch this exception during stop/destroy to ensure that this
- // exception is NOT propagated up, instead of the original exception
- // that forced this stop/destroy
- }
- // now wrap the original exception with a meaningful message and
- // throw back the exception.
- throw new Exception(message, e);
- }
- }
-
- for (Object o : ejbContainers.values())
- {
- Container con = (Container) o;
- try
- {
registerEJBContainer(con);
}
catch (Exception e)
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionHelper.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionHelper.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionHelper.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -50,8 +50,5 @@
{
injector.inject(ctx);
}
- // inject interceptors
- // TODO: it would be better to create the instances during createBeanContext
- ctx.initialiseInterceptorInstances();
}
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionInvocation.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionInvocation.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/injection/InjectionInvocation.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -94,6 +94,11 @@
@Override
public Object invokeTarget() throws Throwable
{
- return invocationContext.proceed();
+ // inject the bean instance
+ invocationContext.proceed();
+ // now inject the interceptor instances
+ this.ctx.initialiseInterceptorInstances();
+ // injection invocation doesn't have anything to return
+ return null;
}
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/mdb/MessagingContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -96,7 +96,18 @@
@Override
public BeanContext<?> createBeanContext()
{
- return new MDBContext(this, construct());
+ MDBContext beanCtx = new MDBContext(this, construct());
+ this.pushContext(beanCtx);
+ try
+ {
+ // inject it
+ this.injectBeanContext(beanCtx);
+ }
+ finally
+ {
+ this.popContext();
+ }
+ return beanCtx;
}
public Object getMBean()
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/pool/AbstractPool.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -79,15 +79,6 @@
{
BeanContext ctx;
ctx = createBeanContext();
- container.pushContext(ctx);
- try
- {
- container.injectBeanContext(ctx);
- }
- finally
- {
- container.popContext();
- }
container.invokePostConstruct(ctx, initValues);
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -147,7 +147,9 @@
@Override
public BeanContext<?> createBeanContext()
{
- return new ServiceBeanContext(this, singleton);
+ ServiceBeanContext beanCtx = new ServiceBeanContext(this, singleton);
+ this.injectDependencies(beanCtx);
+ return beanCtx;
}
// TODO: integrate with StatelessContainer.initializeTimeout
@@ -258,8 +260,6 @@
{
initBeanContext();
- injectDependencies(beanContext);
-
invokePostConstruct(beanContext);
}
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateful/StatefulContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -21,6 +21,29 @@
*/
package org.jboss.ejb3.stateful;
+import java.io.Serializable;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.rmi.RemoteException;
+import java.util.Arrays;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.ejb.Init;
+import javax.ejb.NoSuchEJBException;
+import javax.ejb.NoSuchObjectLocalException;
+import javax.ejb.PostActivate;
+import javax.ejb.PrePassivate;
+import javax.ejb.RemoteHome;
+import javax.ejb.RemoveException;
+
import org.jboss.aop.Advisor;
import org.jboss.aop.Domain;
import org.jboss.aop.MethodInfo;
@@ -74,28 +97,6 @@
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
import org.jboss.util.NotImplementedException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalObject;
-import javax.ejb.EJBObject;
-import javax.ejb.Handle;
-import javax.ejb.Init;
-import javax.ejb.NoSuchEJBException;
-import javax.ejb.NoSuchObjectLocalException;
-import javax.ejb.PostActivate;
-import javax.ejb.PrePassivate;
-import javax.ejb.RemoteHome;
-import javax.ejb.RemoveException;
-import java.io.Serializable;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.rmi.RemoteException;
-import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-
/**
* Comment
*
@@ -162,7 +163,19 @@
@Override
public BeanContext<?> createBeanContext()
{
- return new StatefulBeanContext(this, construct());
+ StatefulBeanContext beanCtx = new StatefulBeanContext(this, construct());
+ this.pushContext(beanCtx);
+ try
+ {
+ // inject it
+ this.injectBeanContext(beanCtx);
+ }
+ finally
+ {
+ this.popContext();
+ }
+
+ return beanCtx;
}
public Object createProxyLocalEjb21(Object id, LocalBinding binding) throws Exception
Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/stateless/StatelessContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -84,6 +84,7 @@
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Hashtable;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
@@ -117,7 +118,20 @@
@Override
public BeanContext<?> createBeanContext()
{
- return new StatelessBeanContext(this, construct());
+ // construct the bean context
+ StatelessBeanContext beanCtx = new StatelessBeanContext(this, construct());
+ this.pushContext(beanCtx);
+ try
+ {
+ // inject it
+ this.injectBeanContext(beanCtx);
+ }
+ finally
+ {
+ this.popContext();
+ }
+
+ return beanCtx;
}
public Object createProxyLocalEjb21() throws Exception
Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/AbstractEJB3TestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/AbstractEJB3TestCase.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/AbstractEJB3TestCase.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -23,6 +23,7 @@
import static org.junit.Assert.assertEquals;
+import java.lang.reflect.AccessibleObject;
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
@@ -30,11 +31,13 @@
import java.util.Collection;
import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.naming.InitialContext;
+import javax.naming.LinkRef;
import javax.naming.NamingException;
import org.jboss.aop.AspectManager;
@@ -51,6 +54,7 @@
import org.jboss.deployers.structure.spi.helpers.AbstractDeploymentUnit;
import org.jboss.ejb3.DependencyPolicy;
import org.jboss.ejb3.DeploymentUnit;
+import org.jboss.ejb3.EJBContainer;
import org.jboss.ejb3.Ejb3Deployment;
import org.jboss.ejb3.Ejb3Registry;
import org.jboss.ejb3.InitialContextFactory;
@@ -67,18 +71,31 @@
import org.jboss.ejb3.instantiator.impl.Ejb31SpecBeanInstantiator;
import org.jboss.ejb3.instantiator.spi.BeanInstantiator;
import org.jboss.ejb3.instantiator.spi.BeanInstantiatorRegistration;
-import org.jboss.ejb3.service.ServiceContainer;
+import org.jboss.ejb3.interceptor.InterceptorInjector;
import org.jboss.ejb3.session.SessionContainer;
-import org.jboss.ejb3.stateful.StatefulContainer;
-import org.jboss.ejb3.stateless.StatelessContainer;
import org.jboss.ejb3.test.cachepassivation.MockDeploymentUnit;
import org.jboss.ejb3.test.common.MetaDataHelper;
import org.jboss.ejb3.test.mc.bootstrap.EmbeddedTestMcBootstrap;
+import org.jboss.ejb3.tx.UserTransactionImpl;
+import org.jboss.injection.DependsHandler;
+import org.jboss.injection.EJBHandler;
+import org.jboss.injection.InjectionHandler;
+import org.jboss.injection.InjectionUtil;
+import org.jboss.injection.Injector;
+import org.jboss.injection.JndiInjectHandler;
+import org.jboss.injection.PersistenceContextHandler;
+import org.jboss.injection.PersistenceUnitHandler;
+import org.jboss.injection.ResourceHandler;
+import org.jboss.injection.WebServiceRefHandler;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
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.spec.InterceptorMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
+import org.jboss.metadata.javaee.spec.Environment;
+import org.jboss.util.naming.Util;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -467,7 +484,7 @@
try
{
domain = getDomain("Service Bean");
- container = new ServiceContainer(null, loader, beanClassName, ejbName, domain, ctxProperties,
+ container = new MockServiceContainer(null, loader, beanClassName, ejbName, domain, ctxProperties,
deployment, (JBossServiceBeanMetaData) md);
}
catch (ClassNotFoundException cnfe)
@@ -478,7 +495,7 @@
case SFSB :
try
{
- container = new StatefulContainer(loader, beanClassName, ejbName, domain, ctxProperties, deployment, md,
+ container = new MockStatefulContainer(loader, beanClassName, ejbName, domain, ctxProperties, deployment, md,
es);
}
catch (ClassNotFoundException cnfe)
@@ -489,7 +506,7 @@
case SLSB :
try
{
- container = new StatelessContainer(loader, beanClassName, ejbName, domain, ctxProperties, deployment,
+ container = new MockStatelessContainer(loader, beanClassName, ejbName, domain, ctxProperties, deployment,
md, es);
}
catch (ClassNotFoundException cnfe)
@@ -522,7 +539,8 @@
//FIXME
// Typically these steps are done by Ejb3Deployment
container.instantiated(); //TODO: Wickeness
- container.processMetadata();
+ //container.processMetadata();
+ processContainerMetaData(container);
Ejb3Registry.register(container);
// Add as one of the deployed containers here
@@ -627,4 +645,116 @@
// Ignore
}
}
+
+ /**
+ * introspects EJB container to find all dependencies
+ * and initialize any extra metadata.
+ * <p/>
+ * This must be called before container is registered with any microcontainer
+ *
+ * @param container
+ */
+ public static void processContainerMetaData(EJBContainer container)
+ {
+ // XML must be done first so that any annotation overrides are initialized
+
+ // todo injection handlers should be pluggable from XML
+ Collection<InjectionHandler<Environment>> handlers = new ArrayList<InjectionHandler<Environment>>();
+ handlers.add(new EJBHandler<Environment>());
+ handlers.add(new DependsHandler<Environment>());
+ handlers.add(new JndiInjectHandler<Environment>());
+ handlers.add(new PersistenceContextHandler<Environment>());
+ handlers.add(new PersistenceUnitHandler<Environment>());
+ handlers.add(new ResourceHandler<Environment>());
+ handlers.add(new WebServiceRefHandler<Environment>());
+ ClassLoader old = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(container.getClassloader());
+ try
+ {
+ // EJB container's XML must be processed before interceptor's as it may override interceptor's references
+ for (InjectionHandler<Environment> handler : handlers)
+ handler.loadXml(container.getXml(), container);
+
+ Map<AccessibleObject, Injector> tmp = InjectionUtil.processAnnotations(container, handlers, container
+ .getBeanClass());
+ container.getInjectors().addAll(tmp.values());
+
+ /*
+ initialiseInterceptors();
+ */
+ for (Class<?> interceptorClass : container.getInterceptorClasses())
+ {
+ InterceptorMetaData interceptorMetaData = findInterceptor(container.getXml(), interceptorClass);
+ if(interceptorMetaData == null)
+ continue;
+
+ for (InjectionHandler<Environment> handler : handlers)
+ {
+ handler.loadXml(interceptorMetaData, container);
+ }
+ }
+ for (Class<?> interceptorClass : container.getInterceptorClasses())
+ {
+ Map<AccessibleObject, Injector> injections = InjectionUtil.processAnnotations(container, handlers, interceptorClass);
+ InterceptorInjector injector = new InterceptorInjector(injections);
+ container.getInterceptorInjectors().put(interceptorClass, injector);
+ }
+
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader(old);
+ }
+
+ }
+
+ private static InterceptorMetaData findInterceptor(JBossEnterpriseBeanMetaData xml, Class<?> interceptorClass)
+ {
+ 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)
+ {
+ if(interceptorMetaData.getInterceptorClass().equals(interceptorClass.getName()))
+ return interceptorMetaData;
+ }
+ return null;
+ }
+
+ public static void bindJavaCompEntries(EJBContainer container) throws NamingException
+ {
+ bindEJBContext(container);
+ bindTimerService(container);
+ bindUserTransaction(container);
+ bindTransactionSynchronizationRegistry(container);
+ }
+
+ private static void bindEJBContext(EJBContainer container) throws NamingException
+ {
+ LinkRef ref = new LinkRef("java:internal/EJBContext");
+ Util.rebind(container.getEnc(), "EJBContext", ref);
+ }
+
+ private static void bindTimerService(EJBContainer container) throws NamingException
+ {
+ LinkRef timerServiceLinkRef = new LinkRef("java:internal/TimerService");
+ // bind to java:comp/TimerService
+ Util.rebind(container.getEnc(), "TimerService", timerServiceLinkRef);
+ }
+
+ private static void bindUserTransaction(EJBContainer container) throws NamingException
+ {
+ Util.rebind(container.getEnc(), "UserTransaction", new UserTransactionImpl());
+ }
+
+ private static void bindTransactionSynchronizationRegistry(EJBContainer container) throws NamingException
+ {
+ Util.rebind(container.getEnc(), "TransactionSynchronizationRegistry", new LinkRef("java:TransactionSynchronizationRegistry"));
+ }
+
}
Added: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockServiceContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockServiceContainer.java (rev 0)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockServiceContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.core.test.common;
+
+import java.util.Hashtable;
+
+import javax.management.MBeanServer;
+
+import org.jboss.aop.Domain;
+import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.ejb3.service.ServiceContainer;
+import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
+
+/**
+ * MockServiceContainer
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class MockServiceContainer extends ServiceContainer
+{
+
+ public MockServiceContainer(MBeanServer server, ClassLoader cl, String beanClassName, String ejbName, Domain domain,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossServiceBeanMetaData beanMetaData)
+ throws ClassNotFoundException
+ {
+ super(server, cl, beanClassName, ejbName, domain, ctxProperties, deployment, beanMetaData);
+ }
+
+ @Override
+ public void create() throws Exception
+ {
+ super.create();
+ AbstractEJB3TestCase.bindJavaCompEntries(this);
+ }
+}
Added: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatefulContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatefulContainer.java (rev 0)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatefulContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.core.test.common;
+
+import java.util.Hashtable;
+import java.util.concurrent.ExecutorService;
+
+import org.jboss.aop.Domain;
+import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.ejb3.stateful.StatefulContainer;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+
+/**
+ * MockStatefulContainer
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class MockStatefulContainer extends StatefulContainer
+{
+
+ public MockStatefulContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossSessionBeanMetaData beanMetaData,
+ ExecutorService asynchronousExecutor) throws ClassNotFoundException
+ {
+ super(cl, beanClassName, ejbName, domain, ctxProperties, deployment, beanMetaData, asynchronousExecutor);
+ }
+
+ @Override
+ public void create() throws Exception
+ {
+ super.create();
+ AbstractEJB3TestCase.bindJavaCompEntries(this);
+ }
+
+}
Added: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatelessContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatelessContainer.java (rev 0)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/MockStatelessContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.core.test.common;
+
+import java.util.Hashtable;
+import java.util.concurrent.ExecutorService;
+
+import org.jboss.aop.Domain;
+import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.ejb3.stateless.StatelessContainer;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+
+/**
+ * MockSessionContainer
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class MockStatelessContainer extends StatelessContainer
+{
+
+ public MockStatelessContainer(ClassLoader cl, String beanClassName, String ejbName, Domain domain,
+ Hashtable ctxProperties, Ejb3Deployment deployment, JBossSessionBeanMetaData beanMetaData,
+ ExecutorService asynchronousExecutor) throws ClassNotFoundException
+ {
+ super(cl, beanClassName, ejbName, domain, ctxProperties, deployment, beanMetaData, asynchronousExecutor);
+ }
+
+ @Override
+ public void create() throws Exception
+ {
+ super.create();
+ AbstractEJB3TestCase.bindJavaCompEntries(this);
+ }
+}
Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1150/unit/WebServiceContextInjectionTestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1150/unit/WebServiceContextInjectionTestCase.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/ejbthree1150/unit/WebServiceContextInjectionTestCase.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -87,7 +87,7 @@
// TODO: wickedness
container.instantiated();
- container.processMetadata();
+ AbstractEJB3TestCase.processContainerMetaData(container);
// Register the Container in ObjectStore (MC)
String containerName = container.getObjectName().getCanonicalName();
@@ -145,7 +145,7 @@
// TODO: wickedness
container.instantiated();
- container.processMetadata();
+ AbstractEJB3TestCase.processContainerMetaData(container);
// Register the Container in ObjectStore (MC)
String containerName = container.getObjectName().getCanonicalName();
Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/MockStatefulContainer.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -27,6 +27,7 @@
import org.jboss.aop.Domain;
import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.ejb3.core.test.common.AbstractEJB3TestCase;
import org.jboss.ejb3.stateful.StatefulContainer;
import org.jboss.ejb3.test.common.MetaDataHelper;
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
@@ -48,6 +49,13 @@
}
@Override
+ public void create() throws Exception
+ {
+ super.create();
+ AbstractEJB3TestCase.bindJavaCompEntries(this);
+ }
+
+ @Override
public Serializable createSession()
{
// TODO Auto-generated method stub
Modified: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java 2010-11-19 10:15:08 UTC (rev 109388)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/test/cachepassivation/unit/CachePassivationUnitTestCase.java 2010-11-19 11:58:57 UTC (rev 109389)
@@ -53,6 +53,7 @@
import org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator;
import org.jboss.ejb3.context.naming.EJBContextBinder;
import org.jboss.ejb3.core.context.CurrentInvocationContextInterceptor;
+import org.jboss.ejb3.core.test.common.AbstractEJB3TestCase;
import org.jboss.ejb3.core.test.common.MockEjb3Deployment;
import org.jboss.ejb3.instantiator.impl.Ejb31SpecBeanInstantiator;
import org.jboss.ejb3.instantiator.spi.BeanInstantiatorRegistration;
@@ -65,6 +66,8 @@
import org.jboss.naming.JavaCompInitializer;
import org.jnp.server.SingletonNamingServer;
import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Test;
import org.mockito.Mockito;
/**
@@ -81,7 +84,8 @@
public static void shutdownEs(){
es.shutdownNow();
}
-
+
+ @Test
public void test1() throws Exception
{
new SingletonNamingServer();
@@ -144,7 +148,7 @@
MockStatefulContainer container = new MockStatefulContainer(cl, beanClassName, ejbName, domain, ctxProperties,
deployment, es);
container.instantiated();
- container.processMetadata();
+ AbstractEJB3TestCase.processContainerMetaData(container);
System.out.println("injectors = " + container.getInjectors());
Ejb3Registry.register(container);
try
@@ -176,7 +180,7 @@
String b = bean.ctx.toString();
System.out.println(ctx.getEJBContext());
System.out.println(bean.ctx);
- assertTrue(a.regionMatches(a.indexOf('{'), b, b.indexOf('{'), a.length() - a.indexOf('{')));
+ Assert.assertTrue(a.regionMatches(a.indexOf('{'), b, b.indexOf('{'), a.length() - a.indexOf('{')));
}
finally
{
More information about the jboss-cvs-commits
mailing list