You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/02/06 10:50:12 UTC
svn commit: r1657767 - in /felix/trunk/scr: ./
src/main/java/org/apache/felix/scr/impl/
src/main/java/org/apache/felix/scr/impl/config/
src/main/java/org/apache/felix/scr/impl/helper/
src/main/java/org/apache/felix/scr/impl/manager/
Author: cziegeler
Date: Fri Feb 6 09:50:11 2015
New Revision: 1657767
URL: http://svn.apache.org/r1657767
Log:
FELIX-4787 : DS implementation should work with R5
Modified:
felix/trunk/scr/bnd.bnd
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ScrShellCommand.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/ClassUtils.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java
Modified: felix/trunk/scr/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/trunk/scr/bnd.bnd?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/bnd.bnd (original)
+++ felix/trunk/scr/bnd.bnd Fri Feb 6 09:50:11 2015
@@ -14,7 +14,10 @@ Provide-Capability: osgi.extender;\
Export-Package: org.apache.felix.scr;version=1.8.1, \
org.apache.felix.scr.component;version=1.1.0, \
org.osgi.service.component;version=1.3;-split-package:=first, \
- org.osgi.service.component.runtime.*;version=1.3, \
+ org.osgi.service.component.runtime;version=1.3, \
+ org.osgi.service.component.runtime.dto;version=1.3, \
+ org.osgi.dto;version=1.0, \
+ org.osgi.framework.dto;version=1.8, \
org.osgi.util.function;version=1.0, \
org.osgi.util.promise;version=1.0
@@ -26,8 +29,10 @@ Private-Package: org.apache.felix.scr.im
# Metatype import is optional and dynamic, but allow eager wiring by importing it
# optional import for Gogo annotations
# The Felix Shell support is optional
-# Framework version 1.8 (from R6) is required because we depend on ServiceObjects
-# and prototype scope. being
+# Framework version 1.7 (from R5) is required
+# While the DS spec is based on R6 (because of prototype scope), this
+# implementation works on R5 as well; of course prototype scope is
+# not supported in that case.
# LogService is optional but if present the R4.0 version 1.3 is sufficient.
# PackageAdmin is used to find reference types if the component's bundle does not import it.
# See BindMethod.getParameterClass(Class) for details. R4.0 version 1.2 is sufficient.
@@ -36,12 +41,18 @@ Import-Package: \
org.osgi.service.metatype;version="[1.1,2)";resolution:=optional, \
org.apache.felix.service.command;resolution:=optional, \
org.apache.felix.shell;provide:=true;resolution:=optional, \
- org.osgi.framework;version="[1.8,2)", \
- org.osgi.dto;version=1.0, \
- org.osgi.framework.dto;version=1.8, \
+ org.osgi.dto, \
+ org.osgi.framework;version="[1.7,2)", \
+ org.osgi.framework.dto, \
+ org.osgi.util.function, \
+ org.osgi.util.promise, \
org.osgi.service.log;version="[1.3,2)";resolution:=optional, \
org.osgi.service.packageadmin;version="[1.2,2)";resolution:=optional, \
+ org.apache.felix.scr, \
+ org.apache.felix.scr.component, \
org.osgi.service.component;provide:=true, \
+ org.osgi.service.component.runtime;provide:=true, \
+ org.osgi.service.component.runtime.dto;provide:=true
DynamicImport-Package: \
org.osgi.service.cm;version="[1.2,2)", \
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ScrShellCommand.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ScrShellCommand.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ScrShellCommand.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ScrShellCommand.java Fri Feb 6 09:50:11 2015
@@ -20,7 +20,7 @@ package org.apache.felix.scr.impl;
import java.io.PrintStream;
import java.io.PrintWriter;
-import java.util.StringTokenizer;
+
import org.apache.felix.shell.Command;
/**
@@ -68,7 +68,7 @@ class ScrShellCommand implements Command
// Try to get the OBR command, default is HELP command.
String command = st.length > 1? st[1]: HELP_CMD;
String arg = (st.length > 2) ? st[2] : null;
-
+
// Perform the specified command.
if (command.equals(HELP_CMD))
{
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ScrManagedServiceMetaTypeProvider.java Fri Feb 6 09:50:11 2015
@@ -21,7 +21,6 @@ package org.apache.felix.scr.impl.config
import java.io.InputStream;
import java.util.ArrayList;
-import org.osgi.service.cm.ManagedService;
import org.osgi.service.metatype.AttributeDefinition;
import org.osgi.service.metatype.MetaTypeProvider;
import org.osgi.service.metatype.ObjectClassDefinition;
@@ -105,29 +104,29 @@ class ScrManagedServiceMetaTypeProvider
adList.add( new AttributeDefinitionImpl(
ScrConfiguration.PROP_INFO_SERVICE,
"Bind Info Service",
- "Whether to bind a service backing the console commands providing info on components.",
+ "Whether to bind a service backing the console commands providing info on components.",
this.getScrConfiguration().infoAsService() ) );
adList.add( new AttributeDefinitionImpl(
ScrConfiguration.PROP_LOCK_TIMEOUT,
"Lock timeout milliseconds",
- "How long a lock is held before releasing due to suspected deadlock",
+ "How long a lock is held before releasing due to suspected deadlock",
AttributeDefinition.LONG,
- new String[] { String.valueOf(this.getScrConfiguration().lockTimeout())},
+ new String[] { String.valueOf(this.getScrConfiguration().lockTimeout())},
0, null, null) );
adList.add( new AttributeDefinitionImpl(
ScrConfiguration.PROP_STOP_TIMEOUT,
"Stop timeout milliseconds",
- "How long stopping a bundle is waited for before continuing due to suspected deadlock",
+ "How long stopping a bundle is waited for before continuing due to suspected deadlock",
AttributeDefinition.LONG,
- new String[] { String.valueOf(this.getScrConfiguration().stopTimeout())},
+ new String[] { String.valueOf(this.getScrConfiguration().stopTimeout())},
0, null, null) );
adList.add( new AttributeDefinitionImpl(
ScrConfiguration.PROP_GLOBAL_EXTENDER,
"Global Extender",
- "Whether to extend all bundles whether or not visible to this bundle.",
+ "Whether to extend all bundles whether or not visible to this bundle.",
false ) );
return new ObjectClassDefinition()
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/BindMethod.java Fri Feb 6 09:50:11 2015
@@ -593,7 +593,7 @@ implements org.apache.felix.scr.impl.hel
break;
case serviceObjects:
- result[i++] = bp.getComponentContext().getComponentServiceObjectsHelper().getServiceObjects(refPair.getRef());
+ result[i++] = ((ComponentServiceObjectsHelper)bp.getComponentContext().getComponentServiceObjectsHelper()).getServiceObjects(refPair.getRef());
break;
case map:
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/ClassUtils.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/ClassUtils.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/ClassUtils.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/ClassUtils.java Fri Feb 6 09:50:11 2015
@@ -41,7 +41,7 @@ public class ClassUtils
public static final Class<?> SERVICE_REFERENCE_CLASS = ServiceReference.class;
- public static final Class<?> COMPONENTS_SERVICE_OBJECTS_CLASS = ComponentServiceObjects.class;
+ public static final Class<?> COMPONENTS_SERVICE_OBJECTS_CLASS;
public static final Class<?> MAP_CLASS = Map.class;
public static final Class<?> MAP_ENTRY_CLASS = Map.Entry.class;
@@ -49,6 +49,18 @@ public class ClassUtils
public static final Class<?> COLLECTION_CLASS = Collection.class;
public static final Class<?> LIST_CLASS = List.class;
+ static {
+ Class<?> serviceObjectsClass = null;
+ try {
+ serviceObjectsClass = ComponentServiceObjects.class;
+ }
+ catch (Throwable t)
+ {
+ //can't load class
+ }
+ COMPONENTS_SERVICE_OBJECTS_CLASS = serviceObjectsClass;
+ }
+
/**
* Returns the class object representing the class of the field reference
* The class loader of the component class is used to load the service class.
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java Fri Feb 6 09:50:11 2015
@@ -452,7 +452,7 @@ public class FieldHandler
{
case serviceType : obj = refPair.getServiceObject(key); break;
case serviceReference : obj = refPair.getRef(); break;
- case serviceObjects : obj = key.getComponentServiceObjectsHelper().getServiceObjects(refPair.getRef()); break;
+ case serviceObjects : obj = ((ComponentServiceObjectsHelper)key.getComponentServiceObjectsHelper()).getServiceObjects(refPair.getRef()); break;
case map : obj = new ReadOnlyDictionary<String, Object>( refPair.getRef() ); break;
case tuple : final Object tupleKey = new ReadOnlyDictionary<String, Object>( refPair.getRef() );
final Object tupleValue = refPair.getServiceObject(key);
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java Fri Feb 6 09:50:11 2015
@@ -25,6 +25,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.felix.scr.component.ExtComponentContext;
import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.helper.ClassUtils;
import org.apache.felix.scr.impl.helper.ComponentServiceObjectsHelper;
import org.apache.felix.scr.impl.helper.ReadOnlyDictionary;
import org.osgi.framework.Bundle;
@@ -54,7 +55,7 @@ public class ComponentContextImpl<S> imp
private final CountDownLatch accessibleLatch = new CountDownLatch(1);
- private ComponentServiceObjectsHelper serviceObjectsHelper;
+ private final Object serviceObjectsHelper;
public ComponentContextImpl( SingleComponentManager<S> componentManager, Bundle usingBundle )
{
@@ -65,15 +66,25 @@ public class ComponentContextImpl<S> imp
{
edgeInfos[i] = new EdgeInfo();
}
- this.serviceObjectsHelper = new ComponentServiceObjectsHelper(usingBundle.getBundleContext());
+ if ( ClassUtils.COMPONENTS_SERVICE_OBJECTS_CLASS != null )
+ {
+ this.serviceObjectsHelper = new ComponentServiceObjectsHelper(usingBundle.getBundleContext());
+ }
+ else
+ {
+ this.serviceObjectsHelper = null;
+ }
}
public void cleanup()
{
- this.serviceObjectsHelper.cleanup();
+ if ( this.serviceObjectsHelper != null )
+ {
+ ((ComponentServiceObjectsHelper)this.serviceObjectsHelper).cleanup();
+ }
}
- public ComponentServiceObjectsHelper getComponentServiceObjectsHelper()
+ public Object getComponentServiceObjectsHelper()
{
return this.serviceObjectsHelper;
}
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/MultiplePrototypeRefPair.java Fri Feb 6 09:50:11 2015
@@ -20,10 +20,8 @@
package org.apache.felix.scr.impl.manager;
-import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicReference;
import org.apache.felix.scr.impl.helper.SimpleLogger;
import org.osgi.framework.BundleContext;
@@ -32,19 +30,19 @@ import org.osgi.framework.ServiceReferen
import org.osgi.service.log.LogService;
/**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
*/
public class MultiplePrototypeRefPair<S, T> extends RefPair<S, T>
{
private final ServiceObjects<T> serviceObjects;
private final ConcurrentMap<ComponentContextImpl<S>, T> instances = new ConcurrentHashMap<ComponentContextImpl<S>, T>();
-
+
public MultiplePrototypeRefPair( BundleContext context, ServiceReference<T> ref )
{
super(ref);
this.serviceObjects = context.getServiceObjects(ref);
}
-
+
@Override
public Object getServiceObjects()
{
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java?rev=1657767&r1=1657766&r2=1657767&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SinglePrototypeRefPair.java Fri Feb 6 09:50:11 2015
@@ -20,8 +20,6 @@
package org.apache.felix.scr.impl.manager;
-import java.util.concurrent.atomic.AtomicReference;
-
import org.apache.felix.scr.impl.helper.SimpleLogger;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceObjects;
@@ -29,12 +27,12 @@ import org.osgi.framework.ServiceReferen
import org.osgi.service.log.LogService;
/**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
*/
public class SinglePrototypeRefPair<S, T> extends SingleRefPair<S, T>
{
private final ServiceObjects<T> serviceObjects;
-
+
public SinglePrototypeRefPair( BundleContext context, ServiceReference<T> ref )
{
super(ref);