]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/MultipleServiceExporterPostProcessor.java
resolution of Bug 242: ExecutionFlowGenerator implements Ordered instead of PriorityO...
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.osgi / src / main / java / org / argeo / slc / osgi / MultipleServiceExporterPostProcessor.java
index de759110f4ec1002a52691c94295593d0591489c..e8e2bda399659f149a98edd1c7a22034f7cbc3bf 100644 (file)
@@ -16,12 +16,12 @@ import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 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" })
 public class MultipleServiceExporterPostProcessor implements
-               BeanFactoryPostProcessor, PriorityOrdered {
+               BeanFactoryPostProcessor, Ordered {
        private final static Log log = LogFactory
                        .getLog(MultipleServiceExporterPostProcessor.class);
 
@@ -29,6 +29,10 @@ public class MultipleServiceExporterPostProcessor implements
 
        private Class osgiServiceFactoryClass = OsgiServiceFactoryBean.class;
 
+       private Boolean useServiceProviderContextClassLoader = false;
+       
+       private int order = Ordered.LOWEST_PRECEDENCE;
+
        public void postProcessBeanFactory(
                        ConfigurableListableBeanFactory beanFactory) throws BeansException {
                if (!(beanFactory instanceof BeanDefinitionRegistry)) {
@@ -50,6 +54,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);
 
@@ -77,6 +84,16 @@ public class MultipleServiceExporterPostProcessor implements
        }
 
        public int getOrder() {
-               return Ordered.LOWEST_PRECEDENCE;
+               return order;
+       }
+
+       public void setOrder(int order) {
+               this.order = order;
        }
+
+       public void setUseServiceProviderContextClassLoader(
+                       Boolean useServiceProviderContextClassLoader) {
+               this.useServiceProviderContextClassLoader = useServiceProviderContextClassLoader;
+       }
+
 }