You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2006/08/04 20:49:47 UTC

svn commit: r428844 - in /geronimo/xbean/trunk: xbean-kernel/src/main/java/org/apache/xbean/kernel/ xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ xbean-kernel/src/test/java/org/apache/xbean/kernel/ xbean-kernel/src/test/java/org/apache/x...

Author: gnodet
Date: Fri Aug  4 11:49:46 2006
New Revision: 428844

URL: http://svn.apache.org/viewvc?rev=428844&view=rev
Log:
XBEAN-29: getClassLoaderFor used on spring based configuration with <classpath> does not return the custom classloader

Modified:
    geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/Kernel.java
    geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/ServiceFactory.java
    geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/StaticServiceFactory.java
    geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManager.java
    geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerFactory.java
    geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerRegistry.java
    geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/StandardKernel.java
    geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/KernelMonitorBroadcasterTest.java
    geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerRegistryTest.java
    geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerTest.java
    geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/StandardKernelTest.java
    geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/deployer/FileDeployer.java
    geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/main/KernelMain.java
    geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfiguration.java
    geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfigurationServiceFactory.java
    geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/loader/SpringLoader.java

Modified: geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/Kernel.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/Kernel.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/Kernel.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/Kernel.java Fri Aug  4 11:49:46 2006
@@ -71,11 +71,10 @@
      *
      * @param serviceName the unique name of the service in the kernel
      * @param serviceFactory the factory used to create the service
-     * @param classLoader the class loader to use for this service
      * @throws ServiceAlreadyExistsException if service is already registered with the specified name
      * @throws ServiceRegistrationException if the service is not restartable and an error occured while starting the service
      */
-    void registerService(ServiceName serviceName, ServiceFactory serviceFactory, ClassLoader classLoader) throws ServiceAlreadyExistsException, ServiceRegistrationException;
+    void registerService(ServiceName serviceName, ServiceFactory serviceFactory) throws ServiceAlreadyExistsException, ServiceRegistrationException;
 
     /**
      * Unregisters a service from this kernel.  The kernel will attempt to stop the service using the

Modified: geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/ServiceFactory.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/ServiceFactory.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/ServiceFactory.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/ServiceFactory.java Fri Aug  4 11:49:46 2006
@@ -130,4 +130,11 @@
      * @param serviceContext the context information for the service
      */
     void destroyService(ServiceContext serviceContext);
+    
+    /**
+     * Gets the class loader associated with this service.
+     *
+     * @return the class loader associated with the service
+     */
+    ClassLoader getClassLoader();
 }

