]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/MultipleServiceExporterPostProcessor.java
Introduce relative resource sets
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.osgi / src / main / java / org / argeo / slc / osgi / MultipleServiceExporterPostProcessor.java
index 087a90facedebe67670fd9b1c550d82942ce0d97..f5d0a3853c46e70e34159b37bae3c30b970d05c8 100644 (file)
@@ -17,6 +17,7 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.beans.factory.support.RootBeanDefinition;
 import org.springframework.core.Ordered;
 import org.springframework.core.PriorityOrdered;
+import org.springframework.osgi.service.exporter.support.ExportContextClassLoader;
 import org.springframework.osgi.service.exporter.support.OsgiServiceFactoryBean;
 
 @SuppressWarnings(value = { "unchecked" })
@@ -29,6 +30,8 @@ public class MultipleServiceExporterPostProcessor implements
 
        private Class osgiServiceFactoryClass = OsgiServiceFactoryBean.class;
 
+       private Boolean useServiceProviderContextClassLoader = false;
+
        public void postProcessBeanFactory(
                        ConfigurableListableBeanFactory beanFactory) throws BeansException {
                if (!(beanFactory instanceof BeanDefinitionRegistry)) {
@@ -36,6 +39,8 @@ public class MultipleServiceExporterPostProcessor implements
                                        + BeanDefinitionRegistry.class);
                }
 
+               long begin = System.currentTimeMillis();
+
                // Merge all beans implementing these interfaces
                Set<String> beanNames = new HashSet<String>();
                for (Class clss : interfaces) {
@@ -48,6 +53,9 @@ public class MultipleServiceExporterPostProcessor implements
                        MutablePropertyValues mpv = new MutablePropertyValues();
                        mpv.addPropertyValue("interfaces", interfaces.toArray());
                        mpv.addPropertyValue("targetBeanName", beanName);
+                       if (useServiceProviderContextClassLoader)
+                               mpv.addPropertyValue("contextClassLoader",
+                                               ExportContextClassLoader.SERVICE_PROVIDER);
                        RootBeanDefinition bd = new RootBeanDefinition(
                                        osgiServiceFactoryClass, mpv);
 
@@ -58,6 +66,12 @@ public class MultipleServiceExporterPostProcessor implements
                        ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(
                                        exporterBeanName, bd);
                }
+
+               long end = System.currentTimeMillis();
+               if (log.isTraceEnabled())
+                       log.debug("Multiple services exported in " + (end - begin)
+                                       + " ms in bundle.");
+
        }
 
        public void setInterfaces(List<Class> interfaces) {
@@ -72,4 +86,9 @@ public class MultipleServiceExporterPostProcessor implements
                return Ordered.LOWEST_PRECEDENCE;
        }
 
+       public void setUseServiceProviderContextClassLoader(
+                       Boolean useServiceProviderContextClassLoader) {
+               this.useServiceProviderContextClassLoader = useServiceProviderContextClassLoader;
+       }
+
 }