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 2017/10/23 08:03:38 UTC

svn commit: r1812979 - in /felix/trunk/osgi-r7/scr/src/main/java/org: apache/felix/scr/impl/metadata/ apache/felix/scr/impl/runtime/ osgi/service/component/ osgi/service/component/runtime/ osgi/service/component/runtime/dto/

Author: cziegeler
Date: Mon Oct 23 08:03:38 2017
New Revision: 1812979

URL: http://svn.apache.org/viewvc?rev=1812979&view=rev
Log:
FELIX-5455 : [R7] Constructor Injection. Update API/DTOs

Modified:
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
    felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
    felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentConstants.java
    felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentContext.java
    felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java
    felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java?rev=1812979&r1=1812978&r2=1812979&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java Mon Oct 23 08:03:38 2017
@@ -1044,32 +1044,6 @@ public class ComponentMetadata
             {
                 throw validationFailure( "Init parameter is not a number: " + m_init);
             }
-        	    final Set<Integer> parIndexSet = new HashSet<>();
-        	    for(final ReferenceMetadata ref : this.m_references)
-        	    {
-        		    if ( ref.getParameterIndex() != null )
-        		    {
-                    if ( ref.getParameterIndex() >= constructorParameters )
-                    {
-                        throw validationFailure( "Reference parameter index of " + ref.getParameterIndex().toString() + " is higher than init parameter: " + m_init);
-                    }
-        		        if ( !parIndexSet.add(ref.getParameterIndex()) )
-         		    {
-                        throw validationFailure( "Duplicate reference for argument " + ref.getParameterIndex() + " in constructor" );
-         		    }
-        		    }
-        	    }
-        }
-        else
-        {
-        	    // no constructor injection, check references for having a parameter index
-        	    for(final ReferenceMetadata ref : this.m_references)
-        	    {
-        		    if ( ref.getParameterIndex() != null )
-        		    {
-                    throw validationFailure( "Reference must not use parameter attribute if no constructor injection is used" );
-        		    }
-        	    }
         }
 
         if (m_dsVersion == DSVersion.DS12Felix)

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java?rev=1812979&r1=1812978&r2=1812979&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java Mon Oct 23 08:03:38 2017
@@ -769,12 +769,6 @@ public class ReferenceMetadata
             {
                 throw componentMetadata.validationFailure( "Reference parameter value must be zero or higher: " + m_parameter );
             }
-            // policy needs to be static
-            if ( !isStatic() )
-            {
-                throw componentMetadata.validationFailure( "Reference with parameter value must be static." );
-
-            }
         }
         m_validated = true;
     }
@@ -791,6 +785,7 @@ public class ReferenceMetadata
                 ", updated=" + this.getUpdated() +
                 ", field=" + this.getField() +
                 ", field-option=" + this.getFieldOption() +
-                ", field-collection-type=" + this.getFieldCollectionType();
+                ", field-collection-type=" + this.getFieldCollectionType() +
+                ", parameter=" + this.getParameterIndex();
     }
 }
\ No newline at end of file

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java?rev=1812979&r1=1812978&r2=1812979&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java Mon Oct 23 08:03:38 2017
@@ -76,7 +76,7 @@ public class ServiceComponentRuntimeImpl
             holders = componentRegistry.getComponentHolders(bundles);
         }
 
-        List<ComponentDescriptionDTO> result = new ArrayList<ComponentDescriptionDTO>(holders.size());
+        List<ComponentDescriptionDTO> result = new ArrayList<>(holders.size());
         for (ComponentHolder<?> holder: holders)
         {
             ComponentDescriptionDTO dto = holderToDescription(holder);
@@ -125,7 +125,7 @@ public class ServiceComponentRuntimeImpl
                 return Collections.emptyList();
             }
             List<? extends ComponentManager<?>> managers = holder.getComponents();
