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 2015/10/07 21:31:32 UTC
svn commit: r1707364 - in /felix/sandbox/pderop/dependencymanager.ds:
org.apache.felix.dependencymanager.ds.itest/resource/
org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/
org.apache.felix.dependencymanager.ds/src/org/...
Author: pderop
Date: Wed Oct 7 19:31:32 2015
New Revision: 1707364
URL: http://svn.apache.org/viewvc?rev=1707364&view=rev
Log:
Keep the code in sync with the recent commits made in felix-trunk/scr ...
Modified:
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/resource/integration_test_mutable_properties.xml
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/MutablePropertiesTest.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/Activator.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/RegistrationManager.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/SingleComponentManager.java
felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/test/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java
Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/resource/integration_test_mutable_properties.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/resource/integration_test_mutable_properties.xml?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
Binary files - no diff available.
Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java Wed Oct 7 19:31:32 2015
@@ -25,7 +25,8 @@ public class Felix4984Test extends Compo
"\\[.*\\] Could not get service from ref \\[org.apache.felix.scr.integration.components.felix4984.A\\]",
"\\[.*\\] Could not get service from ref \\[org.apache.felix.scr.integration.components.felix4984.B\\]",
"running test iteration .*",
- "A\\.setB(.*)"
+ "A\\.setB(.*)",
+ ".*Service not available from service registry for ServiceReference.*"
};
//DS_LOGLEVEL = "debug";
//WRITE_LOGS_TO_FILE = true;
Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/MutablePropertiesTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/MutablePropertiesTest.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/MutablePropertiesTest.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/MutablePropertiesTest.java Wed Oct 7 19:31:32 2015
@@ -26,12 +26,14 @@ import java.util.Dictionary;
import java.util.Hashtable;
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.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.Configuration;
import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -44,6 +46,7 @@ public class MutablePropertiesTest exten
super("/resource/integration_test_mutable_properties.xml");
}
+
@Test
public void test_mutable_properties() throws InvalidSyntaxException, IOException
{
@@ -208,4 +211,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/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/Activator.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/Activator.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/Activator.java Wed Oct 7 19:31:32 2015
@@ -115,7 +115,7 @@ public class Activator extends AbstractE
BundleContext context;
if ( globalExtender )
{
- context = m_context.getBundle( 0 ).getBundleContext();
+ context = m_context.getBundle( Constants.SYSTEM_BUNDLE_LOCATION ).getBundleContext();
}
else
{
@@ -238,10 +238,21 @@ public class Activator extends AbstractE
//---------- Component Management -----------------------------------------
+ private volatile boolean gogoMissing =true;
@Override
protected Extension doCreateExtension(final Bundle bundle) throws Exception
{
+ if (gogoMissing)
+ {
+ try
+ {
+ bundle.loadClass("org.apache.felix.service.command.Descriptor");
+ gogoMissing = false;
+ }
+ catch (Throwable e)
+ {}
+ }
return new ScrExtension(bundle);
}
Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/AbstractComponentManager.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/AbstractComponentManager.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/AbstractComponentManager.java Wed Oct 7 19:31:32 2015
@@ -188,7 +188,7 @@ public abstract class AbstractComponentM
return ScrConfiguration.DEFAULT_LOCK_TIMEOUT_MILLISECONDS;
}
- private void obtainLock( Lock lock, String source )
+ private void obtainLock( Lock lock )
{
try
{
@@ -218,22 +218,22 @@ public abstract class AbstractComponentM
}
}
- final void obtainActivationReadLock( String source )
+ final void obtainActivationReadLock( )
{
- obtainLock( m_activationLock.readLock(), source);
+ obtainLock( m_activationLock.readLock());
}
- final void releaseActivationReadLock( String source )
+ final void releaseActivationReadLock( )
{
m_activationLock.readLock().unlock();
}
- final void obtainActivationWriteLock( String source )
+ final void obtainActivationWriteLock( )
{
- obtainLock( m_activationLock.writeLock(), source);
+ obtainLock( m_activationLock.writeLock());
}
- final void releaseActivationWriteeLock( String source )
+ final void releaseActivationWriteeLock( )
{
if ( m_activationLock.getWriteHoldCount() > 0 )
{
@@ -241,12 +241,12 @@ public abstract class AbstractComponentM
}
}
- final void obtainStateLock( String source )
+ final void obtainStateLock()
{
- obtainLock( m_stateLock, source );
+ obtainLock( m_stateLock );
}
- final void releaseStateLock( String source )
+ final void releaseStateLock()
{
m_stateLock.unlock();
}
@@ -683,7 +683,7 @@ public abstract class AbstractComponentM
return;
}
- obtainActivationReadLock( "activateInternal" );
+ obtainActivationReadLock( );
try
{
// Double check conditions now that we have obtained the lock
@@ -726,7 +726,7 @@ public abstract class AbstractComponentM
}
finally
{
- releaseActivationReadLock( "activateInternal" );
+ releaseActivationReadLock( );
}
}
@@ -751,14 +751,14 @@ public abstract class AbstractComponentM
// catch any problems from deleting the component to prevent the
// component to remain in the deactivating state !
- obtainActivationReadLock( "deactivateInternal" );
+ obtainActivationReadLock( );
try
{
doDeactivate( reason, disable || m_factoryInstance );
}
finally
{
- releaseActivationReadLock( "deactivateInternal" );
+ releaseActivationReadLock( );
}
if ( isFactory() || m_factoryInstance || dispose )
{
@@ -775,7 +775,7 @@ public abstract class AbstractComponentM
{
log( LogService.LOG_DEBUG, "Component deactivation occuring on another thread", null );
}
- obtainStateLock( "AbstractComponentManager.State.doDeactivate.1" );
+ obtainStateLock( );
try
{
m_satisfied = false;
@@ -789,7 +789,7 @@ public abstract class AbstractComponentM
}
finally
{
- releaseStateLock( "AbstractComponentManager.State.doDeactivate.1" );
+ releaseStateLock( );
}
}
catch ( Throwable t )
@@ -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/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentContextImpl.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentContextImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentContextImpl.java Wed Oct 7 19:31:32 2015
@@ -20,8 +20,6 @@ package org.apache.felix.scr.impl.manage
import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -31,7 +29,6 @@ import org.apache.felix.scr.impl.helper.
import org.apache.felix.scr.impl.helper.ReadOnlyDictionary;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceObjects;
import org.osgi.framework.ServiceReference;
import org.osgi.service.component.ComponentInstance;
import org.osgi.service.log.LogService;
@@ -116,7 +113,7 @@ public class ComponentContextImpl<S> imp
public Object locateService( String name )
{
- m_componentManager.obtainActivationReadLock( "locate.service.name" );
+ m_componentManager.obtainActivationReadLock( );
try
{
DependencyManager<S, ?> dm = m_componentManager.getDependencyManager( name );
@@ -124,14 +121,14 @@ public class ComponentContextImpl<S> imp
}
finally
{
- m_componentManager.releaseActivationReadLock( "locate.service.name" );
+ m_componentManager.releaseActivationReadLock( );
}
}
public Object locateService( String name, ServiceReference ref )
{
- m_componentManager.obtainActivationReadLock( "locate.service.ref" );
+ m_componentManager.obtainActivationReadLock( );
try
{
DependencyManager<S, ?> dm = m_componentManager.getDependencyManager( name );
@@ -139,14 +136,14 @@ public class ComponentContextImpl<S> imp
}
finally
{
- m_componentManager.releaseActivationReadLock( "locate.service.ref" );
+ m_componentManager.releaseActivationReadLock( );
}
}
public Object[] locateServices( String name )
{
- m_componentManager.obtainActivationReadLock( "locate.services" );
+ m_componentManager.obtainActivationReadLock( );
try
{
DependencyManager<S, ?> dm = m_componentManager.getDependencyManager( name );
@@ -154,7 +151,7 @@ public class ComponentContextImpl<S> imp
}
finally
{
- m_componentManager.releaseActivationReadLock( "locate.services" );
+ m_componentManager.releaseActivationReadLock( );
}
}
Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java Wed Oct 7 19:31:32 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/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/RegistrationManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/RegistrationManager.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/RegistrationManager.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/RegistrationManager.java Wed Oct 7 19:31:32 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/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java Wed Oct 7 19:31:32 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/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/SingleComponentManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/SingleComponentManager.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/SingleComponentManager.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/apache/felix/scr/impl/manager/SingleComponentManager.java Wed Oct 7 19:31:32 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 );
+ }
}
/**
@@ -587,14 +604,14 @@ public class SingleComponentManager<S> e
// unsatisfied component and non-ignored configuration may change targets
// to satisfy references
- obtainActivationWriteLock( "reconfigure" );
+ obtainActivationWriteLock( );
try
{
if ( !isSatisfied() && !getComponentMetadata().isConfigurationIgnored() )
{
log( LogService.LOG_DEBUG, "Attempting to activate unsatisfied component", null );
updateTargets( getProperties() );
- releaseActivationWriteeLock( "reconfigure.unsatisfied" );
+ releaseActivationWriteeLock( );
activateInternal( );
return;
}
@@ -609,20 +626,20 @@ public class SingleComponentManager<S> e
// FELIX-2368: cycle component immediately, reconfigure() is
// called through ConfigurationListener API which itself is
// called asynchronously by the Configuration Admin Service
- releaseActivationWriteeLock( "reconfigure.modified.1" );
+ releaseActivationWriteeLock( );
//we have already determined that modify cannot be called. Therefore factory instances must be disposed.
boolean dispose = m_factoryInstance;
deactivateInternal( reason, dispose, dispose );
if ( !dispose )
{
- obtainActivationWriteLock("reconfigure.deactivate.activate");
+ obtainActivationWriteLock();
try
{
updateTargets(getProperties());
}
finally
{
- releaseActivationWriteeLock("reconfigure.deactivate.activate");
+ releaseActivationWriteeLock();
}
activateInternal();
}
@@ -631,7 +648,7 @@ public class SingleComponentManager<S> e
finally
{
//used if modify succeeds or if there's an exception.
- releaseActivationWriteeLock( "reconfigure.end" );;
+ releaseActivationWriteeLock( );
}
}
finally
@@ -677,7 +694,7 @@ public class SingleComponentManager<S> e
// 4. call method (nothing to do when failed, since it has already been logged)
// (call with non-null default result to continue even if the
// modify method call failed)
- obtainStateLock( "ImmediateComponentManager.modify" );
+ obtainStateLock( );
try
{
//cf 112.5.12 where invoking modified method before updating target services is specified.
@@ -717,7 +734,7 @@ public class SingleComponentManager<S> e
}
finally
{
- releaseStateLock( "ImmediateComponentManager.modify" );
+ releaseStateLock( );
}
}
@@ -760,16 +777,35 @@ public class SingleComponentManager<S> e
public S getService( Bundle bundle, ServiceRegistration<S> serviceRegistration )
{
- boolean success = getServiceInternal();
- ComponentContextImpl<S> componentContext = m_componentContext;
- if ( success && componentContext != null)
+ obtainStateLock( );
+ try
{
m_useCount.incrementAndGet();
- return componentContext.getImplementationObject( true );
}
- else
+ finally
{
- return null;
+ releaseStateLock( );
+ }
+ boolean decrement = true;
+ try {
+ boolean success = getServiceInternal();
+ ComponentContextImpl<S> componentContext = m_componentContext;
+ if ( success && componentContext != null)
+ {
+ decrement = false;
+ return componentContext.getImplementationObject( true );
+ }
+ else
+ {
+ return null;
+ }
+ }
+ finally
+ {
+ if ( decrement )
+ {
+ ungetService( bundle, serviceRegistration, null );
+ }
}
}
@@ -805,7 +841,7 @@ public class SingleComponentManager<S> e
null );
success = false;
}
- obtainStateLock( "ImmediateComponentManager.getService.1" );
+ obtainStateLock( );
try
{
if ( m_componentContext == null )
@@ -824,7 +860,7 @@ public class SingleComponentManager<S> e
}
finally
{
- releaseStateLock( "ImmediateComponentManager.getService.1" );
+ releaseStateLock( );
}
}
return success;
@@ -872,31 +908,21 @@ public class SingleComponentManager<S> e
public void ungetService( Bundle bundle, ServiceRegistration<S> serviceRegistration, S o )
{
- // the framework should not call ungetService more than it calls
- // calls getService. Still, we want to be sure to not go below zero
- if ( m_useCount.get() > 0 )
+ obtainStateLock( );
+ try
{
- int useCount = m_useCount.decrementAndGet();
-
// unget the service instance if no bundle is using it
// any longer unless delayed component instances have to
// be kept (FELIX-3039)
- if ( useCount == 0 && !isImmediate() && !keepInstances() )
+ if ( m_useCount.decrementAndGet() == 0 && !isImmediate() && !keepInstances() )
{
- obtainStateLock( "ImmediateComponentManager.ungetService.1" );
- try
- {
- if ( m_useCount.get() == 0 )
- {
- ungetService( );
- }
- }
- finally
- {
- releaseStateLock( "ImmediateComponentManager.ungetService.1" );
- }
+ ungetService( );
}
}
+ finally
+ {
+ releaseStateLock( );
+ }
}
private void ungetService( )
Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/test/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/test/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java?rev=1707364&r1=1707363&r2=1707364&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/test/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/test/org/apache/felix/scr/impl/manager/RegistrationManagerTest.java Wed Oct 7 19:31:32 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
}
-
+
}
}