You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2012/10/17 15:20:27 UTC
svn commit: r1399224 - in /felix/trunk/scr/src:
main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java
Author: pderop
Date: Wed Oct 17 13:20:27 2012
New Revision: 1399224
URL: http://svn.apache.org/viewvc?rev=1399224&view=rev
Log:
FELIX-3700: Unregister ComponentFactory when configuration is lost and when
configuration-policy is required.
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java
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=1399224&r1=1399223&r2=1399224&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 Wed Oct 17 13:20:27 2012
@@ -312,9 +312,38 @@ public class ComponentFactoryImpl extend
{
if ( pid.equals( getComponentMetadata().getConfigurationPid() ) )
{
- // deleting configuration of a component factory is like
- // providing an empty configuration
- m_configuration = new Hashtable();
+ log( LogService.LOG_DEBUG, "Handling configuration removal", null );
+
+ boolean release = obtainReadLock( "ComponentFactoryImpl.configurationDeleted" );
+ try
+ {
+ // nothing to do if there is no configuration currently known.
+ if (! m_isConfigured)
+ {
+ log( LogService.LOG_DEBUG, "ignoring configuration removal: not currently configured", null );
+ return;
+ }
+
+ // So far, we were configured: clear the current configuration.
+ m_isConfigured = false;
+ m_configuration = new Hashtable();
+
+ log( LogService.LOG_DEBUG, "Current component factory state={0}", new Object[] { getState() }, null );
+
+ // And deactivate if we are not currently disposed and if configuration is required
+ if ( ( getState() & STATE_DISPOSED ) == 0 && getComponentMetadata().isConfigurationRequired() )
+ {
+ log( LogService.LOG_DEBUG, "Deactivating component factory (required configuration has gone)", null );
+ deactivateInternal( ComponentConstants.DEACTIVATION_REASON_CONFIGURATION_DELETED );
+ }
+ }
+ finally
+ {
+ if ( release )
+ {
+ releaseReadLock( "ComponentFactoryImpl.configurationDeleted" );
+ }
+ }
}
else
{
Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java?rev=1399224&r1=1399223&r2=1399224&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java Wed Oct 17 13:20:27 2012
@@ -304,10 +304,10 @@ public class ComponentFactoryTest extend
final Object instanceManager = getFieldValue( instance, "m_componentManager" );
TestCase.assertTrue( instanceMap.containsValue( instanceManager ) );
- // delete config, ensure factory still active and component instance, not changed
+ // delete config, ensure factory is not active anymore and component instance not changed
deleteConfig( componentname );
delay();
- TestCase.assertEquals( Component.STATE_FACTORY, component.getState() );
+ TestCase.assertEquals( Component.STATE_UNSATISFIED, component.getState() );
TestCase.assertNotNull( instance.getInstance() );
TestCase.assertEquals( SimpleComponent.INSTANCE, instance.getInstance() );