Modified: geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/StaticServiceFactory.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/StaticServiceFactory.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/StaticServiceFactory.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/StaticServiceFactory.java Fri Aug  4 11:49:46 2006
@@ -28,6 +28,7 @@
  */
 public class StaticServiceFactory extends AbstractServiceFactory {
     private final Object service;
+    private final ClassLoader classLoader;
 
     /**
      * Creates a non-restartable service factory which will simply returns the specified service from the createService
@@ -39,6 +40,26 @@
     public StaticServiceFactory(Object service) throws NullPointerException {
         if (service == null) throw new NullPointerException("service is null");
         this.service = service;
+        ClassLoader cl = service.getClass().getClassLoader();
+        if (cl == null) {
+            cl = ClassLoader.getSystemClassLoader();
+        }
+        this.classLoader = cl;
+    }
+
+    /**
+     * Creates a non-restartable service factory which will simply returns the specified service from the createService
+     * method.
+     *
+     * @param service the static to which this factory "creates"
+     * @param classLoader the classLoader used to load the service class
+     * @throws NullPointerException if service or classLoader is null
+     */
+    public StaticServiceFactory(Object service, ClassLoader classLoader) throws NullPointerException {
+        if (service == null) throw new NullPointerException("service is null");
+        if (classLoader == null) throw new NullPointerException("classLoader is null");
+        this.service = service;
+        this.classLoader = classLoader;
     }
 
     public Class[] getTypes() {
@@ -76,4 +97,12 @@
      */
     public void destroyService(ServiceContext serviceContext) {
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    public ClassLoader getClassLoader() {
+        return classLoader;
+    }
+    
 }

Modified: geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManager.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManager.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManager.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManager.java Fri Aug  4 11:49:46 2006
@@ -31,7 +31,6 @@
 import org.apache.xbean.kernel.Kernel;
 import org.apache.xbean.kernel.KernelOperationInterruptedException;
 import org.apache.xbean.kernel.KernelOperationTimoutException;
-import org.apache.xbean.kernel.ServiceCondition;
 import org.apache.xbean.kernel.ServiceEvent;
 import org.apache.xbean.kernel.ServiceFactory;
 import org.apache.xbean.kernel.ServiceMonitor;
@@ -82,11 +81,6 @@
     private final Set serviceTypes;
 
     /**
-     * The class loader for this service.
-     */
-    private final ClassLoader classLoader;
-
-    /**
      * The monitor to which we fire service events.  The ServiceManager requires an asynchronous monitor becuse events are
      * fired from within the lock.  This helps to reduce complexity but will cause more services to sit in the
      * {@link ServiceState#STARTING} and {@link ServiceState#STOPPING} states since events are propagated in a separate
@@ -162,7 +156,6 @@
      * @param serviceId the unique id of this service in the kernel
      * @param serviceName the unique name of this service in the kernel
      * @param serviceFactory the factory used to create and destroy the service instance
-     * @param classLoader the class loader for this service
      * @param serviceMonitor the monitor of service events
      * @param timeoutDuration the maximum duration to wait for a lock
      * @param timeoutUnits the unit of measure for the timeoutDuration
@@ -171,7 +164,6 @@
             long serviceId,
             ServiceName serviceName,
             ServiceFactory serviceFactory,
-            ClassLoader classLoader,
             ServiceMonitor serviceMonitor,
             long timeoutDuration,
             TimeUnit timeoutUnits) {
@@ -180,11 +172,10 @@
         this.serviceId = serviceId;
         this.serviceName = serviceName;
         this.serviceFactory = serviceFactory;
-        this.classLoader = classLoader;
         this.serviceMonitor = serviceMonitor;
         this.timeoutDuration = timeoutDuration;
         this.timeoutUnits = timeoutUnits;
-        standardServiceContext = new StandardServiceContext(kernel, serviceName, classLoader);
+        standardServiceContext = new StandardServiceContext(kernel, serviceName, serviceFactory.getClassLoader());
         serviceTypes = Collections.unmodifiableSet(new LinkedHashSet(Arrays.asList(serviceFactory.getTypes())));
     }
 
@@ -225,7 +216,7 @@
             // method is called.  This should cause the stop logic of a stop condition to fire.
             lock("initialize");
             try {
-                stopCondition = new NonRestartableStopCondition(kernel, serviceName, classLoader, lock, serviceFactory);
+                stopCondition = new NonRestartableStopCondition(kernel, serviceName, serviceFactory.getClassLoader(), lock, serviceFactory);
             } finally {
                 unlock();
             }
@@ -325,7 +316,7 @@
      * @see Kernel#getClassLoaderFor(ServiceName)
      */
     public ClassLoader getClassLoader() {
-        return classLoader;
+        return serviceFactory.getClassLoader();
     }
 
     /**
@@ -405,7 +396,7 @@
                         serviceMonitor.serviceStarting(createServiceEvent());
 
                         // initialize the start conditions
-                        startCondition = new AggregateCondition(kernel, serviceName, classLoader, lock, serviceFactory.getStartConditions());
+                        startCondition = new AggregateCondition(kernel, serviceName, serviceFactory.getClassLoader(), lock, serviceFactory.getStartConditions());
                         startCondition.initialize();
                     }
 
@@ -572,7 +563,7 @@
                         state = ServiceState.STOPPING;
 
                         // initialize all of the stop conditions
-                        stopCondition = new AggregateCondition(kernel, serviceName, classLoader, lock, serviceFactory.getStopConditions());
+                        stopCondition = new AggregateCondition(kernel, serviceName, serviceFactory.getClassLoader(), lock, serviceFactory.getStopConditions());
                         stopCondition.initialize();
                     }
 
@@ -694,15 +685,15 @@
     }
 
     private ServiceEvent createServiceEvent() {
-        return new ServiceEvent(eventId.getAndIncrement(), kernel, serviceName, serviceFactory, classLoader, service, null, null);
+        return new ServiceEvent(eventId.getAndIncrement(), kernel, serviceName, serviceFactory, serviceFactory.getClassLoader(), service, null, null);
     }
 
     private ServiceEvent createWaitingServiceEvent(Set unsatisfiedConditions) {
-        return new ServiceEvent(eventId.getAndIncrement(), kernel, serviceName, serviceFactory, classLoader, service, null, unsatisfiedConditions);
+        return new ServiceEvent(eventId.getAndIncrement(), kernel, serviceName, serviceFactory, serviceFactory.getClassLoader(), service, null, unsatisfiedConditions);
     }
 
     private ServiceEvent createErrorServiceEvent(Throwable cause) {
-        return new ServiceEvent(eventId.getAndIncrement(), kernel, serviceName, serviceFactory, classLoader, null, cause, null);
+        return new ServiceEvent(eventId.getAndIncrement(), kernel, serviceName, serviceFactory, serviceFactory.getClassLoader(), null, cause, null);
     }
 
     public int hashCode() {

Modified: geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerFactory.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerFactory.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerFactory.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerFactory.java Fri Aug  4 11:49:46 2006
@@ -81,12 +81,11 @@
      * @param classLoader the classloader for the service
      * @return a new service manager
      */
-    public ServiceManager createServiceManager(long serviceId, ServiceName serviceName, ServiceFactory serviceFactory, ClassLoader classLoader) {
+    public ServiceManager createServiceManager(long serviceId, ServiceName serviceName, ServiceFactory serviceFactory) {
         return new ServiceManager(kernel,
                 serviceId,
                 serviceName,
                 serviceFactory,
-                classLoader,
                 new AsyncServiceMonitor(serviceMonitor, serviceExecutor),
                 timeoutDuration,
                 timeoutUnits);

Modified: geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerRegistry.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerRegistry.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerRegistry.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/ServiceManagerRegistry.java Fri Aug  4 11:49:46 2006
@@ -338,14 +338,12 @@
      *
      * @param serviceName the unique name of the service
      * @param serviceFactory the factory used to create the service
-     * @param classLoader the class loader to use for this service
      * @throws ServiceAlreadyExistsException if service is already registered with the specified name
      * @throws ServiceRegistrationException if the service is not restartable and an error occured while starting the service
      */
-    public void registerService(ServiceName serviceName, ServiceFactory serviceFactory, ClassLoader classLoader) throws ServiceAlreadyExistsException, ServiceRegistrationException {
+    public void registerService(ServiceName serviceName, ServiceFactory serviceFactory) throws ServiceAlreadyExistsException, ServiceRegistrationException {
         if (serviceName == null) throw new NullPointerException("serviceName is null");
         if (serviceFactory == null) throw new NullPointerException("serviceFactory is null");
-        if (classLoader == null) throw new NullPointerException("classLoader is null");
 
         if (!serviceFactory.isEnabled()) {
             throw new ServiceRegistrationException(serviceName,
@@ -386,8 +384,7 @@
                     existingRegistration = null;
                     ServiceManager serviceManager = serviceManagerFactory.createServiceManager(serviceId.getAndIncrement(),
                             serviceName,
-                            serviceFactory,
-                            classLoader);
+                            serviceFactory);
                     registrationTask = RegistryFutureTask.createRegisterTask(serviceManager);
                     serviceManagers.put(serviceName, registrationTask);
                     addTypeIndex(serviceManager, registrationTask);

Modified: geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/StandardKernel.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/StandardKernel.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/StandardKernel.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/main/java/org/apache/xbean/kernel/standard/StandardKernel.java Fri Aug  4 11:49:46 2006
@@ -210,15 +210,14 @@
     /**
      * {@inheritDoc}
      */
-    public void registerService(ServiceName serviceName, ServiceFactory serviceFactory, ClassLoader classLoader) throws ServiceAlreadyExistsException, ServiceRegistrationException {
+    public void registerService(ServiceName serviceName, ServiceFactory serviceFactory) throws ServiceAlreadyExistsException, ServiceRegistrationException {
         if (serviceName == null) throw new NullPointerException("serviceName is null");
         if (serviceFactory == null) throw new NullPointerException("serviceFactory is null");
-        if (classLoader == null) throw new NullPointerException("classLoader is null");
         if (!isRunning()) {
             throw new ServiceRegistrationException(serviceName, new IllegalStateException("Kernel is destroyed"));
         }
 
-        serviceManagerRegistry.registerService(serviceName, serviceFactory, classLoader);
+        serviceManagerRegistry.registerService(serviceName, serviceFactory);
     }
 
     /**

Modified: geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/KernelMonitorBroadcasterTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/KernelMonitorBroadcasterTest.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/KernelMonitorBroadcasterTest.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/KernelMonitorBroadcasterTest.java Fri Aug  4 11:49:46 2006
@@ -32,7 +32,7 @@
     private static final ServiceEvent SERVICE_EVENT = new ServiceEvent(0,
             new StandardKernel("test"),
             new StringServiceName("service-name"),
-            new StaticServiceFactory(new Object()),
+            new StaticServiceFactory(new Object(), KernelMonitorBroadcasterTest.class.getClassLoader()),
             ClassLoader.getSystemClassLoader(), 
             null,
             null,
@@ -172,4 +172,4 @@
             assertSame(THROWABLE, throwable);
         }
     }
-}
\ No newline at end of file
+}

Modified: geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerRegistryTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerRegistryTest.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerRegistryTest.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerRegistryTest.java Fri Aug  4 11:49:46 2006
@@ -146,7 +146,7 @@
     public void testDoubleRegister() throws Exception {
         register();
         try {
-            registry.registerService(SERVICE_NAME, SERVICE_FACTORY, CLASS_LOADER);
+            registry.registerService(SERVICE_NAME, SERVICE_FACTORY);
             fail("should have thrown an exception");
         } catch (ServiceAlreadyExistsException expected) {
             // expected
@@ -592,7 +592,7 @@
         serviceManager.setInitializeException(throwable);
         serviceManagerFactory.addServiceManager(serviceManager);
         try {
-            registry.registerService(SERVICE_NAME, SERVICE_FACTORY, CLASS_LOADER);
+            registry.registerService(SERVICE_NAME, SERVICE_FACTORY);
             assertNull(throwable);
         } catch (ServiceRegistrationException expected) {
             // expected
@@ -722,10 +722,9 @@
             super(null, null, null, 0, null);
         }
 
-        public ServiceManager createServiceManager(long serviceId, ServiceName serviceName, ServiceFactory serviceFactory, ClassLoader classLoader) {
+        public ServiceManager createServiceManager(long serviceId, ServiceName serviceName, ServiceFactory serviceFactory) {
             assertEquals(SERVICE_NAME, serviceName);
             assertEquals(SERVICE_FACTORY, serviceFactory);
-            assertEquals(CLASS_LOADER, classLoader);
             synchronized (serviceManagers) {
                 return (ServiceManager) serviceManagers.removeFirst();
             }
@@ -756,7 +755,6 @@
                     0,
                     new StringServiceName("MockService"),
                     new StaticServiceFactory(new Object()),
-                    null,
                     new NullServiceMonitor(),
                     0,
                     null);

Modified: geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerTest.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerTest.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/ServiceManagerTest.java Fri Aug  4 11:49:46 2006
@@ -67,7 +67,7 @@
     private final MockStartCondition startCondition = new MockStartCondition();
     private final MockStopCondition stopCondition = new MockStopCondition();
     private final MockServiceFactory serviceFactory = new MockServiceFactory();
-    private final ClassLoader classLoader = new URLClassLoader(new URL[0]);
+    private static final ClassLoader CLASSLOADER = new URLClassLoader(new URL[0]);
     private final MockServiceMonitor serviceMonitor = new MockServiceMonitor();
     private ServiceManager serviceManager;
 
@@ -77,7 +77,7 @@
     public void testInitialState() {
         assertSame(serviceName, serviceManager.getServiceName());
         assertSame(serviceFactory, serviceManager.getServiceFactory());
-        assertSame(classLoader, serviceManager.getClassLoader());
+        assertSame(CLASSLOADER, serviceManager.getClassLoader());
         assertEquals(0, serviceManager.getStartTime());
         assertNull(serviceManager.getService());
         assertSame(ServiceState.STOPPED, serviceManager.getState());
@@ -705,7 +705,7 @@
         assertSame(ServiceState.RUNNING, serviceManager.getState());
         assertSame(serviceName, serviceManager.getServiceName());
         assertSame(serviceFactory, serviceManager.getServiceFactory());
-        assertSame(classLoader, serviceManager.getClassLoader());
+        assertSame(CLASSLOADER, serviceManager.getClassLoader());
         assertTrue(serviceManager.getStartTime() > 0);
         assertNotNull(serviceManager.getService());
         assertNull(serviceMonitor.registered);
@@ -773,7 +773,7 @@
 
         assertSame(serviceName, serviceManager.getServiceName());
         assertSame(serviceFactory, serviceManager.getServiceFactory());
-        assertSame(classLoader, serviceManager.getClassLoader());
+        assertSame(CLASSLOADER, serviceManager.getClassLoader());
 
         if (serviceFactory.restartable) {
             assertSame(ServiceState.STOPPED, serviceManager.getState());
@@ -876,7 +876,7 @@
 
         assertSame(serviceName, serviceManager.getServiceName());
         assertSame(serviceFactory, serviceManager.getServiceFactory());
-        assertSame(classLoader, serviceManager.getClassLoader());
+        assertSame(CLASSLOADER, serviceManager.getClassLoader());
 
         // these events should never fire in response to start
         assertNull(serviceMonitor.registered);
@@ -1069,7 +1069,7 @@
 
         assertSame(serviceName, serviceManager.getServiceName());
         assertSame(serviceFactory, serviceManager.getServiceFactory());
-        assertSame(classLoader, serviceManager.getClassLoader());
+        assertSame(CLASSLOADER, serviceManager.getClassLoader());
 
         // these events should never fire in response to start
         assertNull(serviceMonitor.registered);
@@ -1254,7 +1254,7 @@
             assertSame(ServiceState.STOPPED, serviceManager.getState());
             assertSame(serviceName, serviceManager.getServiceName());
             assertSame(serviceFactory, serviceManager.getServiceFactory());
-            assertSame(classLoader, serviceManager.getClassLoader());
+            assertSame(CLASSLOADER, serviceManager.getClassLoader());
             assertEquals(0, serviceManager.getStartTime());
             assertNull(serviceManager.getService());
             // verify expected events fired
@@ -1272,7 +1272,7 @@
             assertSame(ServiceState.RUNNING, serviceManager.getState());
             assertSame(serviceName, serviceManager.getServiceName());
             assertSame(serviceFactory, serviceManager.getServiceFactory());
-            assertSame(classLoader, serviceManager.getClassLoader());
+            assertSame(CLASSLOADER, serviceManager.getClassLoader());
             assertTrue(serviceManager.getStartTime() > 0);
             assertNotNull(serviceManager.getService());
             assertNull(serviceMonitor.registered);
@@ -1356,7 +1356,6 @@
                 0,
                 serviceName,
                 serviceFactory,
-                classLoader,
                 serviceMonitor,
                 10,
                 TimeUnit.SECONDS);
@@ -1411,11 +1410,15 @@
             if (throwExceptionFromDestroy) throw destroyException;
             super.destroyService(serviceContext);
         }
+        
+        public ClassLoader getClassLoader() {
+            return CLASSLOADER;
+        }
 
         private void assertValidServiceContext(ServiceContext serviceContext) {
             assertSame(serviceName, serviceContext.getServiceName());
             assertSame(kernel, serviceContext.getKernel());
-            assertSame(classLoader, serviceContext.getClassLoader());
+            assertSame(CLASSLOADER, serviceContext.getClassLoader());
         }
 
     }
@@ -1501,7 +1504,7 @@
     private void assertValidServiceConditionContext(ServiceConditionContext context) {
         assertSame(serviceName, context.getServiceName());
         assertSame(kernel, context.getKernel());
-        assertSame(classLoader, context.getClassLoader());
+        assertSame(CLASSLOADER, context.getClassLoader());
     }
 
     private class MockServiceMonitor implements ServiceMonitor {
@@ -1582,7 +1585,7 @@
         private void assertValidEvent(ServiceEvent serviceEvent, boolean mustHaveService) {
             assertSame(serviceName, serviceEvent.getServiceName());
             assertSame(kernel, serviceEvent.getKernel());
-            assertSame(classLoader, serviceEvent.getClassLoader());
+            assertSame(CLASSLOADER, serviceEvent.getClassLoader());
             assertSame(serviceFactory, serviceEvent.getServiceFactory());
             if (mustHaveService) {
                 assertSame(SERVICE, serviceEvent.getService());
@@ -1640,7 +1643,7 @@
             throw new UnsupportedOperationException();
         }
 
-        public void registerService(ServiceName serviceName, ServiceFactory serviceFactory, ClassLoader classLoader) throws ServiceAlreadyExistsException, ServiceRegistrationException {
+        public void registerService(ServiceName serviceName, ServiceFactory serviceFactory) throws ServiceAlreadyExistsException, ServiceRegistrationException {
             throw new UnsupportedOperationException();
         }
 

Modified: geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/StandardKernelTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/StandardKernelTest.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/StandardKernelTest.java (original)
+++ geronimo/xbean/trunk/xbean-kernel/src/test/java/org/apache/xbean/kernel/standard/StandardKernelTest.java Fri Aug  4 11:49:46 2006
@@ -41,7 +41,7 @@
     private final StringServiceName serviceName = new StringServiceName("Service");
 //    private final StringServiceName ownedServiceName = new StringServiceName("OwnedService");
     private final MockServiceFactory serviceFactory = new MockServiceFactory();
-    private final ClassLoader classLoader = new URLClassLoader(new URL[0]);
+    private static final ClassLoader CLASSLOADER = new URLClassLoader(new URL[0]);
 
     /**
      * Tests the initial state of the kernel is as expected.
@@ -233,10 +233,10 @@
      * @throws Exception if a problem occurs
      */ 
     public void testSimpleLifecycle() throws Exception {
-        kernel.registerService(serviceName, serviceFactory, classLoader);
+        kernel.registerService(serviceName, serviceFactory);
         assertTrue(kernel.isRegistered(serviceName));
         assertSame(serviceFactory, kernel.getServiceFactory(serviceName));
-        assertSame(classLoader, kernel.getClassLoaderFor(serviceName));
+        assertSame(CLASSLOADER, kernel.getClassLoaderFor(serviceName));
         assertSame(ServiceState.STOPPED, kernel.getServiceState(serviceName));
         assertNull(kernel.getService(serviceName));
         assertEquals(0, kernel.getServiceStartTime(serviceName));
@@ -247,7 +247,7 @@
         private boolean restartable = true;
 
         private MockServiceFactory() throws NullPointerException {
-            super(SERVICE);
+            super(SERVICE, CLASSLOADER);
         }
 
         public boolean isRestartable() {

Modified: geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/deployer/FileDeployer.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/deployer/FileDeployer.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/deployer/FileDeployer.java (original)
+++ geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/deployer/FileDeployer.java Fri Aug  4 11:49:46 2006
@@ -29,7 +29,6 @@
 import org.apache.xbean.spring.context.SpringApplicationContext;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.core.io.FileSystemResource;
@@ -46,7 +45,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import java.util.Set;
 import java.util.StringTokenizer;
 
 /**
@@ -348,14 +346,7 @@
 
                 log.info("Registering spring services service: " + name + " from: " + file.getAbsolutePath() + " into the Kernel");
 
-                // TODO should we use the classLaoder we used to load the
-                // context
-                // or, if the XBean config file defined a new classloader,
-                // should we use the one
-                // from the ApplicationContext?
-                // classLoader = applicationContext.getClassLoader();
-
-                kernel.registerService(new StringServiceName(name), serviceFactory, classLoader);
+                kernel.registerService(new StringServiceName(name), serviceFactory);
             }
             finally {
                 Thread.currentThread().setContextClassLoader(oldClassLoader);

Modified: geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/main/KernelMain.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/main/KernelMain.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/main/KernelMain.java (original)
+++ geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/main/KernelMain.java Fri Aug  4 11:49:46 2006
@@ -155,7 +155,7 @@
 
                     try {
                         ServiceName serviceName = new StringServiceName(name);
-                        kernel.registerService(serviceName, new StaticServiceFactory(service), classLoader);
+                        kernel.registerService(serviceName, new StaticServiceFactory(service, classLoader));
                         kernel.startService(serviceName);
                     } catch (Exception e) {
                         throw new FatalStartupError("Unable to bind bootstrap service '" + name + "' into the kernel", e);

Modified: geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfiguration.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfiguration.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfiguration.java (original)
+++ geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfiguration.java Fri Aug  4 11:49:46 2006
@@ -59,6 +59,10 @@
 
         // read the configuration file from source
         applicationContext.refresh();
+        
+        // If the class loader was modified by an xml preprocessor,
+        // make sure we have the right one
+        classLoader = getClassLoader(applicationContext);
 
         try {
 
@@ -73,7 +77,7 @@
                 ServiceName serviceName = (ServiceName) entry.getValue();
 
                 Object bean = applicationContext.getBean(beanName);
-                StaticServiceFactory serviceFactory = new StaticServiceFactory(bean);
+                StaticServiceFactory serviceFactory = new StaticServiceFactory(bean, classLoader);
                 factories.put(serviceName, serviceFactory);
             }
             serviceFactories = Collections.unmodifiableMap(factories);
@@ -83,7 +87,7 @@
                 Map.Entry entry = (Map.Entry) iterator.next();
                 ServiceName serviceName = (ServiceName) entry.getKey();
                 StaticServiceFactory serviceFactory = (StaticServiceFactory) entry.getValue();
-                kernel.registerService(serviceName, serviceFactory, classLoader);
+                kernel.registerService(serviceName, serviceFactory);
             }
 
         } catch (ServiceAlreadyExistsException e) {
@@ -148,7 +152,7 @@
         return serviceNameIndex;
     }
 
-    private static ClassLoader getClassLoader(SpringApplicationContext applicationContext) {
+    protected static ClassLoader getClassLoader(SpringApplicationContext applicationContext) {
         ClassLoader classLoader = applicationContext.getClassLoader();
         if (classLoader == null) {
             classLoader = Thread.currentThread().getContextClassLoader();

Modified: geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfigurationServiceFactory.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfigurationServiceFactory.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfigurationServiceFactory.java (original)
+++ geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/configuration/SpringConfigurationServiceFactory.java Fri Aug  4 11:49:46 2006
@@ -130,6 +130,13 @@
         applicationContext.close();
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public ClassLoader getClassLoader() {
+        return SpringConfiguration.getClassLoader(applicationContext);
+    }
+    
     private static class ConfigurationStopCondition implements ServiceCondition {
         private final List ownedServiceConditions = new ArrayList();
 

Modified: geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/loader/SpringLoader.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/loader/SpringLoader.java?rev=428844&r1=428843&r2=428844&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/loader/SpringLoader.java (original)
+++ geronimo/xbean/trunk/xbean-server/src/main/java/org/apache/xbean/server/spring/loader/SpringLoader.java Fri Aug  4 11:49:46 2006
@@ -146,7 +146,7 @@
 
         ServiceName serviceName = new StringServiceName("configuration:" + location);
         ServiceFactory springConfigurationServiceFactory = new SpringConfigurationServiceFactory(applicationContext);
-        kernel.registerService(serviceName, springConfigurationServiceFactory, classLoader);
+        kernel.registerService(serviceName, springConfigurationServiceFactory);
         return serviceName;
     }
 }