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 2013/04/02 23:50:44 UTC
svn commit: r1463769 - in /felix/trunk/scr/src:
main/java/org/apache/felix/scr/impl/manager/
test/java/org/apache/felix/scr/integration/
Author: djencks
Date: Tue Apr 2 21:50:44 2013
New Revision: 1463769
URL: http://svn.apache.org/r1463769
Log:
FELIX-4011 use a final ComponentContext since it now has useful state (later made non-final again) and make ComponentInstance a separate class
Modified:
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/ImmediateComponentManager.java
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java
felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ConfigurationComponentFactoryTest.java
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=1463769&r1=1463768&r2=1463769&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 Tue Apr 2 21:50:44 2013
@@ -34,12 +34,13 @@ import org.osgi.service.component.Compon
* Implementation for the ComponentContext interface
*
*/
-public class ComponentContextImpl implements ExtComponentContext, ComponentInstance {
+public class ComponentContextImpl implements ExtComponentContext {
private final AbstractComponentManager m_componentManager;
private final EdgeInfo[] edgeInfos;
-
+
+ private volatile ComponentInstance m_componentInstance;
ComponentContextImpl( AbstractComponentManager componentManager )
{
@@ -110,7 +111,7 @@ public class ComponentContextImpl implem
public ComponentInstance getComponentInstance()
{
- return this;
+ return m_componentInstance;
}
@@ -132,24 +133,49 @@ public class ComponentContextImpl implem
}
- //---------- ComponentInstance interface ------------------------------
+ //---------- Speculative MutableProperties interface ------------------------------
- public Object getInstance()
+ public void setServiceProperties(Dictionary properties)
{
- return getComponentManager().getInstance();
+ getComponentManager().setServiceProperties(properties );
}
+
+ //---------- ComponentInstance interface support ------------------------------
-
- public void dispose()
+ Object getImplementationObject()
{
- getComponentManager().dispose();
+ return getComponentManager().getInstance();
}
-
- //---------- Speculative MutableProperties interface ------------------------------
-
- public void setServiceProperties(Dictionary properties)
+
+ void newComponentInstance()
{
- getComponentManager().setServiceProperties(properties );
+ m_componentInstance = new ComponentInstanceImpl(this);
}
+
+ void clearComponentInstance(){
+ m_componentInstance = null;
+ }
+
+ private static class ComponentInstanceImpl implements ComponentInstance
+ {
+ private final ComponentContextImpl m_componentContext;
+
+ private ComponentInstanceImpl(ComponentContextImpl m_componentContext)
+ {
+ this.m_componentContext = m_componentContext;
+ }
+
+ public Object getInstance()
+ {
+ return m_componentContext.getImplementationObject();
+ }
+
+
+ public void dispose()
+ {
+ m_componentContext.getComponentManager().dispose();
+ }
+
+ }
}
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java?rev=1463769&r1=1463768&r2=1463769&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java Tue Apr 2 21:50:44 2013
@@ -59,7 +59,7 @@ public class ImmediateComponentManager<S
private final AtomicInteger m_useCount = new AtomicInteger( );
// The context that will be passed to the implementationObject
- private ComponentContextImpl m_componentContext;
+ private final ComponentContextImpl m_componentContext = new ComponentContextImpl(this);
// the component holder responsible for managing this component
private ComponentHolder m_componentHolder;
@@ -120,9 +120,7 @@ public class ImmediateComponentManager<S
}
if ( m_implementationObject == null )
{
- final ComponentContextImpl tmpContext = new ComponentContextImpl( this );
- m_componentContext = tmpContext;
- S tmpComponent = createImplementationObject( tmpContext, new SetImplementationObject<S>()
+ S tmpComponent = createImplementationObject( m_componentContext, new SetImplementationObject<S>()
{
public void setImplementationObject( S implementationObject )
{
@@ -175,7 +173,6 @@ public class ImmediateComponentManager<S
m_tmpImplementationObject = null;
cleanupImplementationObject( implementationObject );
log( LogService.LOG_DEBUG, "Unset and deconfigured implementation object for component {0} in deleteComponent for reason {1}", new Object[] { getName(), REASONS[ reason ] }, null );
- m_componentContext = null;
m_properties = null;
m_serviceProperties = null;
}
@@ -184,7 +181,7 @@ public class ImmediateComponentManager<S
public ComponentInstance getComponentInstance()
{
- return m_componentContext;
+ return m_componentContext.getComponentInstance();
}
@@ -238,7 +235,7 @@ public class ImmediateComponentManager<S
}
- protected S createImplementationObject( ComponentContext componentContext, SetImplementationObject setter )
+ protected S createImplementationObject( ComponentContextImpl componentContext, SetImplementationObject setter )
{
final Class<S> implementationObjectClass;
final S implementationObject;
@@ -262,6 +259,8 @@ public class ImmediateComponentManager<S
log( LogService.LOG_ERROR, "Error during instantiation of the implementation object", t );
return null;
}
+
+ componentContext.newComponentInstance();
// 3. set the implementation object prematurely
setter.presetImplementationObject( implementationObject );
@@ -343,6 +342,7 @@ public class ImmediateComponentManager<S
protected void cleanupImplementationObject( Object implementationObject )
{
m_componentContext.clearEdgeInfos();
+ m_componentContext.clearComponentInstance();
}
State getSatisfiedState()
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=1463769&r1=1463768&r2=1463769&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 Tue Apr 2 21:50:44 2013
@@ -83,9 +83,9 @@ public class ServiceFactoryComponentMana
for (Iterator i = serviceContexts.values().iterator(); i.hasNext(); )
{
BundleComponentContext componentContext = ( BundleComponentContext ) i.next();
- disposeImplementationObject( componentContext.getInstance(), componentContext, reason );
+ disposeImplementationObject( componentContext.getImplementationObject(), componentContext, reason );
i.remove();
- cleanupImplementationObject( componentContext.getInstance() );
+ cleanupImplementationObject( componentContext.getImplementationObject() );
log( LogService.LOG_DEBUG, "Unset implementation object for component {0} in deleteComponent for reason {1}", new Object[] { getName(), REASONS[ reason ] }, null );
}
}
@@ -240,7 +240,7 @@ public class ServiceFactoryComponentMana
MethodResult result = MethodResult.VOID;
for ( BundleComponentContext componentContext : serviceContexts.values() )
{
- Object instance = componentContext.getInstance();
+ Object instance = componentContext.getImplementationObject();
result = modifiedMethod.invoke( instance,
new ActivateMethod.ActivatorParameter( componentContext, -1 ), MethodResult.VOID, this );
@@ -284,9 +284,9 @@ public class ServiceFactoryComponentMana
}
- //---------- ComponentInstance interface ------------------------------
+ //---------- ComponentInstance interface support ------------------------------
- public Object getInstance()
+ Object getImplementationObject()
{
return m_implementationObject;
}
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=1463769&r1=1463768&r2=1463769&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 Tue Apr 2 21:50:44 2013
@@ -94,7 +94,7 @@ public class ComponentFactoryTest extend
TestCase.assertNotNull( instanceMap );
TestCase.assertEquals( 1, instanceMap.size() );
- final Object instanceManager = getFieldValue( instance, "m_componentManager" );
+ final Object instanceManager = getComponentManagerFromComponentInstance( instance );
TestCase.assertTrue( instanceMap.containsValue( instanceManager ) );
// check registered components
@@ -169,7 +169,7 @@ public class ComponentFactoryTest extend
TestCase.assertNotNull( instanceMap );
TestCase.assertEquals( 1, instanceMap.size() );
- final Object instanceManager = getFieldValue( instance, "m_componentManager" );
+ final Object instanceManager = getComponentManagerFromComponentInstance( instance );
TestCase.assertTrue( instanceMap.containsValue( instanceManager ) );
// disable the factory
@@ -301,7 +301,7 @@ public class ComponentFactoryTest extend
TestCase.assertNotNull( instanceMap );
TestCase.assertEquals( 1, instanceMap.size() );
- final Object instanceManager = getFieldValue( instance, "m_componentManager" );
+ final Object instanceManager = getComponentManagerFromComponentInstance( instance );
TestCase.assertTrue( instanceMap.containsValue( instanceManager ) );
// delete config, ensure factory is not active anymore and component instance not changed
@@ -377,7 +377,7 @@ public class ComponentFactoryTest extend
TestCase.assertNotNull( instanceMap );
TestCase.assertEquals( 1, instanceMap.size() );
- final Object instanceManager = getFieldValue( instance, "m_componentManager" );
+ final Object instanceManager = getComponentManagerFromComponentInstance( instance );
TestCase.assertTrue( instanceMap.containsValue( instanceManager ) );
// check registered components
Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java?rev=1463769&r1=1463768&r2=1463769&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java Tue Apr 2 21:50:44 2013
@@ -370,6 +370,12 @@ public abstract class ComponentTestBase
return null; // keep the compiler happy
}
}
+
+ protected Object getComponentManagerFromComponentInstance( Object instance )
+ {
+ Object cc = getFieldValue( instance, "m_componentContext");
+ return getFieldValue( cc, "m_componentManager" );
+ }
protected static Field getField( Class<?> type, String fieldName ) throws NoSuchFieldException
Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ConfigurationComponentFactoryTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ConfigurationComponentFactoryTest.java?rev=1463769&r1=1463768&r2=1463769&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ConfigurationComponentFactoryTest.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ConfigurationComponentFactoryTest.java Tue Apr 2 21:50:44 2013
@@ -98,7 +98,7 @@ public class ConfigurationComponentFacto
TestCase.assertNotNull( instanceMap );
TestCase.assertEquals( 1, instanceMap.size() );
- final Object instanceManager = getFieldValue( SimpleComponent.INSTANCE.m_activateContext.getComponentInstance(), "m_componentManager" );
+ final Object instanceManager = getFieldValue( SimpleComponent.INSTANCE.m_activateContext, "m_componentManager" );
TestCase.assertTrue( instanceMap.containsValue( instanceManager ) );