maguro      2005/03/17 20:35:07

  Modified:    modules/core/src/java/org/openejb/corba/util
                        OpenORBStubClassLoader.java
  Log:

  Improved stub generator to generate stubs in org.omg.stubs.
  
  Revision  Changes    Path
  1.4       +52 -45    
openejb/modules/core/src/java/org/openejb/corba/util/OpenORBStubClassLoader.java
  
  Index: OpenORBStubClassLoader.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/util/OpenORBStubClassLoader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- OpenORBStubClassLoader.java       17 Mar 2005 08:23:46 -0000      1.3
  +++ OpenORBStubClassLoader.java       18 Mar 2005 01:35:07 -0000      1.4
  @@ -54,14 +54,16 @@
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  -import org.apache.geronimo.deployment.util.DeploymentUtil;
  +
   import org.apache.geronimo.gbean.GBeanInfo;
   import org.apache.geronimo.gbean.GBeanInfoBuilder;
   import org.apache.geronimo.gbean.GBeanLifecycle;
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
   import org.apache.geronimo.system.serverinfo.ServerInfo;
  +
   import org.openejb.corba.compiler.CompilerException;
   import org.openejb.corba.compiler.StubGenerator;
  +import org.openejb.util.FileUtils;
   
   
   /**
  @@ -69,7 +71,8 @@
    */
   public class OpenORBStubClassLoader extends ClassLoader implements 
GBeanLifecycle {
   
  -    private static Log log = LogFactory.getLog(OpenORBStubClassLoader.class);
  +    private final static Log log = 
LogFactory.getLog(OpenORBStubClassLoader.class);
  +    private final static String PACKAGE_PREFIX = "org.omg.stub.";
   
       private final static int STOPPED = 0;
       private final static int STARTED = 1;
  @@ -103,54 +106,56 @@
               if (log.isDebugEnabled()) log.debug("Unable to load class from 
the context class loader");
           }
   
  -        if (name.endsWith("_Stub")) {
  -            int begin = name.lastIndexOf('.') + 1;
  -            if (name.charAt(begin) == '_') {
  -                Map nameToLoaderMap = (Map) 
parentToNameToLoaderMap.get(classLoader);
  -                ClassLoader loader = null;
  -                if (nameToLoaderMap == null) {
  -                    nameToLoaderMap = new HashMap();
  -                    parentToNameToLoaderMap.put(classLoader, 
nameToLoaderMap);
  -                } else {
  -                    loader = (ClassLoader) nameToLoaderMap.get(name);
  -                }
  +        if (name.startsWith(PACKAGE_PREFIX)) {
   
  -                if (loader == null) {
  -                    URL url = (URL) nameToClassMap.get(name);
  -                    if (url == null) {
  -                        try {
  -
  -                            File file = new File(cacheDir, "STUB_" + 
(jarId++) + ".jar");
  -
  -                            if (log.isDebugEnabled()) log.debug("Generating 
stubs in " + file.toString());
  -
  -                            String iPackage = name.substring(0, begin);
  -                            String iName = iPackage + name.substring(begin + 
1, name.length() - 5);
  -                            
stubGenerator.generateStubs(Collections.singleton(iName), file, classLoader);
  -                            url = file.toURL();
  -                        } catch (IOException e) {
  -                            throw new ClassNotFoundException("Unable to 
generate stub", e);
  -                        } catch (CompilerException e) {
  -                            throw new ClassNotFoundException("Unable to 
generate stub", e);
  -                        }
  -                        loader = new URLClassLoader(new URL[]{url}, 
classLoader);
  -                        nameToLoaderMap.put(name, loader);
  +            Map nameToLoaderMap = (Map) 
parentToNameToLoaderMap.get(classLoader);
  +            ClassLoader loader = null;
  +            if (nameToLoaderMap == null) {
  +                nameToLoaderMap = new HashMap();
  +                parentToNameToLoaderMap.put(classLoader, nameToLoaderMap);
  +            } else {
  +                loader = (ClassLoader) nameToLoaderMap.get(name);
  +            }
  +
  +            if (loader == null) {
  +                URL url = (URL) nameToClassMap.get(name);
  +                if (url == null) {
  +                    try {
  +
  +                        File file = new File(cacheDir, "STUB_" + (jarId++) + 
".jar");
  +
  +                        if (log.isDebugEnabled()) log.debug("Generating 
stubs in " + file.toString());
  +
  +                        int begin = name.lastIndexOf('.') + 1;
  +                        String iPackage = name.substring(13, begin);
  +                        String iName = iPackage + name.substring(begin + 1, 
name.length() - 5);
  +
  +                        
stubGenerator.generateStubs(Collections.singleton(iName), file, classLoader);
  +
  +                        url = file.toURL();
  +                    } catch (IOException e) {
  +                        throw new ClassNotFoundException("Unable to generate 
stub", e);
  +                    } catch (CompilerException e) {
  +                        throw new ClassNotFoundException("Unable to generate 
stub", e);
                       }
  -                } else {
  -                    if (log.isDebugEnabled()) log.debug("Found cached 
loader");
  +                    loader = new URLClassLoader(new URL[]{url}, classLoader);
  +                    nameToLoaderMap.put(name, loader);
                   }
  +            } else {
  +                if (log.isDebugEnabled()) log.debug("Found cached loader");
  +            }
   
  -                result = loader.loadClass(name);
  +            result = loader.loadClass(name);
  +
  +            if (log.isDebugEnabled()) log.debug("result: " + (result == null 
? "NULL" : result.getName()));
  +            return result;
   
  -                if (log.isDebugEnabled()) log.debug("result: " + (result == 
null ? "NULL" : result.getName()));
  -                return result;
  -            }
           }
           throw new ClassNotFoundException("Could not load class: " + name);
       }
   
       public synchronized void doStart() throws Exception {
  -        DeploymentUtil.recursiveDelete(cacheDir);
  +        FileUtils.recursiveDelete(cacheDir);
           cacheDir.mkdirs();
   
           UtilDelegateImpl.setClassLoader(this);
  @@ -162,17 +167,19 @@
   
       public synchronized void doStop() throws Exception {
           this.state = STOPPED;
  +        
           parentToNameToLoaderMap.clear();
           nameToClassMap.clear();
  -        DeploymentUtil.recursiveDelete(cacheDir);
  +
  +        FileUtils.recursiveDelete(cacheDir);
   
           log.info("Stopped");
       }
   
       public synchronized void doFail() {
  -        DeploymentUtil.recursiveDelete(cacheDir);
  -
           this.state = STOPPED;
  +
  +        FileUtils.recursiveDelete(cacheDir);
   
           log.info("Failed");
       }
  
  
  

Reply via email to