dain        2004/10/04 19:00:48

  Modified:    modules/core/src/test/org/openejb/deployment
                        EJBConfigBuilderTest.java
  Log:

  Rewrote deployment to build output into a temp directory instead of into a packed 
jar file
  This will make adding support for manifest classpath entries trivial
  Changed entire system to meticulously track temp files and delete them asap
  
  Revision  Changes    Path
  1.34      +62 -120   
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.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- EJBConfigBuilderTest.java 30 Sep 2004 08:34:50 -0000      1.33
  +++ EJBConfigBuilderTest.java 4 Oct 2004 23:00:48 -0000       1.34
  @@ -50,9 +50,9 @@
   import java.io.BufferedInputStream;
   import java.io.File;
   import java.io.FileInputStream;
  -import java.io.FileOutputStream;
   import java.io.InputStream;
   import java.io.ObjectInputStream;
  +import java.net.URI;
   import java.net.URL;
   import java.net.URLClassLoader;
   import java.sql.Connection;
  @@ -61,27 +61,24 @@
   import java.util.HashSet;
   import java.util.Set;
   import java.util.jar.JarFile;
  -import java.util.jar.JarOutputStream;
   import javax.ejb.EJBHome;
   import javax.management.ObjectName;
   import javax.sql.DataSource;
   
   import junit.framework.TestCase;
  -import org.apache.geronimo.deployment.util.FileUtil;
  -import org.apache.geronimo.deployment.util.JarUtil;
  +import org.apache.geronimo.deployment.util.DeploymentUtil;
   import org.apache.geronimo.gbean.GBeanInfo;
   import org.apache.geronimo.gbean.jmx.GBeanMBean;
   import org.apache.geronimo.j2ee.deployment.EARConfigBuilder;
   import org.apache.geronimo.j2ee.deployment.EARContext;
  -import org.apache.geronimo.j2ee.deployment.Module;
   import org.apache.geronimo.j2ee.deployment.EJBRefContext;
  +import org.apache.geronimo.j2ee.deployment.Module;
   import org.apache.geronimo.j2ee.management.impl.J2EEServerImpl;
   import org.apache.geronimo.kernel.Kernel;
   import org.apache.geronimo.kernel.config.Configuration;
   import org.apache.geronimo.kernel.config.ConfigurationModuleType;
   import org.apache.geronimo.kernel.management.State;
   import org.apache.geronimo.naming.jmx.JMXReferenceFactory;
  -import org.apache.geronimo.system.configuration.LocalConfigStore;
   import org.apache.geronimo.system.serverinfo.ServerInfo;
   import org.openejb.ContainerIndex;
   import org.openejb.DeploymentHelper;
  @@ -97,103 +94,57 @@
       private Kernel kernel;
   
       public void testCreateResourceAdapterNameQuery() throws Exception {
  -        OpenEJBModuleBuilder builder = new OpenEJBModuleBuilder(null);
  -        EARContext earContext = new EARContext(null, null, 
ConfigurationModuleType.EJB, null, null, "geronimo.server", "geronimo", null, null, 
null, null, null, new EJBRefContext(builder));
  -        ObjectName testName = builder.createResourceAdapterQueryName(earContext, 
"TestResourceAdapterName");
  -        
assertEquals(ObjectName.getInstance("geronimo.server:j2eeType=ResourceAdapter,name=TestResourceAdapterName,J2EEServer=geronimo,*"),
 testName);
  -    }
  -
  -//    public void testCreateSessionBean() throws Exception {
  -//        OpenEJBModuleBuilder configBuilder = new OpenEJBModuleBuilder(kernel);
  -//        File ejbJarFile = new File("target/test-ejb-jar.jar");
  -//        assertTrue(ejbJarFile.canRead());
  -//
  -//        ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
  -//        ClassLoader cl = new URLClassLoader(new URL[]{ejbJarFile.toURL()}, oldCl);
  -//        URL ejbJarXml = cl.getResource("META-INF/ejb-jar.xml");
  -//        InputStream in = ejbJarXml.openStream();
  -//        in.close();
  -//
  -//        
assertNotNull(cl.loadClass("org.openejb.test.simple.slsb.SimpleStatelessSessionEJB"));
  -//
  -//        EjbJarDocument doc = (EjbJarDocument) 
