[jboss-cvs] JBossAS SVN: r76696 - projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Aug 6 01:31:37 EDT 2008
Author: ALRubinger
Date: 2008-08-06 01:31:37 -0400 (Wed, 06 Aug 2008)
New Revision: 76696
Modified:
projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/AbstractEJB3TestCase.java
Log:
Add support to EJB3 Core Test Case Setup
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 2008-08-06 05:31:05 UTC (rev 76695)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/common/AbstractEJB3TestCase.java 2008-08-06 05:31:37 UTC (rev 76696)
@@ -22,15 +22,28 @@
package org.jboss.ejb3.core.test.common;
import java.net.URL;
+import java.util.Hashtable;
import org.jboss.aop.AspectManager;
import org.jboss.aop.AspectXmlLoader;
import org.jboss.aop.Domain;
import org.jboss.aop.DomainDefinition;
+import org.jboss.ejb3.DeploymentUnit;
+import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.ejb3.Ejb3Registry;
import org.jboss.ejb3.InitialContextFactory;
import org.jboss.ejb3.common.registrar.plugin.mc.Ejb3McRegistrar;
+import org.jboss.ejb3.common.registrar.spi.DuplicateBindException;
import org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator;
+import org.jboss.ejb3.common.registrar.spi.NotBoundException;
+import org.jboss.ejb3.session.SessionContainer;
+import org.jboss.ejb3.stateless.StatelessContainer;
+import org.jboss.ejb3.test.cachepassivation.MockDeploymentUnit;
+import org.jboss.ejb3.test.cachepassivation.MockEjb3Deployment;
+import org.jboss.ejb3.test.common.MetaDataHelper;
import org.jboss.ejb3.test.mc.bootstrap.EmbeddedTestMcBootstrap;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -44,57 +57,157 @@
public abstract class AbstractEJB3TestCase
{
private static EmbeddedTestMcBootstrap bootstrap;
-
+
+ private static final Logger log = Logger.getLogger(AbstractEJB3TestCase.class);
+
+ private static final String DOMAIN_NAME_SLSB = "Stateless Bean";
+
@AfterClass
public static void afterClass() throws Exception
{
URL url = Thread.currentThread().getContextClassLoader().getResource("ejb3-interceptors-aop.xml");
- if(url != null)
+ if (url != null)
AspectXmlLoader.undeployXML(url);
-
- if(bootstrap != null)
+
+ if (bootstrap != null)
bootstrap.shutdown();
bootstrap = null;
+
+ // Unbind Registrar
+ Ejb3RegistrarLocator.unbindRegistrar();
+
}
-
+
@BeforeClass
public static void beforeClass() throws Exception
{
// FIXME: weirdness in InitialContextFactory (see EJBTHREE-1097)
InitialContextFactory.close(null, null);
-
+
bootstrap = EmbeddedTestMcBootstrap.createEmbeddedMcBootstrap();
-
+
// Bind Registrar
- Ejb3RegistrarLocator.bindRegistrar(new Ejb3McRegistrar(bootstrap.getKernel()));
-
+ if (!Ejb3RegistrarLocator.isRegistrarBound())
+ {
+ Ejb3RegistrarLocator.bindRegistrar(new Ejb3McRegistrar(bootstrap.getKernel()));
+ }
+
deploy("basicbootstrap-beans.xml");
-
+
// TODO: AspectDeployment
URL url = Thread.currentThread().getContextClassLoader().getResource("ejb3-interceptors-aop.xml");
- if(url == null)
- throw new IllegalStateException("Can't find ejb3-interceptors-aop.xml on class loader " + Thread.currentThread().getContextClassLoader());
+ if (url == null)
+ throw new IllegalStateException("Can't find ejb3-interceptors-aop.xml on class loader "
+ + Thread.currentThread().getContextClassLoader());
AspectXmlLoader.deployXML(url);
}
-
+
private static void deploy(String resourceName)
{
URL url = Thread.currentThread().getContextClassLoader().getResource(resourceName);
- if(url == null)
+ if (url == null)
throw new IllegalArgumentException("Can't find a resource named '" + resourceName + "'");
assert bootstrap != null : "Can't deploy a resource, bootstrap is null";
bootstrap.deploy(url);
}
-
+
protected static EmbeddedTestMcBootstrap getBootstrap()
{
return bootstrap;
}
-
+
protected static Domain getDomain(String domainName)
{
DomainDefinition domainDef = AspectManager.instance().getContainer(domainName);
- if(domainDef == null) throw new IllegalArgumentException("No such domain '" + domainName + "'");
+ if (domainDef == null)
+ throw new IllegalArgumentException("No such domain '" + domainName + "'");
return (Domain) domainDef.getManager();
}
+
+ /**
+ * Creates and deploys a SLSB represented by the specified implementation classs
+ *
+ * @param beanImplementationClass
+ * @return
+ */
+ protected static StatelessContainer deploySlsb(Class<?> beanImplementationClass)
+ {
+ // Obtain TCL
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+
+ // Ensure jndi.properties is accessible
+ log.info("Found: " + cl.getResource("jndi.properties"));
+
+ // Obtain properties required of container construction
+ String beanClassname = beanImplementationClass.getName();
+ String ejbName = beanImplementationClass.getSimpleName();
+ Domain domain = getDomain(AbstractEJB3TestCase.DOMAIN_NAME_SLSB);
+ Hashtable<?, ?> ctxProperties = null;
+ DeploymentUnit unit = new MockDeploymentUnit();
+ Ejb3Deployment deployment = new MockEjb3Deployment(unit, null);
+
+ // Create metadata
+ JBossSessionBeanMetaData beanMetaData = MetaDataHelper.getMetadataFromBeanImplClass(beanImplementationClass);
+
+ // Create a SLSB Container
+ StatelessContainer container = null;
+ try
+ {
+ container = new StatelessContainer(cl, beanClassname, ejbName, domain, ctxProperties, deployment, beanMetaData);
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ throw new RuntimeException("Could not create SLSB Container for " + beanClassname, cnfe);
+ }
+
+ //FIXME
+ // Typically these steps are done by Ejb3Deployment
+ container.instantiated(); //TODO: Wickeness
+ container.processMetadata();
+ Ejb3Registry.register(container);
+
+ // Register the Container in ObjectStore (MC) - will also invoke lifecycle
+ String containerName = container.getObjectName().getCanonicalName();
+ try
+ {
+ Ejb3RegistrarLocator.locateRegistrar().bind(containerName, container);
+ }
+ catch (DuplicateBindException dbe)
+ {
+ try
+ {
+ container.stop();
+ }
+ catch (Exception e)
+ {
+ // Ignore
+ }
+ throw new RuntimeException("Object Store already has binding under " + containerName, dbe);
+ }
+
+ // Return
+ return container;
+ }
+
+ /**
+ * Undeploys the specified Container
+ *
+ * @param container
+ */
+ protected static void undeployEjb(SessionContainer container)
+ {
+ // Igonre a null container (maybe deployment did not succeed)
+ if (container == null)
+ return;
+
+ // Unbind and call approproate lifecycle events
+ try
+ {
+ Ejb3RegistrarLocator.locateRegistrar().unbind(container.getObjectName().getCanonicalName());
+ }
+ catch (NotBoundException nbe)
+ {
+ // Ignore
+ }
+ }
}
More information about the jboss-cvs-commits
mailing list