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:="(&(osgi.extender=osgi.component)(version>=1.3)(!(version>=2.0)))"
+ * filter:="(&(osgi.extender=osgi.component)(version>=1.4)(!(version>=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;
}