XmlBeansUtil.getXmlObject(ejbJarXml, EjbJarDocument.type);
  -//        EjbJarType ejbJar = doc.getEjbJar();
  -//
  -//        SessionBeanType[] sessionBeans = 
ejbJar.getEnterpriseBeans().getSessionArray();
  -//
  -//        SessionBeanType sessionBean = sessionBeans[0];
  -//        OpenejbSessionBeanType openejbSessionBean = null;
  -//
  -//        TransactionPolicyHelper transactionPolicyHelper = new 
TransactionPolicyHelper(ejbJar.getAssemblyDescriptor().getContainerTransactionArray());
  -//
  -//        EARContext earContext = new EARContext(null,
  -//                null,
  -//                ConfigurationModuleType.EJB,
  -//                null,
  -//                null,
  -//                j2eeDomainName,
  -//                j2eeServerName,
  -//                null,
  -//                DeploymentHelper.TRANSACTIONCONTEXTMANAGER_NAME,
  -//                DeploymentHelper.TRACKEDCONNECTIONASSOCIATOR_NAME,
  -//                DeploymentHelper.TRANSACTIONALTIMER_NAME,
  -//                DeploymentHelper.NONTRANSACTIONALTIMER_NAME,
  -//                configBuilder);
  -//        try {
  -//            Thread.currentThread().setContextClassLoader(cl);
  -//            //     ((EjbJarType) 
ejbModule.getSpecDD()).getAssemblyDescriptor().getMethodPermissionArray(),
  -//            OpenejbOpenejbJarType openEJB = (OpenejbOpenejbJarType) 
configBuilder.getDeploymentPlan(JarUtil.createJarFile(ejbJarFile));
  -//            EJBModule module = new EJBModule("TestModule", 
URI.create("TestModule"), JarUtil.createJarFile(ejbJarFile), "/", ejbJar, openEJB, 
null);
  -//            configBuilder.getSessionBuilder().createBean(earContext, module, 
