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 2016/03/31 02:19:31 UTC

svn commit: r1737170 - in /felix/trunk/scr/src: main/java/org/apache/felix/scr/impl/manager/ test/java/org/apache/felix/scr/impl/helper/ test/java/org/apache/felix/scr/impl/manager/ test/java/org/apache/felix/scr/integration/ test/java/org/apache/felix...

Author: djencks
Date: Thu Mar 31 00:19:31 2016
New Revision: 1737170

URL: http://svn.apache.org/viewvc?rev=1737170&view=rev
Log:
FELIX-5213, make ServiceReference accessible always during activation

Modified:
    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/ComponentContextImpl.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/helper/BindMethodTest.java
    felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/SingleComponentManagerTest.java
    felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/MutablePropertiesTest.java
    felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/components/MutatingServiceImpl.java

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=1737170&r1=1737169&r2=1737170&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 Thu Mar 31 00:19:31 2016
@@ -721,7 +721,7 @@ public abstract class AbstractComponentM
 
             if ( ( isImmediate() || getComponentMetadata().isFactory() ) )
             {
-                getServiceInternal();
+                getServiceInternal(registrationManager.getServiceRegistration());
             }
         }
         finally
@@ -808,21 +808,11 @@ public abstract class AbstractComponentM
         unregisterComponentId();
     }
 
-    final ServiceReference<S> getServiceReference()
-    {
-        ServiceRegistration<S> reg = getServiceRegistration();
-        if (reg != null)
-        {
-            return reg.getReference();
-        }
-        return null;
-    }
-
     //---------- Component handling methods ----------------------------------
 
     protected abstract void deleteComponent( int reason );
 
-    boolean getServiceInternal()
+    boolean getServiceInternal(ServiceRegistration<S> serviceRegistration)
     {
         return false;
     }
@@ -1023,12 +1013,6 @@ public abstract class AbstractComponentM
     }
 
 
-    final ServiceRegistration<S> getServiceRegistration()
-    {
-        return registrationManager.getServiceRegistration();
-    }
-
-
     synchronized void clear()
     {
         // for some testing, the activator may be null

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=1737170&r1=1737169&r2=1737170&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 Thu Mar 31 00:19:31 2016
@@ -30,6 +30,7 @@ import org.apache.felix.scr.impl.helper.
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentInstance;
 import org.osgi.service.log.LogService;
 
@@ -47,6 +48,8 @@ public class ComponentContextImpl<S> imp
     private final ComponentInstance m_componentInstance = new ComponentInstanceImpl<S>(this);
 
     private final Bundle m_usingBundle;
+    
+    private final ServiceRegistration<S> m_serviceRegistration;
 
     private volatile S m_implementationObject;
 
@@ -56,10 +59,11 @@ public class ComponentContextImpl<S> imp
 
     private final ComponentServiceObjectsHelper serviceObjectsHelper;
 
-    public ComponentContextImpl( final SingleComponentManager<S> componentManager, final Bundle usingBundle )
+    public ComponentContextImpl( final SingleComponentManager<S> componentManager, final Bundle usingBundle, ServiceRegistration<S> serviceRegistration )
     {
         m_componentManager = componentManager;
         m_usingBundle = usingBundle;
+        m_serviceRegistration = serviceRegistration;
         edgeInfos = new EdgeInfo[componentManager.getComponentMetadata().getDependencies().size()];
         for (int i = 0; i< edgeInfos.length; i++)
         {
@@ -99,6 +103,11 @@ public class ComponentContextImpl<S> imp
         return edgeInfos[index];
     }
 
+    ServiceRegistration<S> getServiceRegistration()
+    {
+        return m_serviceRegistration;
+    }
+
    protected SingleComponentManager<S> getComponentManager()
     {
         return m_componentManager;
@@ -196,7 +205,7 @@ public class ComponentContextImpl<S> imp
 
     public ServiceReference<S> getServiceReference()
     {
-        return m_componentManager.getServiceReference();
+        return m_serviceRegistration == null? null: m_serviceRegistration.getReference();
     }
 
 
@@ -263,4 +272,5 @@ public class ComponentContextImpl<S> imp
         }
 
     }
+
 }

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=1737170&r1=1737169&r2=1737170&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 Thu Mar 31 00:19:31 2016
@@ -46,7 +46,7 @@ public class ServiceFactoryComponentMana
     @Override
     public void setServiceProperties(Dictionary<String, ?> serviceProperties)
     {
-        throw new IllegalStateException( "Bundle scoped service properties are immutable" );
+        throw new IllegalStateException( "Bundle or instance scoped service properties are immutable" );
     }
 
 
@@ -92,13 +92,13 @@ public class ServiceFactoryComponentMana
     /* (non-Javadoc)
      * @see org.osgi.framework.ServiceFactory#getService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration)
      */
