You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by hl...@apache.org on 2004/09/07 21:38:28 UTC

cvs commit: jakarta-hivemind/framework/src/java/org/apache/hivemind/service ClassFactory.java

hlship      2004/09/07 12:38:28

  Modified:    library/src/test/org/apache/hivemind/lib/pipeline Tag:
                        branch-1-0 TestPipelineAssembler.java
                        TestBridgeBuilder.java
               framework/src/java/org/apache/hivemind/service/impl Tag:
                        branch-1-0 ClassFactoryImpl.java
                        LoggingInterceptorFactory.java
               library/src/java/org/apache/hivemind/lib/impl Tag:
                        branch-1-0 EJBProxyFactory.java
                        ServicePropertyFactory.java
                        DefaultImplementationBuilderImpl.java
               framework/src/java/org/apache/hivemind/impl Tag: branch-1-0
                        ProxyBuilder.java
               library/src/test/hivemind/test/lib Tag: branch-1-0
                        TestDefaultImplementationBuilder.java
               .        Tag: branch-1-0 status.xml
               library/src/test/org/apache/hivemind/lib/impl Tag:
                        branch-1-0 TestServicePropertyFactory.java
               library/src/java/org/apache/hivemind/lib/pipeline Tag:
                        branch-1-0 BridgeBuilder.java
               framework/src/java/org/apache/hivemind/service Tag:
                        branch-1-0 ClassFactory.java
  Log:
  Change the API for ClassFactory to take a ClassLoader, not a Module.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.6.2.1   +15 -32    jakarta-hivemind/library/src/test/org/apache/hivemind/lib/pipeline/TestPipelineAssembler.java
  
  Index: TestPipelineAssembler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/test/org/apache/hivemind/lib/pipeline/TestPipelineAssembler.java,v
  retrieving revision 1.6
  retrieving revision 1.6.2.1
  diff -u -r1.6 -r1.6.2.1
  --- TestPipelineAssembler.java	18 Aug 2004 19:34:12 -0000	1.6
  +++ TestPipelineAssembler.java	7 Sep 2004 19:38:27 -0000	1.6.2.1
  @@ -179,14 +179,7 @@
   
           dib.setClassFactory(cf);
   
  -        MockControl moduleControl = newControl(Module.class);
  -        Module module = (Module) moduleControl.getMock();
  -
  -        module.getModuleId();
  -        moduleControl.setReturnValue("foo.bar");
  -
  -        module.getClassResolver();
  -        moduleControl.setReturnValue(new DefaultClassResolver());
  +        Module module = newModule();
   
           ErrorHandler eh = getErrorHandler();
           Log log = getLog();
  @@ -218,14 +211,7 @@
   
           dib.setClassFactory(cf);
   
  -        MockControl moduleControl = newControl(Module.class);
  -        Module module = (Module) moduleControl.getMock();
  -
  -        module.getModuleId();
  -        moduleControl.setReturnValue("foo.bar");
  -
  -        module.getClassResolver();
  -        moduleControl.setReturnValue(new DefaultClassResolver());
  +        Module module = newModule();
   
           PipelineAssembler pa =
               new PipelineAssembler(
  @@ -286,14 +272,7 @@
   
           dib.setClassFactory(cf);
   
  -        MockControl moduleControl = newControl(Module.class);
  -        Module module = (Module) moduleControl.getMock();
  -
  -        module.getModuleId();
  -        moduleControl.setReturnValue("foo.bar");
  -
  -        module.getClassResolver();
  -        moduleControl.setReturnValue(new DefaultClassResolver());
  +        Module module = newModule();
   
           PipelineFactory factory = new PipelineFactory();
           factory.setClassFactory(cf);
  @@ -337,14 +316,7 @@
   
           dib.setClassFactory(cf);
   
  -        MockControl moduleControl = newControl(Module.class);
  -        Module module = (Module) moduleControl.getMock();
  -
  -        module.getModuleId();
  -        moduleControl.setReturnValue("foo.bar");
  -
  -        module.getClassResolver();
  -        moduleControl.setReturnValue(new DefaultClassResolver());
  +        Module module = newModule();
   
           PipelineFactory factory = new PipelineFactory();
           factory.setClassFactory(cf);
  @@ -383,6 +355,17 @@
           assertEquals(18, s.run(9));
   
           verifyControls();
  +    }
  +
  +    private Module newModule()
  +    {
  +        MockControl control = newControl(Module.class);
  +        Module result = (Module) control.getMock();
  +
  +        result.getClassResolver();
  +        control.setReturnValue(new DefaultClassResolver());
  +
  +        return result;
       }
   
       /**
  
  
  
  1.3.2.1   +0 -3      jakarta-hivemind/library/src/test/org/apache/hivemind/lib/pipeline/TestBridgeBuilder.java
  
  Index: TestBridgeBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/test/org/apache/hivemind/lib/pipeline/TestBridgeBuilder.java,v
  retrieving revision 1.3
  retrieving revision 1.3.2.1
  diff -u -r1.3 -r1.3.2.1
  --- TestBridgeBuilder.java	29 Jul 2004 13:18:52 -0000	1.3
  +++ TestBridgeBuilder.java	7 Sep 2004 19:38:27 -0000	1.3.2.1
  @@ -39,9 +39,6 @@
           MockControl control = newControl(Module.class);
           Module result = (Module) control.getMock();
   
  -        result.getModuleId();
  -        control.setReturnValue("foo.bar");
  -
           result.getClassResolver();
           control.setReturnValue(new DefaultClassResolver());
   
  
  
  
  No                   revision
  No                   revision
  1.6.2.2   +19 -29    jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/ClassFactoryImpl.java
  
  Index: ClassFactoryImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/ClassFactoryImpl.java,v
  retrieving revision 1.6.2.1
  retrieving revision 1.6.2.2
  diff -u -r1.6.2.1 -r1.6.2.2
  --- ClassFactoryImpl.java	4 Sep 2004 14:38:49 -0000	1.6.2.1
  +++ ClassFactoryImpl.java	7 Sep 2004 19:38:27 -0000	1.6.2.2
  @@ -14,13 +14,12 @@
   
   package org.apache.hivemind.service.impl;
   
  -import java.util.HashMap;
  -import java.util.Map;
  +import java.util.HashSet;
  +import java.util.Set;
   
   import javassist.CtClass;
   
   import org.apache.hivemind.ApplicationRuntimeException;
  -import org.apache.hivemind.internal.Module;
   import org.apache.hivemind.service.ClassFab;
   import org.apache.hivemind.service.ClassFactory;
   
  @@ -32,24 +31,22 @@
   public class ClassFactoryImpl implements ClassFactory
   {
       /**
  -     * Map of CtClassSource, keyed on module id.
  -     */
  -    private Map _ctClassSourceMap = new HashMap();
  -
  -    /**
        * ClassPool shared by all modules (all CtClassSource instances).
        */
       private HiveMindClassPool _pool = new HiveMindClassPool();
  +    private CtClassSource _classSource = new CtClassSource(_pool);
  +
  +    private Set _addedClassLoaders = new HashSet();
   
  -    public ClassFab newClass(String name, Class superClass, Module module)
  +    public ClassFab newClass(String name, Class superClass, ClassLoader loader)
       {
  -        CtClassSource source = findCtClassSource(module);
  +        updateSourceForClassLoader(loader);
   
           try
           {
  -            CtClass ctNewClass = source.newClass(name, superClass);
  +            CtClass ctNewClass = _classSource.newClass(name, superClass);
   
  -            return new ClassFabImpl(source, ctNewClass);
  +            return new ClassFabImpl(_classSource, ctNewClass);
           }
           catch (Exception ex)
           {
  @@ -57,27 +54,20 @@
                   ServiceMessages.unableToCreateClass(name, superClass, ex),
                   ex);
           }
  -
       }
   
  -    private synchronized CtClassSource findCtClassSource(Module module)
  +    /**
  +     * Whenever a new class loader is encountered (which is, actually, 
  +     * fairly rare), update the pool (and, indirectly, the class source)
  +     * to search it as well.
  +     */
  +    private synchronized void updateSourceForClassLoader(ClassLoader loader)
       {
  -        String id = module.getModuleId();
  +        if (_addedClassLoaders.contains(loader))
  +            return;
   
  -        CtClassSource result = (CtClassSource) _ctClassSourceMap.get(id);
  +        _pool.appendClassLoader(loader);
   
  -        if (result == null)
  -        {
  -            ClassLoader moduleLoader = module.getClassResolver().getClassLoader();
  -
  -            _pool.appendClassLoader(moduleLoader);
  -
  -            result = new CtClassSource(_pool);
  -
  -            _ctClassSourceMap.put(id, result);
  -        }
  -
  -        return result;
  +        _addedClassLoaders.add(loader);
       }
  -
   }
  
  
  
  1.8.2.1   +2 -3      jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/LoggingInterceptorFactory.java
  
  Index: LoggingInterceptorFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/LoggingInterceptorFactory.java,v
  retrieving revision 1.8
  retrieving revision 1.8.2.1
  diff -u -r1.8 -r1.8.2.1
  --- LoggingInterceptorFactory.java	18 Aug 2004 19:34:11 -0000	1.8
  +++ LoggingInterceptorFactory.java	7 Sep 2004 19:38:27 -0000	1.8.2.1
  @@ -210,7 +210,8 @@
   
           String name = ClassFabUtils.generateClassName("Interceptor");
   
  -        ClassFab classFab = _factory.newClass(name, Object.class, module);
  +        ClassFab classFab =
  +            _factory.newClass(name, Object.class, module.getClassResolver().getClassLoader());
   
           classFab.addInterface(serviceInterfaceClass);
   
  @@ -272,8 +273,6 @@
                   ex);
           }
       }
  -
  -
   
       private boolean includeMethod(MethodMatcher matcher, MethodSignature sig)
       {
  
  
  
  No                   revision
  No                   revision
  1.8.2.1   +4 -1      jakarta-hivemind/library/src/java/org/apache/hivemind/lib/impl/EJBProxyFactory.java
  
  Index: EJBProxyFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/java/org/apache/hivemind/lib/impl/EJBProxyFactory.java,v
  retrieving revision 1.8
  retrieving revision 1.8.2.1
  diff -u -r1.8 -r1.8.2.1
  --- EJBProxyFactory.java	18 Aug 2004 23:20:11 -0000	1.8
  +++ EJBProxyFactory.java	7 Sep 2004 19:38:27 -0000	1.8.2.1
  @@ -70,7 +70,10 @@
           String proxyClassName = ClassFabUtils.generateClassName("EJBProxy");
   
           ClassFab classFab =
  -            _classFactory.newClass(proxyClassName, AbstractEJBProxy.class, invokingModule);
  +            _classFactory.newClass(
  +                proxyClassName,
  +                AbstractEJBProxy.class,
  +                invokingModule.getClassResolver().getClassLoader());
   
           classFab.addInterface(serviceInterface);
   
  
  
  
  1.4.2.1   +5 -1      jakarta-hivemind/library/src/java/org/apache/hivemind/lib/impl/ServicePropertyFactory.java
  
  Index: ServicePropertyFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/java/org/apache/hivemind/lib/impl/ServicePropertyFactory.java,v
  retrieving revision 1.4
  retrieving revision 1.4.2.1
  diff -u -r1.4 -r1.4.2.1
  --- ServicePropertyFactory.java	31 Aug 2004 20:02:14 -0000	1.4
  +++ ServicePropertyFactory.java	7 Sep 2004 19:38:27 -0000	1.4.2.1
  @@ -80,7 +80,11 @@
   
           String name = ClassFabUtils.generateClassName("ServicePropertyProxy");
   
  -        ClassFab cf = _classFactory.newClass(name, Object.class, invokingModule);
  +        ClassFab cf =
  +            _classFactory.newClass(
  +                name,
  +                Object.class,
  +                invokingModule.getClassResolver().getClassLoader());
   
           addInfrastructure(cf, targetService, serviceInterface, propertyName, readMethodName);
   
  
  
  
  1.3.2.1   +1 -1      jakarta-hivemind/library/src/java/org/apache/hivemind/lib/impl/DefaultImplementationBuilderImpl.java
  
  Index: DefaultImplementationBuilderImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/java/org/apache/hivemind/lib/impl/DefaultImplementationBuilderImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.3.2.1
  diff -u -r1.3 -r1.3.2.1
  --- DefaultImplementationBuilderImpl.java	12 Jun 2004 18:43:41 -0000	1.3
  +++ DefaultImplementationBuilderImpl.java	7 Sep 2004 19:38:27 -0000	1.3.2.1
  @@ -78,7 +78,7 @@
   
           String name = ClassFabUtils.generateClassName("DefaultImpl");
   
  -        ClassFab cf = _classFactory.newClass(name, Object.class, module);
  +        ClassFab cf = _classFactory.newClass(name, Object.class, module.getClassResolver().getClassLoader());
   
           cf.addInterface(interfaceType);
   
  
  
  
  No                   revision
  No                   revision
  1.5.2.1   +7 -3      jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ProxyBuilder.java
  
  Index: ProxyBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/ProxyBuilder.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- ProxyBuilder.java	25 Jun 2004 20:19:59 -0000	1.5
  +++ ProxyBuilder.java	7 Sep 2004 19:38:27 -0000	1.5.2.1
  @@ -53,7 +53,11 @@
           ClassFactory factory =
               (ClassFactory) module.getService("hivemind.ClassFactory", ClassFactory.class);
   
  -        _classFab = factory.newClass(ClassFabUtils.generateClassName(type), Object.class, module);
  +        _classFab =
  +            factory.newClass(
  +                ClassFabUtils.generateClassName(type),
  +                Object.class,
  +                module.getClassResolver().getClassLoader());
   
           _classFab.addInterface(_serviceInterface);
       }
  @@ -76,8 +80,8 @@
           Method[] methods = _serviceInterface.getMethods();
           for (int i = 0; i < methods.length; i++)
           {
  -        	Method m = methods[i];
  -        	
  +            Method m = methods[i];
  +
               builder.clear();
               builder.begin();
               builder.add("return ($r) ");
  
  
  
  No                   revision
  No                   revision
  1.7.2.1   +0 -3      jakarta-hivemind/library/src/test/hivemind/test/lib/TestDefaultImplementationBuilder.java
  
  Index: TestDefaultImplementationBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/test/hivemind/test/lib/TestDefaultImplementationBuilder.java,v
  retrieving revision 1.7
  retrieving revision 1.7.2.1
  diff -u -r1.7 -r1.7.2.1
  --- TestDefaultImplementationBuilder.java	19 Aug 2004 22:24:01 -0000	1.7
  +++ TestDefaultImplementationBuilder.java	7 Sep 2004 19:38:27 -0000	1.7.2.1
  @@ -53,9 +53,6 @@
           MockControl c = newControl(Module.class);
           _module = (Module) c.getMock();
   
  -        _module.getModuleId();
  -        c.setReturnValue("some.id");
  -
           _module.getClassResolver();
           c.setReturnValue(new DefaultClassResolver());
   
  
  
  
  No                   revision
  No                   revision
  1.57.2.5  +3 -0      jakarta-hivemind/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/status.xml,v
  retrieving revision 1.57.2.4
  retrieving revision 1.57.2.5
  diff -u -r1.57.2.4 -r1.57.2.5
  --- status.xml	7 Sep 2004 13:17:20 -0000	1.57.2.4
  +++ status.xml	7 Sep 2004 19:38:28 -0000	1.57.2.5
  @@ -52,6 +52,9 @@
         <action type="add" dev="HLS">
           Add <code>clearCache()</code> method to <code>PropertyUtils</code>.
         </action>
  +      <action type="update" dev="HLS">
  +        Change the API for <code>ClassFactory</code> to take a <code>ClassLoader</code>, not a <code>Module</code>.
  +      </action>
       </release>
     
       <release version="1.0-rc-1" date="Aug 25 2004">
  
  
  
  No                   revision
  No                   revision
  1.3.2.1   +0 -3      jakarta-hivemind/library/src/test/org/apache/hivemind/lib/impl/TestServicePropertyFactory.java
  
  Index: TestServicePropertyFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/test/org/apache/hivemind/lib/impl/TestServicePropertyFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.3.2.1
  diff -u -r1.3 -r1.3.2.1
  --- TestServicePropertyFactory.java	31 Aug 2004 20:02:14 -0000	1.3
  +++ TestServicePropertyFactory.java	7 Sep 2004 19:38:28 -0000	1.3.2.1
  @@ -47,9 +47,6 @@
           MockControl c = newControl(Module.class);
           Module result = (Module) c.getMock();
   
  -        result.getModuleId();
  -        c.setReturnValue("test.module");
  -
           result.getClassResolver();
           c.setReturnValue(new DefaultClassResolver());
   
  
  
  
  No                   revision
  No                   revision
  1.2.2.1   +1 -1      jakarta-hivemind/library/src/java/org/apache/hivemind/lib/pipeline/BridgeBuilder.java
  
  Index: BridgeBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/library/src/java/org/apache/hivemind/lib/pipeline/BridgeBuilder.java,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- BridgeBuilder.java	12 Jun 2004 18:43:41 -0000	1.2
  +++ BridgeBuilder.java	7 Sep 2004 19:38:28 -0000	1.2.2.1
  @@ -63,7 +63,7 @@
   
           String name = ClassFabUtils.generateClassName("PipelineBridge");
   
  -        _classFab = classFactory.newClass(name, Object.class, module);
  +        _classFab = classFactory.newClass(name, Object.class, module.getClassResolver().getClassLoader());
   
           _filterMethodAnalyzer = new FilterMethodAnalyzer(serviceInterface);
       }
  
  
  
  No                   revision
  No                   revision
  1.3.2.1   +6 -3      jakarta-hivemind/framework/src/java/org/apache/hivemind/service/ClassFactory.java
  
  Index: ClassFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/ClassFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.3.2.1
  diff -u -r1.3 -r1.3.2.1
  --- ClassFactory.java	17 Jun 2004 15:16:14 -0000	1.3
  +++ ClassFactory.java	7 Sep 2004 19:38:28 -0000	1.3.2.1
  @@ -14,8 +14,6 @@
   
   package org.apache.hivemind.service;
   
  -import org.apache.hivemind.internal.Module;
  -
   /**
    * Service used when dynamically creating new classes.
    *
  @@ -27,7 +25,12 @@
   	 * Creates a {@link ClassFab} object for the given name; the new class
   	 * is a subclass of the indicated class.  The new class
   	 * is public and concrete.
  +	 * 
  +	 * @param name the full qualified name of the class to create
  +	 * @param superClass the parent class, which is often java.lang.Object
  +	 * @param classLoader the class loader to use when resolving classes (this is usually
  +	 * provided by the containing {@link org.apache.hivemind.internal.Module}.
   	 */
   	
  -	public ClassFab newClass(String name, Class superClass, Module module);
  +	public ClassFab newClass(String name, Class superClass, ClassLoader classLoader);
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-cvs-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-cvs-help@jakarta.apache.org