"containerId", sessionBean, openejbSessionBean, transactionPolicyHelper, null, cl);
  -//        } finally {
  -//            Thread.currentThread().setContextClassLoader(oldCl);
  -//        }
  -//    }
  +        File tempDir = null;
  +        try {
  +            tempDir = DeploymentUtil.createTempDir();
  +            OpenEJBModuleBuilder builder = new OpenEJBModuleBuilder(null);
  +            EARContext earContext = new EARContext(tempDir,
  +                    URI.create("id"),
  +                    ConfigurationModuleType.EJB,
  +                    URI.create("parentId"),
  +                    null,
  +                    "geronimo.server",
  +                    "geronimo",
  +                    null,
  +                    null,
  +                    null,
  +                    null,
  +                    null,
  +                    new EJBRefContext(builder));
  +
  +            ObjectName testName = 
builder.createResourceAdapterQueryName(earContext, "TestResourceAdapterName");
  +            
assertEquals(ObjectName.getInstance("geronimo.server:j2eeType=ResourceAdapter,name=TestResourceAdapterName,J2EEServer=geronimo,*"),
 testName);
  +        } finally {
  +            DeploymentUtil.recursiveDelete(tempDir);
  +        }
  +    }
   
       public void testBuildUnpackedModule() throws Exception {
  -        InstallAction action = new InstallAction() {
  -            private File ejbJarFile = new File("target/test-ejb-jar");
  -            public File getEjbJarFile() {
  -                return ejbJarFile;
  -            }
  -            public void install(OpenEJBModuleBuilder moduleBuilder, EARContext 
earContext, Module module) throws Exception {
  -                moduleBuilder.installModule(JarUtil.createJarFile(ejbJarFile), 
earContext, module);
  -            }
  -        };
  -        executeTestBuildModule(action);
  +        executeTestBuildModule(new File("target/test-ejb-jar"));
       }
    
       public void testBuildPackedModule() throws Exception {
  -        InstallAction action = new InstallAction() {
  -            private File ejbJarFile = new File("target/test-ejb-jar.jar");
  -            public File getEjbJarFile() {
  -                return ejbJarFile;
  -            }
  -            public void install(OpenEJBModuleBuilder moduleBuilder, EARContext 
earContext, Module module) throws Exception {
  -                moduleBuilder.installModule(new JarFile(ejbJarFile), earContext, 
module);
  -            }
  -        };
  -        executeTestBuildModule(action);
  +        executeTestBuildModule(new File("target/test-ejb-jar.jar"));
       }
       
  -    private void executeTestBuildModule(InstallAction action) throws Exception {
  +    private void executeTestBuildModule(File ejbJarFile) throws Exception {
           String j2eeApplicationName = "null";
           String j2eeModuleName = "org/openejb/deployment/test";
   
           OpenEJBModuleBuilder moduleBuilder = new OpenEJBModuleBuilder(kernel);
  -        File ejbJarFile = action.getEjbJarFile();
   
           ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
           ClassLoader cl = new URLClassLoader(new URL[]{ejbJarFile.toURL()}, oldCl);
   
           Thread.currentThread().setContextClassLoader(cl);
   
  -        JarFile jarFile = JarUtil.createJarFile(ejbJarFile);
  +        JarFile jarFile = DeploymentUtil.createJarFile(ejbJarFile);
           Module module = moduleBuilder.createModule(null, jarFile);
   
  -        File carFile = File.createTempFile("OpenEJBTest", ".car");
  +        File tempDir = null;
           try {
  -            EARContext earContext = new EARContext(new JarOutputStream(new 
FileOutputStream(carFile)),
  +            tempDir = DeploymentUtil.createTempDir();
  +            EARContext earContext = new EARContext(tempDir,
                       module.getConfigId(),
                       module.getType(),
                       module.getParentId(),
  @@ -207,20 +158,16 @@
                       DeploymentHelper.NONTRANSACTIONALTIMER_NAME,
                       new EJBRefContext(moduleBuilder));
   
  -            action.install(moduleBuilder, earContext, module);
  +            moduleBuilder.installModule(DeploymentUtil.createJarFile(ejbJarFile), 
earContext, module);
               earContext.getClassLoader(null);
               moduleBuilder.initContext(earContext, module, cl);
               moduleBuilder.addGBeans(earContext, module, cl);
               earContext.close();
   
  -            File tempdir = new File(System.getProperty("java.io.tmpdir"));
  -            File unpackedDir = new File(tempdir, "OpenEJBTest-Unpacked");
  -            FileUtil.recursiveDelete(unpackedDir);
  -            LocalConfigStore.unpack(unpackedDir, new FileInputStream(carFile));
  -
  -            verifyDeployment(unpackedDir, oldCl, j2eeDomainName, j2eeServerName, 
j2eeApplicationName, j2eeModuleName);
  +            verifyDeployment(tempDir, oldCl, j2eeDomainName, j2eeServerName, 
j2eeApplicationName, j2eeModuleName);
           } finally {
  -            carFile.delete();
  +            module.close();
  +            DeploymentUtil.recursiveDelete(tempDir);
           }
       }
   
  @@ -236,8 +183,9 @@
   
           Thread.currentThread().setContextClassLoader(cl);
   
  -        File carFile = File.createTempFile("OpenEJBTest", ".car");
  +        File tempDir = null;
           try {
  +            tempDir = DeploymentUtil.createTempDir();
               EARConfigBuilder earConfigBuilder = new EARConfigBuilder(
                       new ObjectName(j2eeDomainName + ":j2eeType=J2EEServer,name=" + 
j2eeServerName),
                       DeploymentHelper.TRANSACTIONCONTEXTMANAGER_NAME,
  @@ -253,17 +201,20 @@
                       null // kernel
               );
   
  -            JarFile jarFile = new JarFile(earFile);
  -            Object plan = earConfigBuilder.getDeploymentPlan(null, jarFile);
  -            earConfigBuilder.buildConfiguration(carFile, null, plan, jarFile);
  -
  -            File tempdir = new File(System.getProperty("java.io.tmpdir"));
  -            File unpackedDir = new File(tempdir, "OpenEJBTest-ear-Unpacked");
  -            LocalConfigStore.unpack(unpackedDir, new FileInputStream(carFile));
  +            JarFile jarFile = null;
  +            try {
  +                jarFile = new JarFile(earFile);
  +                Object plan = earConfigBuilder.getDeploymentPlan(null, jarFile);
  +                earConfigBuilder.buildConfiguration(plan, jarFile, tempDir);
  +            } finally {
  +                if (jarFile != null) {
  +                    jarFile.close();
  +                }
  +            }
   
  -            verifyDeployment(unpackedDir, oldCl, j2eeDomainName, j2eeServerName, 
j2eeApplicationName, j2eeModuleName);
  +            verifyDeployment(tempDir, oldCl, j2eeDomainName, j2eeServerName, 
j2eeApplicationName, j2eeModuleName);
           } finally {
  -            carFile.delete();
  +            DeploymentUtil.recursiveDelete(tempDir);
           }
       }
   
  @@ -279,8 +230,9 @@
   
           Thread.currentThread().setContextClassLoader(cl);
   
  -        File carFile = File.createTempFile("OpenEJBTest", ".car");
  +        File tempDir = null;
           try {
  +            tempDir = DeploymentUtil.createTempDir();
               EARConfigBuilder earConfigBuilder = new EARConfigBuilder(
                       new ObjectName(j2eeDomainName + ":j2eeType=J2EEServer,name=" + 
j2eeServerName),
                       DeploymentHelper.TRANSACTIONCONTEXTMANAGER_NAME,
  @@ -296,24 +248,20 @@
                       null // kernel
               );
   
  -            JarFile jarFile = JarUtil.createJarFile(earFile);
  +            JarFile jarFile = DeploymentUtil.createJarFile(earFile);
               Object plan = earConfigBuilder.getDeploymentPlan(null, jarFile);
  -            earConfigBuilder.buildConfiguration(carFile, null, plan, jarFile);
  -
  -            File tempdir = new File(System.getProperty("java.io.tmpdir"));
  -            File unpackedDir = new File(tempdir, "OpenEJBTest-ear-Unpacked");
  -            LocalConfigStore.unpack(unpackedDir, new FileInputStream(carFile));
  +            earConfigBuilder.buildConfiguration(plan, jarFile, tempDir);
   
  -            verifyDeployment(unpackedDir, oldCl, j2eeDomainName, j2eeServerName, 
j2eeApplicationName, j2eeModuleName);
  +            verifyDeployment(tempDir, oldCl, j2eeDomainName, j2eeServerName, 
j2eeApplicationName, j2eeModuleName);
           } finally {
  -            carFile.delete();
  +            DeploymentUtil.recursiveDelete(tempDir);
           }
       }
   
  -    private void verifyDeployment(File unpackedDir, ClassLoader cl, String 
j2eeDomainName, String j2eeServerName, String j2eeApplicationName, String 
j2eeModuleName) throws Exception {
  +    private void verifyDeployment(File tempDir, ClassLoader cl, String 
j2eeDomainName, String j2eeServerName, String j2eeApplicationName, String 
j2eeModuleName) throws Exception {
           DataSource ds = null;
           try {
  -            GBeanMBean config = loadConfig(unpackedDir);
  +            GBeanMBean config = loadConfig(tempDir);
   
               GBeanMBean containerIndexGBean = new 
GBeanMBean(ContainerIndex.GBEAN_INFO);
               ObjectName containerIndexObjectName = 
ObjectName.getInstance(j2eeDomainName + ":type=ContainerIndex");
  @@ -348,7 +296,7 @@
               // load the configuration
               ObjectName objectName = 
ObjectName.getInstance("test:configuration=test-ejb-jar");
               kernel.loadGBean(objectName, config);
  -            config.setAttribute("baseURL", unpackedDir.toURL());
  +            config.setAttribute("baseURL", tempDir.toURL());
   
               // start the configuration
               kernel.startRecursiveGBean(objectName);
  @@ -490,10 +438,4 @@
           DeploymentHelper.tearDownAdapter(kernel);
           kernel.shutdown();
       }
  -    
  -    private interface InstallAction {
  -        public File getEjbJarFile();
  -        public void install(OpenEJBModuleBuilder moduleBuilder, EARContext 
earContext, Module module) throws Exception;
  -    }
  -
   }
  
  
  

Reply via email to