dblevins    2005/08/15 21:05:03

  Modified:    modules/core/src/java/org/openejb/alt/config
                        ConfigurationFactory.java
  Log:

  Don't use SafeToolkit for loading EJB classes.  Construct a new classloader, 
use that and throw it away.
  Reworked container building to do this.
  
  Revision  Changes    Path
  1.18      +42 -57    
openejb1/modules/core/src/java/org/openejb/alt/config/ConfigurationFactory.java
  
  Index: ConfigurationFactory.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb1/modules/core/src/java/org/openejb/alt/config/ConfigurationFactory.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- ConfigurationFactory.java 8 Aug 2005 00:48:07 -0000       1.17
  +++ ConfigurationFactory.java 16 Aug 2005 01:05:03 -0000      1.18
  @@ -52,41 +52,11 @@
   import java.util.Map;
   import java.util.Properties;
   import java.util.Vector;
  +import java.util.ArrayList;
   
   import org.openejb.OpenEJBException;
   import org.openejb.loader.SystemInstance;
  -import org.openejb.alt.assembler.classic.ConnectionManagerInfo;
  -import org.openejb.alt.assembler.classic.ConnectorInfo;
  -import org.openejb.alt.assembler.classic.ContainerInfo;
  -import org.openejb.alt.assembler.classic.ContainerSystemInfo;
  -import org.openejb.alt.assembler.classic.EjbLocalReferenceInfo;
  -import org.openejb.alt.assembler.classic.EjbReferenceInfo;
  -import org.openejb.alt.assembler.classic.EjbReferenceLocationInfo;
  -import org.openejb.alt.assembler.classic.EnterpriseBeanInfo;
  -import org.openejb.alt.assembler.classic.EntityBeanInfo;
  -import org.openejb.alt.assembler.classic.EntityContainerInfo;
  -import org.openejb.alt.assembler.classic.EnvEntryInfo;
  -import org.openejb.alt.assembler.classic.FacilitiesInfo;
  -import org.openejb.alt.assembler.classic.IntraVmServerInfo;
  -import org.openejb.alt.assembler.classic.JndiContextInfo;
  -import org.openejb.alt.assembler.classic.JndiEncInfo;
  -import org.openejb.alt.assembler.classic.ManagedConnectionFactoryInfo;
  -import org.openejb.alt.assembler.classic.MethodInfo;
  -import org.openejb.alt.assembler.classic.MethodPermissionInfo;
  -import org.openejb.alt.assembler.classic.MethodTransactionInfo;
  -import org.openejb.alt.assembler.classic.OpenEjbConfiguration;
  -import org.openejb.alt.assembler.classic.OpenEjbConfigurationFactory;
  -import org.openejb.alt.assembler.classic.QueryInfo;
  -import org.openejb.alt.assembler.classic.ResourceReferenceInfo;
  -import org.openejb.alt.assembler.classic.RoleMappingInfo;
  -import org.openejb.alt.assembler.classic.SecurityRoleInfo;
  -import org.openejb.alt.assembler.classic.SecurityRoleReferenceInfo;
  -import org.openejb.alt.assembler.classic.SecurityServiceInfo;
  -import org.openejb.alt.assembler.classic.StatefulBeanInfo;
  -import org.openejb.alt.assembler.classic.StatefulSessionContainerInfo;
  -import org.openejb.alt.assembler.classic.StatelessBeanInfo;
  -import org.openejb.alt.assembler.classic.StatelessSessionContainerInfo;
  -import org.openejb.alt.assembler.classic.TransactionServiceInfo;
  +import org.openejb.alt.assembler.classic.*;
   import org.openejb.alt.config.ejb11.ContainerTransaction;
   import org.openejb.alt.config.ejb11.EjbDeployment;
   import org.openejb.alt.config.ejb11.EjbJar;
  @@ -159,10 +129,10 @@
       //------------------------------------------------//
       public static OpenEjbConfiguration sys;
   
  -    private ContainerInfo[] cntrs;
  -    private EntityContainerInfo[] entyCntrs;
  -    private StatefulSessionContainerInfo[] stflCntrs;
  -    private StatelessSessionContainerInfo[] stlsCntrs;
  +    private ContainerInfo[] containers;
  +    private EntityContainerInfo[] entityContainers;
  +    private StatefulSessionContainerInfo[] sfsbContainers;
  +    private StatelessSessionContainerInfo[] slsbContainers;
   
       /**
        * Hash of container info objects for quick reference
  @@ -240,19 +210,28 @@
           // in this class
           initContainerInfos(openejb);
   
  -        sys.containerSystem.containers = cntrs;
  -        sys.containerSystem.entityContainers = entyCntrs;
  -        sys.containerSystem.statefulContainers = stflCntrs;
  -        sys.containerSystem.statelessContainers = stlsCntrs;
  +        sys.containerSystem.containers = containers;
  +        sys.containerSystem.entityContainers = entityContainers;
  +        sys.containerSystem.statefulContainers = sfsbContainers;
  +        sys.containerSystem.statelessContainers = slsbContainers;
   
  +        ArrayList ejbs = new ArrayList();
  +        ArrayList ejbJars = new ArrayList();
           for (int i = 0; i < jars.length; i++) {
               try {
  -                initEnterpriseBeanInfos(jars[i]);
  +                EjbJarInfo ejbJarInfo = initEjbJarInfo(jars[i]);
  +                if (ejbJarInfo == null){
  +                    continue;
  +                }
  +                ejbJars.add(ejbJarInfo);
  +                ejbs.addAll(Arrays.asList(ejbJarInfo.enterpriseBeans));
               } catch (Exception e) {
                   e.printStackTrace();
                   ConfigUtils.logger.i18n.warning("conf.0004", jars[i].jarURI, 
e.getMessage());
               }
           }
  +        sys.containerSystem.enterpriseBeans = (EnterpriseBeanInfo[]) 
ejbs.toArray(new EnterpriseBeanInfo[]{});
  +        sys.containerSystem.ejbJars = (EjbJarInfo[]) ejbJars.toArray(new 
EjbJarInfo[]{});
   
           // Add the defaults
           SecurityRoleInfo defaultRole = new SecurityRoleInfo();
  @@ -572,22 +551,22 @@
   
           }
   
  -        entyCntrs = new EntityContainerInfo[e.size()];
  -        e.copyInto(entyCntrs);
  +        entityContainers = new EntityContainerInfo[e.size()];
  +        e.copyInto(entityContainers);
   
  -        stflCntrs = new StatefulSessionContainerInfo[sf.size()];
  -        sf.copyInto(stflCntrs);
  +        sfsbContainers = new StatefulSessionContainerInfo[sf.size()];
  +        sf.copyInto(sfsbContainers);
   
  -        stlsCntrs = new StatelessSessionContainerInfo[sl.size()];
  -        sl.copyInto(stlsCntrs);
  +        slsbContainers = new StatelessSessionContainerInfo[sl.size()];
  +        sl.copyInto(slsbContainers);
   
           e.addAll(sf);
           e.addAll(sl);
  -        cntrs = new ContainerInfo[e.size()];
  -        e.copyInto(cntrs);
  +        this.containers = new ContainerInfo[e.size()];
  +        e.copyInto(this.containers);
   
  -        for (int i = 0; i < cntrs.length; i++) {
  -            containerTable.put(cntrs[i].containerName, cntrs[i]);
  +        for (int i = 0; i < this.containers.length; i++) {
  +            containerTable.put(this.containers[i].containerName, 
this.containers[i]);
           }
   
       }
  @@ -612,7 +591,7 @@
        * @param jar
        * @throws OpenEJBException
        */
  -    private void initEnterpriseBeanInfos(DeployedJar jar) throws 
