You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dj...@apache.org on 2015/09/21 07:18:21 UTC
svn commit: r1704219 - in /felix/trunk/scr: ./
src/main/java/org/apache/felix/scr/impl/manager/
src/test/java/org/apache/felix/scr/impl/manager/
src/test/java/org/apache/felix/scr/integration/ src/test/resources/
Author: djencks
Date: Mon Sep 21 05:18:13 2015
New Revision: 1704219
URL: http://svn.apache.org/viewvc?rev=1704219&view=rev
Log:
FELIX-5044 make sure property changes during service registration eventually get shown
Modified:
felix/trunk/scr/changelog.txt
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java
felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java
felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/MutablePropertiesTest.java
felix/trunk/scr/src/test/resources/integration_test_mutable_properties.xml
Modified: felix/trunk/scr/changelog.txt
URL: http://svn.apache.org/viewvc/felix/trunk/scr/changelog.txt?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/changelog.txt (original)
+++ felix/trunk/scr/changelog.txt Mon Sep 21 05:18:13 2015
@@ -1,9 +1,10 @@
Changes from 2.0.2 to 2.0.4
---------------------------
** Improvement
- * [FELIX-5040] When global extender is turned on, get framwork bundle using location not id.
+ * [FELIX-5040] When global extender is turned on, get framework bundle using location not id.
** Bug
+ * [FELIX-5044] (felix mutable service properties) Make sure service property changes eventually get shown.
Changes from 2.0.0 to 2.0.2
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java Mon Sep 21 05:18:13 2015
@@ -878,6 +878,12 @@ public abstract class AbstractComponentM
}
@Override
+ void postRegister(ServiceRegistration<S> t)
+ {
+ AbstractComponentManager.this.postRegister();
+ }
+
+ @Override
void unregister(ServiceRegistration<S> serviceRegistration)
{
serviceRegistration.unregister();
@@ -1381,6 +1387,8 @@ public abstract class AbstractComponentM
}
}
+ abstract void postRegister();
+
boolean isInternalEnabled()
{
return m_internalEnabled;
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java Mon Sep 21 05:18:13 2015
@@ -276,6 +276,11 @@ public class ComponentFactoryImpl<S> ext
throw new IllegalStateException( "ComponentFactory service properties are immutable" );
}
+ @Override
+ void postRegister()
+ {
+ //do nothing
+ }
public Dictionary<String, Object> getServiceProperties()
{
@@ -413,5 +418,4 @@ public class ComponentFactoryImpl<S> ext
}
}
-
}
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/RegistrationManager.java Mon Sep 21 05:18:13 2015
@@ -67,15 +67,14 @@ abstract class RegistrationManager<T>
{
return regState.toString();
}
-
-
-
+
}
private final Lock registrationLock = new ReentrantLock();
//Deque, ArrayDeque if we had java 6
private final List<RegStateWrapper> opqueue = new ArrayList<RegStateWrapper>();
private volatile T m_serviceRegistration;
+
/**
*
* @param desired desired registration state
@@ -154,6 +153,7 @@ abstract class RegistrationManager<T>
if ( next.getRegState() == RegState.registered)
{
m_serviceRegistration = serviceRegistration;
+ postRegister( m_serviceRegistration );
}
next.getLatch().countDown();
}
@@ -200,6 +200,8 @@ abstract class RegistrationManager<T>
abstract T register(String[] services);
+ abstract void postRegister(T t);
+
abstract void unregister(T serviceRegistration);
abstract void log( int level, String message, Object[] arguments, Throwable ex );
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java Mon Sep 21 05:18:13 2015
@@ -21,6 +21,7 @@ package org.apache.felix.scr.impl.manage
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Dictionary;
import java.util.IdentityHashMap;
import org.apache.felix.scr.impl.config.ComponentContainer;
@@ -42,6 +43,19 @@ import org.osgi.service.log.LogService;
public class ServiceFactoryComponentManager<S> extends SingleComponentManager<S>
{
+ @Override
+ public void setServiceProperties(Dictionary<String, ?> serviceProperties)
+ {
+ throw new IllegalStateException( "Bundle scoped service properties are immutable" );
+ }
+
+
+ @Override
+ void postRegister()
+ {
+ // do nothing
+ }
+
// maintain the map of ComponentContext objects created for the
// service instances
private IdentityHashMap<S, ComponentContextImpl<S>> serviceContexts = new IdentityHashMap<S, ComponentContextImpl<S>>();
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/SingleComponentManager.java Mon Sep 21 05:18:13 2015
@@ -499,6 +499,15 @@ public class SingleComponentManager<S> e
}
@Override
+ void postRegister()
+ {
+ if (m_serviceProperties != null)
+ {
+ updateServiceRegistration();
+ }
+ }
+
+ @Override
public Dictionary<String, Object> getServiceProperties()
{
if ( m_serviceProperties != null )
@@ -521,6 +530,10 @@ public class SingleComponentManager<S> e
{
sr.setProperties( regProps );
}
+ else
+ {
+ log( LogService.LOG_DEBUG, "Not updating service registration, no change in properties", null, null );
+ }
}
catch ( IllegalStateException ise )
{
@@ -536,6 +549,10 @@ public class SingleComponentManager<S> e
log( LogService.LOG_ERROR, "Unexpected problem when updating service registration", t );
}
}
+ else
+ {
+ log( LogService.LOG_DEBUG, "No service registration to update", null, null );
+ }
}
/**
Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java Mon Sep 21 05:18:13 2015
@@ -91,6 +91,12 @@ public class RegistrationManagerTest
}
@Override
+ void postRegister(Object t)
+ {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
void unregister(Object serviceRegistration)
{
try
@@ -107,7 +113,7 @@ public class RegistrationManagerTest
@Override
void log(int level, String message, Object[] arguments, Throwable ex)
{
- if ( arguments.length == 1 && (arguments[0] instanceof ArrayList))
+ if ( arguments != null && arguments.length == 1 && (arguments[0] instanceof ArrayList))
{
ArrayList<RegState> opqueue = ( ArrayList<org.apache.felix.scr.impl.manager.RegistrationManager.RegState> ) arguments[0];
// System.out.println("opqueue: " + opqueue);
@@ -140,6 +146,6 @@ public class RegistrationManagerTest
// TODO Auto-generated method stub
}
-
+
}
}
Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/MutablePropertiesTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/MutablePropertiesTest.java?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/MutablePropertiesTest.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/MutablePropertiesTest.java Mon Sep 21 05:18:13 2015
@@ -28,6 +28,7 @@ import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.felix.scr.integration.components.MutatingService;
+import org.apache.felix.scr.integration.components.MutatingServiceConsumer;
import org.apache.felix.scr.integration.components.SimpleServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -35,6 +36,7 @@ import org.ops4j.pax.exam.junit.JUnit4Te
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
@RunWith(JUnit4TestRunner.class)
@@ -208,4 +210,26 @@ public class MutablePropertiesTest exten
Assert.assertFalse("Should not contain property " + p, Arrays.asList(serviceReference.getPropertyKeys()).contains(p));
}
}
+
+ @Test
+ public void test_mutable_properties_consumer() throws Exception
+ {
+ ServiceReference<MutatingServiceConsumer> mscRef = bundleContext.getServiceReference(MutatingServiceConsumer.class);
+ MutatingServiceConsumer msc = bundleContext.getService(mscRef);
+ assertMsc(msc, null, null, null);
+
+ String componentName = "components.mutable.properties.return2";
+ ComponentDescriptionDTO cd = findComponentDescriptorByName(componentName);
+
+ enableAndCheck(cd);
+
+ assertMsc(msc, false, true, null);
+ }
+
+ private void assertMsc(MutatingServiceConsumer msc, Boolean set, Boolean updated, Boolean unset)
+ {
+ Assert.assertEquals("set ", set, msc.isUpdatedInSet());
+ Assert.assertEquals("updated ", updated, msc.isUpdatedInUpdated());
+ Assert.assertEquals("unset ", unset, msc.isUpdatedInUnset());
+ }
}
\ No newline at end of file
Modified: felix/trunk/scr/src/test/resources/integration_test_mutable_properties.xml
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/resources/integration_test_mutable_properties.xml?rev=1704219&r1=1704218&r2=1704219&view=diff
==============================================================================
--- felix/trunk/scr/src/test/resources/integration_test_mutable_properties.xml (original)
+++ felix/trunk/scr/src/test/resources/integration_test_mutable_properties.xml Mon Sep 21 05:18:13 2015
@@ -18,6 +18,7 @@
under the License.
-->
<components>
+
<scr:component name="components.mutable.properties"
xmlns:scr="http://felix.apache.org/xmlns/scr/v1.2.0-felix"
enabled="true"
@@ -94,4 +95,37 @@
<property name="p1" value="p1"/>
<property name="p2" value="p2"/>
</scr:component>
+
+ <scr:component name="components.mutable.properties.return2"
+ xmlns:scr="http://felix.apache.org/xmlns/scr/v1.2.0-felix"
+ enabled="false"
+ configuration-policy="optional"
+ activate="activateMutate"
+ modified="modifiedMutate"
+ deactivate="deactivateMutate">
+ <implementation class="org.apache.felix.scr.integration.components.MutatingServiceImpl" />
+ <service>
+ <provide interface="org.apache.felix.scr.integration.components.MutatingService" />
+ </service>
+ </scr:component>
+
+ <scr:component name="components.mutable.properties.consumer"
+ xmlns:scr="http://www.osgi.org/xmlns/scr/v1.2.0"
+ enabled="true">
+ <implementation class="org.apache.felix.scr.integration.components.MutatingServiceConsumer" />
+ <service>
+ <provide interface="org.apache.felix.scr.integration.components.MutatingServiceConsumer" />
+ </service>
+ <reference
+ name="MutatingService"
+ interface="org.apache.felix.scr.integration.components.MutatingService"
+ cardinality="0..1"
+ policy="dynamic"
+ bind="setMutatingService"
+ unbind="unsetMutatingService"
+ updated="updatedMutatingService"
+ target="(component.name=components.mutable.properties.return2)"
+ />
+ </scr:component>
+
</components>