Adapt to changes in Spring and OSGi (mostly generics)
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 17 Feb 2015 11:31:38 +0000 (11:31 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 17 Feb 2015 11:31:38 +0000 (11:31 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@7914 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

22 files changed:
org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java
org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java
org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgent.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgentCli.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionScope.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/OsFileFactoryBean.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/ParameterRef.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/SedFilteredResource.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/MergedLists.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/SystemCall.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/AsFlowDecorator.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/FlowBeanDefinitionParser.java
org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/SpecBeanDefinitionParser.java
org.argeo.slc.core/src/org/argeo/slc/jcr/SlcJcrUtils.java
org.argeo.slc.core/src/org/argeo/slc/osgi/BundlesManager.java
org.argeo.slc.core/src/org/argeo/slc/osgi/FileSystemBundleRegister.java
org.argeo.slc.core/src/org/argeo/slc/osgi/OsgiExecutionModulesManager.java
org.argeo.slc.core/src/org/argeo/slc/osgi/build/BundleModularDistribution.java

index fe230e66e8247e7fd8cc4595bcc61d48a1fc36f7..97e579ff81e5a1905c182dc9a7dce0e0264c1b4e 100644 (file)
@@ -25,6 +25,18 @@ public class DefaultNameVersion implements NameVersion,
        public DefaultNameVersion() {
        }
 
+       /** Interprets string in OSGi-like format my.module.name;version=0.0.0 */
+       public DefaultNameVersion(String nameVersion) {
+               int index = nameVersion.indexOf(";version=");
+               if (index < 0) {
+                       setName(nameVersion);
+                       setVersion(null);
+               } else {
+                       setName(nameVersion.substring(0, index));
+                       setVersion(nameVersion.substring(index + ";version=".length()));
+               }
+       }
+
        public DefaultNameVersion(String name, String version) {
                this.name = name;
                this.version = version;
index a0bddd1e56a415f79eae7f77fe551f0744060d8b..d6f878399d00ec49e09d11ecb383711c39679fc1 100644 (file)
@@ -19,10 +19,10 @@ import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.argeo.slc.BasicNameVersion;
+import org.argeo.slc.DefaultNameVersion;
 
 /** The description of a versioned module. */
-public class ModuleDescriptor extends BasicNameVersion implements Serializable {
+public class ModuleDescriptor extends DefaultNameVersion implements Serializable {
        private static final long serialVersionUID = 4310820315478645419L;
        private String title;
        private String description;
index bf6f3d3cab53961978a1ab60554b09db1ac99b10..ebd72c7e7b9d42a86ceecd9f0f5e0ab0eea416ff 100644 (file)
@@ -19,7 +19,7 @@ import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.argeo.slc.BasicNameVersion;
+import org.argeo.slc.DefaultNameVersion;
 import org.argeo.slc.NameVersion;
 
 /** A fully configured execution flow, ready to be executed. */
@@ -39,7 +39,7 @@ public class RealizedFlow implements Serializable {
        }
 
        public NameVersion getModuleNameVersion() {
-               return new BasicNameVersion(getModuleName(), getModuleVersion());
+               return new DefaultNameVersion(getModuleName(), getModuleVersion());
        }
 
        public String getModuleVersion() {
index aaa687fd77ccc9a78eba7eecf5601e4efb7f7a91..c692820e7cfc4d294b2a5aeda89109f49289a9a6 100644 (file)
@@ -26,7 +26,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
-import org.argeo.slc.BasicNameVersion;
+import org.argeo.slc.DefaultNameVersion;
 import org.argeo.slc.NameVersion;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.execution.ExecutionModuleDescriptor;
@@ -95,7 +95,7 @@ public class DefaultAgent implements SlcAgent {
                        String[] path = uri.getPath().split("/");
                        if (path.length < 3)
                                throw new SlcException("Badly formatted URI: " + uri);
-                       NameVersion nameVersion = new BasicNameVersion(path[1]);
+                       NameVersion nameVersion = new DefaultNameVersion(path[1]);
                        StringBuilder flow = new StringBuilder();
                        for (int i = 2; i < path.length; i++)
                                flow.append('/').append(path[i]);
@@ -149,13 +149,13 @@ public class DefaultAgent implements SlcAgent {
                ExecutionModuleDescriptor emd;
                try {
                        modulesManager
-                                       .start(new BasicNameVersion(moduleName, moduleVersion));
+                                       .start(new DefaultNameVersion(moduleName, moduleVersion));
                        emd = modulesManager.getExecutionModuleDescriptor(moduleName,
                                        moduleVersion);
                } catch (SlcException e) {
                        if (defaultModulePrefix != null) {
                                moduleName = defaultModulePrefix + "." + moduleName;
-                               modulesManager.start(new BasicNameVersion(moduleName,
+                               modulesManager.start(new DefaultNameVersion(moduleName,
                                                moduleVersion));
                                emd = modulesManager.getExecutionModuleDescriptor(moduleName,
                                                moduleVersion);
index d53b725a57a8a3dd71133163e7aaa3d2a6f51138..f790a7945552c4febda588504abd804a461dccc3 100644 (file)
@@ -11,7 +11,7 @@ import java.util.Map;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.security.OsAuthenticationToken;
-import org.argeo.slc.BasicNameVersion;
+import org.argeo.slc.DefaultNameVersion;
 import org.argeo.slc.NameVersion;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.execution.ExecutionFlowDescriptor;
@@ -67,7 +67,7 @@ public class DefaultAgentCli implements SlcAgentCli {
                                appendModule(emd, buf);
                        }
                } else if (args.length == 1 && !args[0].contains("/")) {// single module
-                       NameVersion nameVersion = new BasicNameVersion(args[0]);
+                       NameVersion nameVersion = new DefaultNameVersion(args[0]);
                        ExecutionModuleDescriptor emd = agent.getExecutionModuleDescriptor(
                                        nameVersion.getName(), nameVersion.getVersion());
                        appendModule(emd, buf);
@@ -91,7 +91,7 @@ public class DefaultAgentCli implements SlcAgentCli {
 
        protected void appendUriHelp(URI uri, StringBuilder buf) {
                String[] path = uri.getPath().split("/");
-               NameVersion nameVersion = new BasicNameVersion(path[1]);
+               NameVersion nameVersion = new DefaultNameVersion(path[1]);
                ExecutionModuleDescriptor emd = agent.getExecutionModuleDescriptor(
                                nameVersion.getName(), nameVersion.getVersion());
 
index 433da9f1401b2ea25171df1a8b2bfde26189a733..90a9f026f957b9190e487b7bee213527b25a72ef 100644 (file)
@@ -227,7 +227,6 @@ public class DefaultExecutionFlowDescriptorConverter implements
                return efd;
        }
 
-       @SuppressWarnings(value = { "unchecked" })
        protected RefValue buildRefValue(RefSpecAttribute rsa,
                        ExecutionFlow executionFlow, String key) {
                RefValue refValue = new RefValue();
index 1365e6bc67a9cab9ce1b4c388ce520011b738544..84c932ee21cf109f87d7a16c995aa25b98c0b219 100644 (file)
@@ -117,7 +117,6 @@ public class ExecutionParameterPostProcessor extends
                return null;\r
        }\r
 \r
-       @SuppressWarnings(value = { "unchecked" })\r
        public Object resolveValue(String beanName, Object bean, Object value) {\r
                if (value instanceof TypedStringValue) {\r
                        TypedStringValue tsv = (TypedStringValue) value;\r
@@ -138,7 +137,7 @@ public class ExecutionParameterPostProcessor extends
                } else if (value instanceof ManagedMap) {\r
                        Map<?, ?> mapVal = (Map<?, ?>) value;\r
 \r
-                       Map<Object, Object> newContent = new ManagedMap();\r
+                       Map<Object, Object> newContent = new ManagedMap<Object, Object>();\r
                        boolean entriesModified = false;\r
                        for (Iterator<?> it = mapVal.entrySet().iterator(); it.hasNext();) {\r
                                Map.Entry<?, ?> entry = (Map.Entry<?, ?>) it.next();\r
@@ -156,7 +155,7 @@ public class ExecutionParameterPostProcessor extends
                        return entriesModified ? newContent : value;\r
                } else if (value instanceof ManagedList) {\r
                        List<?> listVal = (List<?>) value;\r
-                       List<Object> newContent = new ManagedList();\r
+                       List<Object> newContent = new ManagedList<Object>();\r
                        boolean valueModified = false;\r
 \r
                        for (int i = 0; i < listVal.size(); i++) {\r
@@ -170,7 +169,7 @@ public class ExecutionParameterPostProcessor extends
                        return valueModified ? newContent : value;\r
                } else if (value instanceof ManagedSet) {\r
                        Set<?> setVal = (Set<?>) value;\r
-                       Set<Object> newContent = new ManagedSet();\r
+                       Set<Object> newContent = new ManagedSet<Object>();\r
                        boolean entriesModified = false;\r
                        for (Iterator<?> it = setVal.iterator(); it.hasNext();) {\r
                                Object elem = it.next();\r
index bf5ffef120442398ded8cad6cd052dac5228340e..0b887da5af4f2bf9f7cdd93f5e583f74924f7c80 100644 (file)
@@ -19,12 +19,12 @@ import org.springframework.beans.factory.FactoryBean;
 import org.springframework.core.io.Resource;
 import org.springframework.util.Assert;
 
-/** Workaround when execution placedholders needs to be passed.*/
-public class ExecutionResourcesFactoryBean implements FactoryBean {
+/** Workaround when execution placedholders needs to be passed. */
+public class ExecutionResourcesFactoryBean implements FactoryBean<Resource> {
        private ExecutionResources executionResources;
        private String relativePath;
 
-       public Object getObject() throws Exception {
+       public Resource getObject() throws Exception {
                Assert.notNull(executionResources, "executionResources is null");
                Assert.notNull(relativePath, "relativePath is null");
                return executionResources.getWritableResource(relativePath);
index a2a5a9b0ca7f81ec3f0a949c7ad10469e8768210..4ac0de200751769f7c13bbca964f2f5a6544df8a 100644 (file)
@@ -39,7 +39,7 @@ public class ExecutionScope implements Scope {
        private final ThreadLocal<ExecutionContext> executionContext = new ThreadLocal<ExecutionContext>();
        private final ThreadLocal<String> executionContextBeanName = new ThreadLocal<String>();
 
-       public Object get(String name, ObjectFactory objectFactory) {
+       public Object get(String name, ObjectFactory<?> objectFactory) {
                if (log.isTraceEnabled())
                        log.debug("Get execution scoped bean " + name);
 
index 52f91e1d5c756db9766e4d00d693c02db3546b50..e524970cfe1b9f817bcb4c4092434f86c50c25e8 100644 (file)
@@ -22,19 +22,19 @@ import org.springframework.core.io.Resource;
 import org.springframework.util.Assert;
 
 /** Retrieve an OS File from the given resource. */
-public class OsFileFactoryBean implements FactoryBean {
+public class OsFileFactoryBean implements FactoryBean<String> {
        private ExecutionResources executionResources;
        private Resource resource;
        private Boolean overwrite = false;
 
        /** Return an existing file on the file system. */
-       public Object getObject() throws Exception {
+       public String getObject() throws Exception {
                Assert.notNull(executionResources, "executionResources is null");
                Assert.notNull(resource, "resource is null");
                return executionResources.getAsOsPath(resource, overwrite);
        }
 
-       /** Return {@link Object} because CGLIB is unable to proxy {@link File}.*/
+       /** Return {@link Object} because CGLIB is unable to proxy {@link File}. */
        public Class<? extends Object> getObjectType() {
                return CharSequence.class;
        }
index 5a9d9adcfe0af3cb62ec5efb3be4e3696e4dc805..45dd0964fac5aaa6587512e703925fb7756530eb 100644 (file)
@@ -19,7 +19,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.FactoryBean;
 
-public class ParameterRef implements FactoryBean {
+public class ParameterRef implements FactoryBean<Object> {
        private final static Log log = LogFactory.getLog(ParameterRef.class);
 
        private InstantiationManager instantiationManager;
index 676918e981f5902e24d3c0d2bf2958f8f7ad291c..c793f4963a6168b46f34c27b26a127db27baf3f5 100644 (file)
@@ -39,7 +39,8 @@ import org.springframework.core.io.ByteArrayResource;
 import org.springframework.core.io.Resource;
 
 /** Experimental and suboptimal */
-public class SedFilteredResource implements FactoryBean, InitializingBean {
+public class SedFilteredResource implements FactoryBean<Resource>,
+               InitializingBean {
        private Resource source;
 
        private List<String> filters = new ArrayList<String>();
@@ -51,7 +52,7 @@ public class SedFilteredResource implements FactoryBean, InitializingBean {
 
        // private CharsetEncoder encoder;
 
-       public Object getObject() throws Exception {
+       public Resource getObject() throws Exception {
                if (filters.size() == 0)
                        return source;
 
index ab6f59efc960fd4a737c14c5c130acd1b4738a6a..e1740e6594766e1b3fdca508f1a629791e441241 100644 (file)
@@ -21,14 +21,14 @@ import java.util.List;
 import org.springframework.beans.factory.FactoryBean;
 
 /** Merge the provided lists in one single list, in the order provided. */
-public class MergedLists implements FactoryBean {
+public class MergedLists implements FactoryBean<List<Object>> {
        private List<List<Object>> lists = new ArrayList<List<Object>>();
 
        public void setLists(List<List<Object>> lists) {
                this.lists = lists;
        }
 
-       public Object getObject() throws Exception {
+       public List<Object> getObject() throws Exception {
                List<Object> merged = new ArrayList<Object>();
                for (List<Object> lst : lists) {
                        merged.addAll(lst);
index 8f031847edaec1db4e6ee269fa05cb092318f0e9..b2d8723a658c1b0eceff3288230bcf4009fbf674 100644 (file)
@@ -115,7 +115,9 @@ public class SystemCall implements Runnable {
        // TODO make it more secure and robust, test only once
        private final String sudoPrompt = UUID.randomUUID().toString();
        private String askPassProgram = "/usr/libexec/openssh/ssh-askpass";
+       @SuppressWarnings("unused")
        private boolean firstLine = true;
+       @SuppressWarnings("unused")
        private CallbackHandler callbackHandler;
        /** Chroot to the this path (must not be empty) */
        private String chroot = null;
index ecdf5b56a92220cb4e282e343110a0e2a4055432..dceec1c5a42e0bd94d76a62919eae40c7d4ab2dc 100644 (file)
@@ -20,6 +20,7 @@ import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.core.execution.DefaultExecutionFlow;
 import org.argeo.slc.execution.ExecutionFlow;
+import org.springframework.beans.BeanMetadataElement;
 import org.springframework.beans.factory.config.BeanDefinitionHolder;
 import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -33,7 +34,6 @@ import org.w3c.dom.Node;
 public class AsFlowDecorator implements BeanDefinitionDecorator {
        private Log log = LogFactory.getLog(AsFlowDecorator.class);
 
-       @SuppressWarnings("unchecked")
        public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder bean,
                        ParserContext ctx) {
                String attrValue = ((Attr) node).getValue();
@@ -49,7 +49,8 @@ public class AsFlowDecorator implements BeanDefinitionDecorator {
                                        + " is already defined.");
                BeanDefinitionBuilder flow = BeanDefinitionBuilder
                                .rootBeanDefinition(DefaultExecutionFlow.class);
-               ManagedList executables = new ManagedList(1);
+               ManagedList<BeanMetadataElement> executables = new ManagedList<BeanMetadataElement>(
+                               1);
 
                String beanName = bean.getBeanName();
                if (beanName == null)
index ca64d12f5296802d0bd40f9316317a49c5eec4cc..7d2ab49a1285176902ba1b5521f2ba120ff27aa5 100644 (file)
@@ -45,7 +45,6 @@ public class FlowBeanDefinitionParser extends
        /** Whether the user has already be warned on path attribute usage. */
        private Boolean warnedAboutPathAttribute = false;
 
-       @SuppressWarnings("unchecked")
        @Override
        protected void doParse(Element element, ParserContext parserContext,
                        BeanDefinitionBuilder builder) {
@@ -95,7 +94,8 @@ public class FlowBeanDefinitionParser extends
 
                // Arguments
                if (argsElems.size() != 0) {
-                       ManagedMap args = new ManagedMap(argsElems.size());
+                       ManagedMap<String, Object> args = new ManagedMap<String, Object>(
+                                       argsElems.size());
                        for (Element argElem : argsElems) {
                                Object value = NamespaceUtils.parseValue(argElem,
                                                parserContext, builder.getBeanDefinition(), null);
@@ -122,7 +122,8 @@ public class FlowBeanDefinitionParser extends
 
                // Executables
                if (execElems.size() != 0) {
-                       ManagedList executables = new ManagedList(execElems.size());
+                       ManagedList<Object> executables = new ManagedList<Object>(
+                                       execElems.size());
                        for (Element child : execElems) {
                                // child validity check is performed in xsd
                                executables.add(NamespaceUtils.parseBeanOrReference(child,
index 4ef3f978899d27fc5f9bae44784c2eb71327f9f6..761e26dd1e24a308258358422f9d52dc817a0dec 100644 (file)
@@ -38,14 +38,13 @@ public class SpecBeanDefinitionParser extends
                AbstractSingleBeanDefinitionParser {
        private Log log = LogFactory.getLog(SpecBeanDefinitionParser.class);
 
-       @SuppressWarnings("unchecked")
        @Override
        protected void doParse(Element element, ParserContext parserContext,
                        BeanDefinitionBuilder builder) {
                builder.getBeanDefinition().setDescription(
                                DomUtils.getChildElementValueByTagName(element, "description"));
 
-               ManagedMap attributes = new ManagedMap();
+               ManagedMap<String, BeanDefinition> attributes = new ManagedMap<String, BeanDefinition>();
 
                // Primitives
                for (Element child : (List<Element>) DomUtils
@@ -79,7 +78,8 @@ public class SpecBeanDefinitionParser extends
                        if (choicesElem != null) {
                                List<Element> choices = DomUtils.getChildElementsByTagName(
                                                choicesElem, "choice");
-                               ManagedList choiceBeans = new ManagedList(choices.size());
+                               ManagedList<BeanDefinition> choiceBeans = new ManagedList<BeanDefinition>(
+                                               choices.size());
                                for (Element choiceElem : choices) {
                                        BeanDefinitionBuilder choiceBuilder = BeanDefinitionBuilder
                                                        .genericBeanDefinition(RefValueChoice.class);
@@ -116,8 +116,8 @@ public class SpecBeanDefinitionParser extends
 
        }
 
-       @SuppressWarnings("unchecked")
-       protected void putInAttributes(ManagedMap attributes, Element child,
+       protected void putInAttributes(
+                       ManagedMap<String, BeanDefinition> attributes, Element child,
                        BeanDefinition beanDefinition, String nature) {
                String name = child.getAttribute("name");
                attributes.put(name, beanDefinition);
index 5c00bcffb1be2b49f0f28f01353cb6917ef93ae4..4c42661f9ce3eb90d6eef860ab0a12c401b41fc9 100644 (file)
@@ -28,7 +28,7 @@ import javax.jcr.nodetype.NodeType;
 
 import org.argeo.jcr.JcrUtils;
 import org.argeo.jcr.UserJcrUtils;
-import org.argeo.slc.BasicNameVersion;
+import org.argeo.slc.DefaultNameVersion;
 import org.argeo.slc.NameVersion;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.core.execution.PrimitiveAccessor;
@@ -78,7 +78,7 @@ public class SlcJcrUtils implements SlcNames {
                String module = tokens[AGENT_FACTORY_DEPTH + 2];
                String moduleName = module.substring(0, module.indexOf('_'));
                String moduleVersion = module.substring(module.indexOf('_') + 1);
-               return new BasicNameVersion(moduleName, moduleVersion);
+               return new DefaultNameVersion(moduleName, moduleVersion);
        }
 
        /** Module node name based on module name and version */
index 8c975eeef31ccdb853d95f6fd114043127eb09c6..9877c31e6662cb685b01cddae017b0183cc2af3f 100644 (file)
  */
 package org.argeo.slc.osgi;
 
+import java.util.Collection;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.SlcException;
+import org.eclipse.gemini.blueprint.context.BundleContextAware;
+import org.eclipse.gemini.blueprint.context.event.OsgiBundleApplicationContextEvent;
+import org.eclipse.gemini.blueprint.context.event.OsgiBundleApplicationContextListener;
+import org.eclipse.gemini.blueprint.context.event.OsgiBundleContextClosedEvent;
+import org.eclipse.gemini.blueprint.context.event.OsgiBundleContextFailedEvent;
+import org.eclipse.gemini.blueprint.context.event.OsgiBundleContextRefreshedEvent;
+import org.eclipse.gemini.blueprint.util.OsgiBundleUtils;
+import org.eclipse.gemini.blueprint.util.OsgiFilterUtils;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
@@ -31,19 +41,13 @@ import org.osgi.util.tracker.ServiceTracker;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ApplicationContext;
-import org.eclipse.gemini.blueprint.context.BundleContextAware;
-import org.eclipse.gemini.blueprint.context.event.OsgiBundleApplicationContextEvent;
-import org.eclipse.gemini.blueprint.context.event.OsgiBundleApplicationContextListener;
-import org.eclipse.gemini.blueprint.context.event.OsgiBundleContextClosedEvent;
-import org.eclipse.gemini.blueprint.context.event.OsgiBundleContextFailedEvent;
-import org.eclipse.gemini.blueprint.context.event.OsgiBundleContextRefreshedEvent;
-import org.eclipse.gemini.blueprint.util.OsgiBundleUtils;
-import org.eclipse.gemini.blueprint.util.OsgiFilterUtils;
 import org.springframework.util.Assert;
 
 /** Wraps low-level access to a {@link BundleContext} */
+@SuppressWarnings("deprecation")
 public class BundlesManager implements BundleContextAware, FrameworkListener,
-               InitializingBean, DisposableBean, OsgiBundleApplicationContextListener {
+               InitializingBean, DisposableBean,
+               OsgiBundleApplicationContextListener<OsgiBundleApplicationContextEvent> {
        private final static Log log = LogFactory.getLog(BundlesManager.class);
 
        private BundleContext bundleContext;
@@ -100,9 +104,9 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
                                        + ")";
                        // Wait for application context to be ready
                        // TODO: use service tracker
-                       ServiceReference[] srs = getServiceRefSynchronous(
-                                       ApplicationContext.class.getName(), filter);
-                       ServiceReference sr = srs[0];
+                       Collection<ServiceReference<ApplicationContext>> srs = getServiceRefSynchronous(
+                                       ApplicationContext.class, filter);
+                       ServiceReference<ApplicationContext> sr = srs.iterator().next();
                        long aAppContext = System.currentTimeMillis();
                        long end = aAppContext;
 
@@ -204,8 +208,8 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
 
        /** Refresh bundle synchronously. Does nothing if already started. */
        protected void refreshSynchronous(Bundle bundle) throws BundleException {
-               ServiceReference packageAdminRef = bundleContext
-                               .getServiceReference(PackageAdmin.class.getName());
+               ServiceReference<PackageAdmin> packageAdminRef = bundleContext
+                               .getServiceReference(PackageAdmin.class);
                PackageAdmin packageAdmin = (PackageAdmin) bundleContext
                                .getService(packageAdminRef);
                Bundle[] bundles = { bundle };
@@ -241,11 +245,11 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
                }
        }
 
-       public ServiceReference[] getServiceRefSynchronous(String clss,
-                       String filter) throws InvalidSyntaxException {
+       public <S> Collection<ServiceReference<S>> getServiceRefSynchronous(
+                       Class<S> clss, String filter) throws InvalidSyntaxException {
                if (log.isTraceEnabled())
                        log.debug("Filter: '" + filter + "'");
-               ServiceReference[] sfs = null;
+               Collection<ServiceReference<S>> sfs = null;
                boolean waiting = true;
                long begin = System.currentTimeMillis();
                do {
@@ -279,36 +283,34 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
        }
 
        /** Creates and open a new service tracker. */
-       public ServiceTracker newTracker(Class<?> clss) {
-               ServiceTracker st = new ServiceTracker(bundleContext, clss.getName(),
+       public <S> ServiceTracker<S, S> newTracker(Class<S> clss) {
+               ServiceTracker<S, S> st = new ServiceTracker<S, S>(bundleContext, clss,
                                null);
                st.open();
                return st;
        }
 
-       @SuppressWarnings(value = { "unchecked" })
        public <T> T getSingleService(Class<T> clss, String filter,
                        Boolean synchronous) {
                if (filter != null)
                        Assert.isTrue(OsgiFilterUtils.isValidFilter(filter), "valid filter");
-               ServiceReference[] sfs;
+               Collection<ServiceReference<T>> sfs;
                try {
                        if (synchronous)
-                               sfs = getServiceRefSynchronous(clss.getName(), filter);
+                               sfs = getServiceRefSynchronous(clss, filter);
                        else
-                               sfs = bundleContext
-                                               .getServiceReferences(clss.getName(), filter);
+                               sfs = bundleContext.getServiceReferences(clss, filter);
                } catch (InvalidSyntaxException e) {
                        throw new SlcException("Cannot retrieve service reference for "
                                        + filter, e);
                }
 
-               if (sfs == null || sfs.length == 0)
+               if (sfs == null || sfs.size() == 0)
                        return null;
-               else if (sfs.length > 1)
+               else if (sfs.size() > 1)
                        throw new SlcException("More than one execution flow found for "
                                        + filter);
-               return (T) bundleContext.getService(sfs[0]);
+               return (T) bundleContext.getService(sfs.iterator().next());
        }
 
        public <T> T getSingleServiceStrict(Class<T> clss, String filter,
index a068a4f8c65e0a5226591502e44f544ba9c06bf2..03f21c5304e2217530fb9181bb046ad382454178 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Set;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.osgi.framework.Constants;
@@ -50,8 +51,9 @@ public class FileSystemBundleRegister implements BundleRegister {
                        if (file.isDirectory()) {
 
                        } else {
+                               JarFile jarFile = null;
                                try {
-                                       JarFile jarFile = new JarFile(file);
+                                       jarFile = new JarFile(file);
                                        Manifest manifest = jarFile.getManifest();
                                        String symbolicName = manifest.getMainAttributes()
                                                        .getValue(Constants.BUNDLE_SYMBOLICNAME);
@@ -73,6 +75,8 @@ public class FileSystemBundleRegister implements BundleRegister {
                                        log.warn("Cannot scan " + file, e);
                                        if (log.isTraceEnabled())
                                                e.printStackTrace();
+                               } finally {
+                                       IOUtils.closeQuietly(jarFile);
                                }
                        }
                }
index 5718f2df025524dcd868713f7886e05548a54f40..f15be6bc211578af058842fd2b39ff23b0b7ac6a 100644 (file)
@@ -46,6 +46,7 @@ import org.argeo.slc.execution.ExecutionFlowDescriptorConverter;
 import org.argeo.slc.execution.ExecutionModuleDescriptor;
 import org.argeo.slc.execution.ExecutionModulesListener;
 import org.argeo.slc.execution.RealizedFlow;
+import org.eclipse.gemini.blueprint.service.importer.OsgiServiceLifecycleListener;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.BundleException;
@@ -53,7 +54,6 @@ import org.osgi.framework.BundleListener;
 import org.osgi.framework.Constants;
 import org.osgi.framework.launch.Framework;
 import org.springframework.context.ApplicationContext;
-import org.eclipse.gemini.blueprint.service.importer.OsgiServiceLifecycleListener;
 
 /** Execution modules manager implementation based on an OSGi runtime. */
 public class OsgiExecutionModulesManager extends
@@ -346,7 +346,7 @@ public class OsgiExecutionModulesManager extends
                                                + bundle.getSymbolicName() + ")";
                                try {
                                        bundlesManager.getServiceRefSynchronous(
-                                                       ApplicationContext.class.getName(), filter);
+                                                       ApplicationContext.class, filter);
                                } catch (Exception e) {
                                        // stop if application context not found
                                        bundle.stop();
@@ -497,7 +497,7 @@ public class OsgiExecutionModulesManager extends
        public synchronized void unregister(ExecutionFlow executionFlow,
                        Map<String, String> properties) {
                // FIXME why are properties null?
-               if(properties==null)
+               if (properties == null)
                        return;
                OsgiBundle osgiBundle = asOsgiBundle(properties);
                if (executionFlows.containsKey(osgiBundle)) {
index 51595750eec5afaa051e6eab5f62eac6d45c80d6..db7c7e8a13bed34dad86572b99fe62516af79ba8 100644 (file)
@@ -37,7 +37,6 @@ public class BundleModularDistribution extends AbstractOsgiModularDistribution
 
        private String libDirectory = "/lib";
 
-       @SuppressWarnings(value = { "unchecked" })
        protected void fillDistributions(
                        SortedMap<NameVersion, Distribution> distributions)
                        throws Exception {