From: Mathieu Baudier Date: Tue, 17 Feb 2015 11:31:38 +0000 (+0000) Subject: Adapt to changes in Spring and OSGi (mostly generics) X-Git-Tag: argeo-slc-2.1.7~97 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=0d17b16f0082b7404009354544ea0b9c71b48f48;p=gpl%2Fargeo-slc.git Adapt to changes in Spring and OSGi (mostly generics) git-svn-id: https://svn.argeo.org/slc/trunk@7914 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java b/org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java index fe230e66e..97e579ff8 100644 --- a/org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java +++ b/org.argeo.slc.api/src/org/argeo/slc/DefaultNameVersion.java @@ -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; diff --git a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java b/org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java index a0bddd1e5..d6f878399 100644 --- a/org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java +++ b/org.argeo.slc.api/src/org/argeo/slc/deploy/ModuleDescriptor.java @@ -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; diff --git a/org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java b/org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java index bf6f3d3ca..ebd72c7e7 100644 --- a/org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java +++ b/org.argeo.slc.api/src/org/argeo/slc/execution/RealizedFlow.java @@ -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() { diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgent.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgent.java index aaa687fd7..c692820e7 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgent.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgent.java @@ -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); diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgentCli.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgentCli.java index d53b725a5..f790a7945 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgentCli.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultAgentCli.java @@ -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()); diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java index 433da9f14..90a9f026f 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java @@ -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(); diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java index 1365e6bc6..84c932ee2 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java @@ -117,7 +117,6 @@ public class ExecutionParameterPostProcessor extends return null; } - @SuppressWarnings(value = { "unchecked" }) public Object resolveValue(String beanName, Object bean, Object value) { if (value instanceof TypedStringValue) { TypedStringValue tsv = (TypedStringValue) value; @@ -138,7 +137,7 @@ public class ExecutionParameterPostProcessor extends } else if (value instanceof ManagedMap) { Map mapVal = (Map) value; - Map newContent = new ManagedMap(); + Map newContent = new ManagedMap(); boolean entriesModified = false; for (Iterator it = mapVal.entrySet().iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); @@ -156,7 +155,7 @@ public class ExecutionParameterPostProcessor extends return entriesModified ? newContent : value; } else if (value instanceof ManagedList) { List listVal = (List) value; - List newContent = new ManagedList(); + List newContent = new ManagedList(); boolean valueModified = false; for (int i = 0; i < listVal.size(); i++) { @@ -170,7 +169,7 @@ public class ExecutionParameterPostProcessor extends return valueModified ? newContent : value; } else if (value instanceof ManagedSet) { Set setVal = (Set) value; - Set newContent = new ManagedSet(); + Set newContent = new ManagedSet(); boolean entriesModified = false; for (Iterator it = setVal.iterator(); it.hasNext();) { Object elem = it.next(); diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java index bf5ffef12..0b887da5a 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionResourcesFactoryBean.java @@ -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 { 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); diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionScope.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionScope.java index a2a5a9b0c..4ac0de200 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionScope.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ExecutionScope.java @@ -39,7 +39,7 @@ public class ExecutionScope implements Scope { private final ThreadLocal executionContext = new ThreadLocal(); private final ThreadLocal executionContextBeanName = new ThreadLocal(); - public Object get(String name, ObjectFactory objectFactory) { + public Object get(String name, ObjectFactory objectFactory) { if (log.isTraceEnabled()) log.debug("Get execution scoped bean " + name); diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/OsFileFactoryBean.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/OsFileFactoryBean.java index 52f91e1d5..e524970cf 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/OsFileFactoryBean.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/OsFileFactoryBean.java @@ -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 { 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 getObjectType() { return CharSequence.class; } diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ParameterRef.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ParameterRef.java index 5a9d9adcf..45dd0964f 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/ParameterRef.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/ParameterRef.java @@ -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 { private final static Log log = LogFactory.getLog(ParameterRef.class); private InstantiationManager instantiationManager; diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/SedFilteredResource.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/SedFilteredResource.java index 676918e98..c793f4963 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/SedFilteredResource.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/SedFilteredResource.java @@ -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, + InitializingBean { private Resource source; private List filters = new ArrayList(); @@ -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; diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/MergedLists.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/MergedLists.java index ab6f59efc..e1740e659 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/MergedLists.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/MergedLists.java @@ -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> { private List> lists = new ArrayList>(); public void setLists(List> lists) { this.lists = lists; } - public Object getObject() throws Exception { + public List getObject() throws Exception { List merged = new ArrayList(); for (List lst : lists) { merged.addAll(lst); diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/SystemCall.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/SystemCall.java index 8f031847e..b2d8723a6 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/SystemCall.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/tasks/SystemCall.java @@ -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; diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/AsFlowDecorator.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/AsFlowDecorator.java index ecdf5b56a..dceec1c5a 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/AsFlowDecorator.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/AsFlowDecorator.java @@ -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 executables = new ManagedList( + 1); String beanName = bean.getBeanName(); if (beanName == null) diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/FlowBeanDefinitionParser.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/FlowBeanDefinitionParser.java index ca64d12f5..7d2ab49a1 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/FlowBeanDefinitionParser.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/FlowBeanDefinitionParser.java @@ -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 args = new ManagedMap( + 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 executables = new ManagedList( + execElems.size()); for (Element child : execElems) { // child validity check is performed in xsd executables.add(NamespaceUtils.parseBeanOrReference(child, diff --git a/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/SpecBeanDefinitionParser.java b/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/SpecBeanDefinitionParser.java index 4ef3f9788..761e26dd1 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/SpecBeanDefinitionParser.java +++ b/org.argeo.slc.core/src/org/argeo/slc/core/execution/xml/SpecBeanDefinitionParser.java @@ -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 attributes = new ManagedMap(); // Primitives for (Element child : (List) DomUtils @@ -79,7 +78,8 @@ public class SpecBeanDefinitionParser extends if (choicesElem != null) { List choices = DomUtils.getChildElementsByTagName( choicesElem, "choice"); - ManagedList choiceBeans = new ManagedList(choices.size()); + ManagedList choiceBeans = new ManagedList( + 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 attributes, Element child, BeanDefinition beanDefinition, String nature) { String name = child.getAttribute("name"); attributes.put(name, beanDefinition); diff --git a/org.argeo.slc.core/src/org/argeo/slc/jcr/SlcJcrUtils.java b/org.argeo.slc.core/src/org/argeo/slc/jcr/SlcJcrUtils.java index 5c00bcffb..4c42661f9 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/jcr/SlcJcrUtils.java +++ b/org.argeo.slc.core/src/org/argeo/slc/jcr/SlcJcrUtils.java @@ -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 */ diff --git a/org.argeo.slc.core/src/org/argeo/slc/osgi/BundlesManager.java b/org.argeo.slc.core/src/org/argeo/slc/osgi/BundlesManager.java index 8c975eeef..9877c31e6 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/osgi/BundlesManager.java +++ b/org.argeo.slc.core/src/org/argeo/slc/osgi/BundlesManager.java @@ -15,9 +15,19 @@ */ 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 { 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> srs = getServiceRefSynchronous( + ApplicationContext.class, filter); + ServiceReference 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 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 Collection> getServiceRefSynchronous( + Class clss, String filter) throws InvalidSyntaxException { if (log.isTraceEnabled()) log.debug("Filter: '" + filter + "'"); - ServiceReference[] sfs = null; + Collection> 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 ServiceTracker newTracker(Class clss) { + ServiceTracker st = new ServiceTracker(bundleContext, clss, null); st.open(); return st; } - @SuppressWarnings(value = { "unchecked" }) public T getSingleService(Class clss, String filter, Boolean synchronous) { if (filter != null) Assert.isTrue(OsgiFilterUtils.isValidFilter(filter), "valid filter"); - ServiceReference[] sfs; + Collection> 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 getSingleServiceStrict(Class clss, String filter, diff --git a/org.argeo.slc.core/src/org/argeo/slc/osgi/FileSystemBundleRegister.java b/org.argeo.slc.core/src/org/argeo/slc/osgi/FileSystemBundleRegister.java index a068a4f8c..03f21c530 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/osgi/FileSystemBundleRegister.java +++ b/org.argeo.slc.core/src/org/argeo/slc/osgi/FileSystemBundleRegister.java @@ -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); } } } diff --git a/org.argeo.slc.core/src/org/argeo/slc/osgi/OsgiExecutionModulesManager.java b/org.argeo.slc.core/src/org/argeo/slc/osgi/OsgiExecutionModulesManager.java index 5718f2df0..f15be6bc2 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/osgi/OsgiExecutionModulesManager.java +++ b/org.argeo.slc.core/src/org/argeo/slc/osgi/OsgiExecutionModulesManager.java @@ -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 properties) { // FIXME why are properties null? - if(properties==null) + if (properties == null) return; OsgiBundle osgiBundle = asOsgiBundle(properties); if (executionFlows.containsKey(osgiBundle)) { diff --git a/org.argeo.slc.core/src/org/argeo/slc/osgi/build/BundleModularDistribution.java b/org.argeo.slc.core/src/org/argeo/slc/osgi/build/BundleModularDistribution.java index 51595750e..db7c7e8a1 100644 --- a/org.argeo.slc.core/src/org/argeo/slc/osgi/build/BundleModularDistribution.java +++ b/org.argeo.slc.core/src/org/argeo/slc/osgi/build/BundleModularDistribution.java @@ -37,7 +37,6 @@ public class BundleModularDistribution extends AbstractOsgiModularDistribution private String libDirectory = "/lib"; - @SuppressWarnings(value = { "unchecked" }) protected void fillDistributions( SortedMap distributions) throws Exception {