OpenEJBException {
  +    private EjbJarInfo initEjbJarInfo(DeployedJar jar) throws 
OpenEJBException {
   
           int beansDeployed = jar.openejbJar.getEjbDeploymentCount();
           int beansInEjbJar = 
jar.ejbJar.getEnterpriseBeans().getEnterpriseBeansItemCount();
  @@ -622,13 +601,18 @@
               // Not all ejb in this jar have been deployed.
               // This jar cannot be loaded into the system and must
               // be skipped.
  -            return;
  +            return null;
           }
   
           Map ejbds = getDeployments(jar.openejbJar);
           Map infos = new HashMap();
           Map items = new HashMap();
  +
           EnterpriseBeanInfo[] beans = new EnterpriseBeanInfo[ejbds.size()];
  +        EjbJarInfo ejbJar = new EjbJarInfo();
  +        ejbJar.enterpriseBeans = beans;
  +        ejbJar.jarPath = jar.jarURI;
  +
           int i = -1;
   
           Enumeration bl = 
jar.ejbJar.getEnterpriseBeans().enumerateEnterpriseBeansItem();
  @@ -649,7 +633,7 @@
                   // the entire ejb jar is invalid and must be redeployed.
                   // This jar cannot be loaded into the system and must
                   // be skipped.
  -                return;
  +                return null;
               }
   
               deploymentIds.add(beans[i].ejbDeploymentId);
  @@ -684,6 +668,7 @@
           } catch (Exception e) {
               e.printStackTrace();
           }
  +        return ejbJar;
       }
   
       private void initJndiReferences(Map ejbds, Map infos, Map items) throws 
OpenEJBException {
  @@ -1076,8 +1061,8 @@
   
           // Now create the bean arrays of the specific container
           // type.
  -        for (int i = 0; i < entyCntrs.length; i++) {
  -            EnterpriseBeanInfo[] b = entyCntrs[i].ejbeans;
  +        for (int i = 0; i < entityContainers.length; i++) {
  +            EnterpriseBeanInfo[] b = entityContainers[i].ejbeans;
               EntityBeanInfo[] eb = new EntityBeanInfo[b.length];
               System.arraycopy(b, 0, eb, 0, b.length);
           }
  
  
  

Reply via email to