-    public S getService( Bundle bundle, ServiceRegistration<S> registration )
+    public S getService( Bundle bundle, ServiceRegistration<S> serviceRegistration )
     {
         log( LogService.LOG_DEBUG, "ServiceFactory.getService()", null );
 
         // When the getServiceMethod is called, the implementation object must be created
 
-        ComponentContextImpl<S> componentContext = new ComponentContextImpl<S>(this, bundle);
+        ComponentContextImpl<S> componentContext = new ComponentContextImpl<S>(this, bundle, serviceRegistration);
         if (collectDependencies(componentContext) )
         {
             log( LogService.LOG_DEBUG,

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=1737170&r1=1737169&r2=1737170&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 Thu Mar 31 00:19:31 2016
@@ -37,6 +37,7 @@ import org.apache.felix.scr.impl.helper.
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentConstants;
 import org.osgi.service.component.ComponentInstance;
@@ -517,6 +518,22 @@ public class SingleComponentManager<S> e
         return super.getServiceProperties();
     }
 
+    final ServiceRegistration<S> getServiceRegistration()
+    {
+        return m_componentContext == null? null: m_componentContext.getServiceRegistration();
+    }
+
+
+    final ServiceReference<S> getServiceReference()
+    {
+        ServiceRegistration<S> reg = getServiceRegistration();
+        if (reg != null)
+        {
+            return reg.getReference();
+        }
+        return null;
+    }
+
     private void updateServiceRegistration()
     {
         ServiceRegistration<S> sr = getServiceRegistration();
@@ -788,7 +805,7 @@ public class SingleComponentManager<S> e
         }
         boolean decrement = true;
         try {
-            boolean success = getServiceInternal();
+            boolean success = getServiceInternal(serviceRegistration);
             ComponentContextImpl<S> componentContext = m_componentContext;
             if ( success && componentContext != null)
             {
@@ -811,7 +828,7 @@ public class SingleComponentManager<S> e
 
 
     @Override
-    boolean getServiceInternal()
+    boolean getServiceInternal(ServiceRegistration<S> serviceRegistration)
     {
         if (m_circularReferences.get() != null)
         {
@@ -825,7 +842,7 @@ public class SingleComponentManager<S> e
             boolean success = true;
             if ( m_componentContext == null )
             {
-                ComponentContextImpl<S> componentContext = new ComponentContextImpl<S>(this, this.getBundle());
+                ComponentContextImpl<S> componentContext = new ComponentContextImpl<S>(this, this.getBundle(), serviceRegistration);
                 if ( collectDependencies(componentContext))
                 {
                         log(

Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/BindMethodTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/BindMethodTest.java?rev=1737170&r1=1737169&r2=1737170&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/BindMethodTest.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/BindMethodTest.java Thu Mar 31 00:19:31 2016
@@ -452,7 +452,7 @@ public class BindMethodTest extends Test
         BindMethod bm = new BindMethod( methodName, component.getClass(),
                 FakeService.class.getName(), dsVersion, false );
         RefPair refPair = new SingleRefPair( m_serviceReference );
-        ComponentContextImpl<T1> cc = new ComponentContextImpl(icm, new MockBundle());
+        ComponentContextImpl<T1> cc = new ComponentContextImpl(icm, new MockBundle(), null);
         assertTrue( bm.getServiceObject( cc, refPair, m_context, icm ) );
         BindParameters bp = new BindParameters(cc, refPair);
         bm.invoke( component, bp, null, icm );

Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/SingleComponentManagerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/SingleComponentManagerTest.java?rev=1737170&r1=1737169&r2=1737170&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/SingleComponentManagerTest.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/manager/SingleComponentManagerTest.java Thu Mar 31 00:19:31 2016
@@ -33,6 +33,7 @@ import org.junit.Test;
 import org.mockito.Mockito;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 
 public class SingleComponentManagerTest
 {
@@ -48,7 +49,7 @@ public class SingleComponentManagerTest
 
         SingleComponentManager<Object> scm = new SingleComponentManager<Object>(cc, new ComponentMethods()) {
             @Override
-            boolean getServiceInternal()
+            boolean getServiceInternal(ServiceRegistration<Object> serviceRegistration)
             {
                 return true;
             }
@@ -58,7 +59,7 @@ public class SingleComponentManagerTest
         Bundle b = Mockito.mock(Bundle.class);
         Mockito.when(b.getBundleContext()).thenReturn(bc);
 
-        ComponentContextImpl<Object> cci = new ComponentContextImpl<Object>(scm, b);
+        ComponentContextImpl<Object> cci = new ComponentContextImpl<Object>(scm, b, null);
         Object implObj = new Object();
         cci.setImplementationObject(implObj);
         cci.setImplementationAccessible(true);
@@ -89,7 +90,7 @@ public class SingleComponentManagerTest
 
         SingleComponentManager<?> scm = new SingleComponentManager<Object>(cc, new ComponentMethods()) {
             @Override
-            boolean getServiceInternal()
+            boolean getServiceInternal(ServiceRegistration<Object> serviceRegistration)
             {
                 return true;
             }

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=1737170&r1=1737169&r2=1737170&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 Thu Mar 31 00:19:31 2016
@@ -223,7 +223,7 @@ public class MutablePropertiesTest exten
 
         enableAndCheck(cd);
 
-        assertMsc(msc, false, true, null);
+        assertMsc(msc, true, true, null);
     }
 
     private void assertMsc(MutatingServiceConsumer msc, Boolean set, Boolean updated, Boolean unset)

Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/components/MutatingServiceImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/components/MutatingServiceImpl.java?rev=1737170&r1=1737169&r2=1737170&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/components/MutatingServiceImpl.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/components/MutatingServiceImpl.java Thu Mar 31 00:19:31 2016
@@ -46,7 +46,10 @@ public class MutatingServiceImpl impleme
     {
         this.activateContext = activateContext;
         Map result = new Hashtable( (Map )activateContext.getProperties() );
-        result.put( "theValue", "anotherValue1" );
+        if (activateContext.getServiceReference() != null) 
+        {
+            result.put( "theValue", "anotherValue1" );
+        }
         if (result.containsKey( ".p2" ))
         {
             result.put( ".theValue", "privateValue" );