-            List<ComponentConfigurationDTO> result = new ArrayList<ComponentConfigurationDTO>(managers.size());
+            List<ComponentConfigurationDTO> result = new ArrayList<>(managers.size());
             for (ComponentManager<?> manager: managers)
             {
                 result.add(managerToConfiguration(manager, description));
@@ -206,7 +206,7 @@ public class ServiceComponentRuntimeImpl
         dto.unsatisfiedReferences = unsatisfiedRefManagersToDTO(manager.getReferenceManagers());
         dto.description = description;
         dto.id = manager.getId();
-        dto.properties = new HashMap<String, Object>(manager.getProperties());//TODO deep copy?
+        dto.properties = new HashMap<>(manager.getProperties());//TODO deep copy?
         dto.state = manager.getSpecState();
         if ( dto.state == ComponentConfigurationDTO.FAILED_ACTIVATION )
         {
@@ -217,7 +217,7 @@ public class ServiceComponentRuntimeImpl
 
     private SatisfiedReferenceDTO[] satisfiedRefManagersToDTO(List<? extends ReferenceManager<?, ?>> referenceManagers)
     {
-        List<SatisfiedReferenceDTO> dtos = new ArrayList<SatisfiedReferenceDTO>();
+        List<SatisfiedReferenceDTO> dtos = new ArrayList<>();
         for (ReferenceManager<?, ?> ref: referenceManagers)
         {
             if (ref.isSatisfied())
@@ -243,7 +243,7 @@ public class ServiceComponentRuntimeImpl
 
     private UnsatisfiedReferenceDTO[] unsatisfiedRefManagersToDTO(List<? extends ReferenceManager<?, ?>> referenceManagers)
     {
-        List<UnsatisfiedReferenceDTO> dtos = new ArrayList<UnsatisfiedReferenceDTO>();
+        List<UnsatisfiedReferenceDTO> dtos = new ArrayList<>();
         for (ReferenceManager<?, ?> ref: referenceManagers)
         {
             if (!ref.isSatisfied())
@@ -339,12 +339,13 @@ public class ServiceComponentRuntimeImpl
         // DS 1.4
         dto.factoryProperties = m.isFactory() ? m.getFactoryProperties() : null;
         dto.activationFields = (m.getActivationFields() == null ? EMPTY : m.getActivationFields().toArray(new String[m.getActivationFields().size()]));
+        dto.init = m.getNumberOfConstructorParameters();
         return dto;
     }
 
     private Map<String, Object> deepCopy(Map<String, Object> source)
     {
-        HashMap<String, Object> result = new HashMap<String, Object>(source.size());
+        HashMap<String, Object> result = new HashMap<>(source.size());
         for (Map.Entry<String, Object> entry: source.entrySet())
         {
             result.put(entry.getKey(), convert(entry.getValue()));
@@ -355,7 +356,7 @@ public class ServiceComponentRuntimeImpl
     private Map<String, Object> deepCopy(ServiceReference<?> source)
     {
         String[] keys = source.getPropertyKeys();
-        HashMap<String, Object> result = new HashMap<String, Object>(keys.length);
+        HashMap<String, Object> result = new HashMap<>(keys.length);
         for (int i = 0; i< keys.length; i++)
         {
             result.put(keys[i], convert(source.getProperty(keys[i])));

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentConstants.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentConstants.java?rev=1812979&r1=1812978&r2=1812979&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentConstants.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentConstants.java Mon Oct 23 08:03:38 2017
@@ -126,14 +126,13 @@ public interface ComponentConstants {
 
 	/**
 	 * Capability name for Service Component Runtime.
-	 * 
 	 * <p>
 	 * Used in {@code Provide-Capability} and {@code Require-Capability}
 	 * manifest headers with the {@code osgi.extender} namespace. For example:
 	 * 
 	 * <pre>
 	 * Require-Capability: osgi.extender;
-	 *  filter:="(&amp;(osgi.extender=osgi.component)(version&gt;=1.3)(!(version&gt;=2.0)))"
+	 *  filter:="(&amp;(osgi.extender=osgi.component)(version&gt;=1.4)(!(version&gt;=2.0)))"
 	 * </pre>
 	 * 
 	 * @since 1.3

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentContext.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentContext.java?rev=1812979&r1=1812978&r2=1812979&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentContext.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/ComponentContext.java Mon Oct 23 08:03:38 2017
@@ -100,11 +100,10 @@ public interface ComponentContext {
 	public Object[] locateServices(String name);
 
 	/**
-	 * Returns the {@code BundleContext} of the bundle which contains this
+	 * Returns the {@code BundleContext} of the bundle which declares this
 	 * component.
 	 * 
-	 * @return The {@code BundleContext} of the bundle containing this
-	 *         component.
+	 * @return The {@code BundleContext} of the bundle declares this component.
 	 */
 	public BundleContext getBundleContext();
 

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java?rev=1812979&r1=1812978&r2=1812979&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java Mon Oct 23 08:03:38 2017
@@ -20,6 +20,7 @@ import java.util.Collection;
 
 import org.osgi.annotation.versioning.ProviderType;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
 import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
@@ -31,7 +32,6 @@ import org.osgi.util.promise.Promise;
  * service components and their life cycle. The {@code ServiceComponentRuntime}
  * service allows introspection of the components managed by Service Component
  * Runtime.
- * 
  * <p>
  * This service differentiates between a {@link ComponentDescriptionDTO} and a
  * {@link ComponentConfigurationDTO}. A {@link ComponentDescriptionDTO} is a
@@ -39,7 +39,10 @@ import org.osgi.util.promise.Promise;
  * {@link ComponentConfigurationDTO} is a representation of an actual instance
  * of a declared component description parameterized by component properties.
  * <p>
- * 
+ * This service must be registered with a {@link Constants#SERVICE_CHANGECOUNT}
+ * service property that must be updated each time the SCR DTOs available from
+ * this service change.
+ * <p>
  * Access to this service requires the
  * {@code ServicePermission[ServiceComponentRuntime, GET]} permission. It is
  * intended that only administrative bundles should be granted this permission

Modified: felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java?rev=1812979&r1=1812978&r2=1812979&view=diff
==============================================================================
--- felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java (original)
+++ felix/trunk/osgi-r7/scr/src/main/java/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java Mon Oct 23 08:03:38 2017
@@ -192,4 +192,15 @@ public class ComponentDescriptionDTO ext
 	 * @since 1.4
 	 */
 	public String[]				activationFields;
+
+	/**
+	 * The constructor parameter count.
+	 * <p>
+	 * This is declared in the {@code init} attribute of the {@code component}
+	 * element. This must be {@code 0} if the component description does not
+	 * declare an {@code init} attribute.
+	 * 
+	 * @since 1.4
+	 */
+	public int					init;
 }