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);