dain 2004/04/03 17:20:11
Modified: modules/core/src/test/org/openejb/deployment
EJBConfigBuilderTest.java
Log:
More deployment code.
The base structure is in, and now we just need to expand it.
Also fixed a bunch of serialization errors.
Revision Changes Path
1.2 +100 -3
openejb/modules/core/src/test/org/openejb/deployment/EJBConfigBuilderTest.java
Index: EJBConfigBuilderTest.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/test/org/openejb/deployment/EJBConfigBuilderTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EJBConfigBuilderTest.java 1 Apr 2004 22:36:53 -0000 1.1
+++ EJBConfigBuilderTest.java 3 Apr 2004 22:20:11 -0000 1.2
@@ -47,22 +47,36 @@
*/
package org.openejb.deployment;
+import java.io.BufferedInputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.InputStream;
+import java.io.ObjectInputStream;
import java.net.URL;
import java.net.URLClassLoader;
+import javax.ejb.EJBHome;
+import javax.management.ObjectName;
import org.apache.geronimo.common.xml.XmlBeansUtil;
+import
org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.jmx.GBeanMBean;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.config.Configuration;
+import org.apache.geronimo.kernel.management.State;
+import org.apache.geronimo.system.configuration.LocalConfigStore;
+import org.apache.geronimo.transaction.TransactionManagerProxy;
import org.apache.geronimo.xbeans.j2ee.EjbJarDocument;
import org.apache.geronimo.xbeans.j2ee.EjbJarType;
import org.apache.geronimo.xbeans.j2ee.SessionBeanType;
import junit.framework.TestCase;
+import org.openejb.xbeans.ejbjar.OpenejbOpenejbJarDocument;
import org.openejb.xbeans.ejbjar.OpenejbSessionBeanType;
/**
- *
- *
+ *
+ *
* @version $Revision$ $Date$
*/
public class EJBConfigBuilderTest extends TestCase {
@@ -93,6 +107,89 @@
} finally {
Thread.currentThread().setContextClassLoader(oldCl);
}
+ }
+
+ public void testBuildConfiguration() throws Exception {
+ EJBConfigBuilder configBuilder = new EJBConfigBuilder(null, null);
+ File ejbJarFile = new File("target/test-ejb-jar.jar");
+
+ ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+ ClassLoader cl = new URLClassLoader(new URL[] {ejbJarFile.toURL()}, oldCl);
+ URL ejbJarXml = cl.getResource("META-INF/openejb-jar.xml");
+
+ OpenejbOpenejbJarDocument plan = (OpenejbOpenejbJarDocument)
XmlBeansUtil.getXmlObject(ejbJarXml, OpenejbOpenejbJarDocument.type);
+
+ File carFile = File.createTempFile("OpenEJBTest", ".car");
+ Kernel kernel = null;
+ try {
+ configBuilder.buildConfiguration(carFile, ejbJarFile, plan);
+ File tempdir = new File(System.getProperty("java.io.tmpdir"));
+ File unpackedDir = new File(tempdir, "OpenEJBTest-Unpacked");
+ LocalConfigStore.unpack(unpackedDir, new FileInputStream(carFile));
+
+ GBeanMBean config = loadConfig(unpackedDir);
+
+ kernel = new Kernel("blah");
+ kernel.boot();
+
+ GBeanMBean tmGBean = new GBeanMBean(TransactionManagerProxy.GBEAN_INFO);
+ ObjectName tmObjectName =
ObjectName.getInstance("openejb:type=TransactionManager");
+ kernel.loadGBean(tmObjectName, tmGBean);
+ kernel.startGBean(tmObjectName);
+ assertRunning(kernel, tmObjectName);
+
+ GBeanMBean connectionTrackerGBean = new
GBeanMBean(ConnectionTrackingCoordinator.GBEAN_INFO);
+ ObjectName connectionTrackerObjectName =
ObjectName.getInstance("openejb:type=ConnectionTracker");
+ kernel.loadGBean(connectionTrackerObjectName, connectionTrackerGBean);
+ kernel.startGBean(connectionTrackerObjectName);
+ assertRunning(kernel, connectionTrackerObjectName);
+
+ ObjectName objectName =
ObjectName.getInstance("test:configuration=test-ejb-jar");
+ kernel.loadGBean(objectName, config);
+ config.setAttribute("BaseURL", unpackedDir.toURL());
+
+ kernel.startRecursiveGBean(objectName);
+ assertRunning(kernel, objectName);
+
+ ObjectName moduleName =
ObjectName.getInstance("openejb:j2eeType=EJBModule,J2EEServer=null,J2EEApplication=null,name=org/openejb/itests");
+ assertRunning(kernel, moduleName);
+
+ ObjectName sessionBeanName =
ObjectName.getInstance("openejb:j2eeType=StatelessSessionBean,J2EEServer=null,J2EEApplication=null,J2EEModule=org/openejb/itests,name=SimpleStatelessSession");
+ assertRunning(kernel, sessionBeanName);
+
+ // use reflection to invoke a method on the session bean, becuase we
don't have access to the classes here
+ Object home = kernel.getAttribute(sessionBeanName, "EJBHome");
+ assertTrue("Home is not an instance of EJBHome", home instanceof
EJBHome);
+ Object session = home.getClass().getMethod("create", null).invoke(home,
null);
+ assertEquals("TestResult", session.getClass().getMethod("echo", new
Class[] {String.class}).invoke(session, new Object[] {"TestResult"}));
+
+ kernel.stopGBean(objectName);
+ kernel.stopGBean(connectionTrackerObjectName);
+ kernel.stopGBean(tmObjectName);
+ } finally {
+ if (kernel != null) {
+ kernel.shutdown();
+ }
+ carFile.delete();
+ }
+ }
+
+ private void assertRunning(Kernel kernel, ObjectName objectName) throws
Exception {
+ int state = ((Integer)kernel.getAttribute(objectName, "state")).intValue();
+ assertEquals(State.RUNNING_INDEX, state);
+ }
+
+ private GBeanMBean loadConfig(File unpackedCar) throws Exception {
+ InputStream in = new FileInputStream(new File(unpackedCar,
"META-INF/config.ser"));
+ try {
+ ObjectInputStream ois = new ObjectInputStream(new
BufferedInputStream(in));
+ GBeanInfo gbeanInfo = Configuration.GBEAN_INFO;
+ GBeanMBean config = new GBeanMBean(gbeanInfo);
+ Configuration.loadGMBeanState(config, ois);
+ return config;
+ } finally {
+ in.close();
+ }
}
}