Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1129511237 for ; Sun, 15 Jun 2014 01:10:35 +0000 (UTC) Received: (qmail 26213 invoked by uid 500); 15 Jun 2014 01:10:35 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 26171 invoked by uid 500); 15 Jun 2014 01:10:34 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 26162 invoked by uid 99); 15 Jun 2014 01:10:34 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 15 Jun 2014 01:10:34 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 15 Jun 2014 01:10:31 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 4FEB42388C48; Sun, 15 Jun 2014 01:10:08 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1602643 - in /felix/trunk/scr/src: main/java/org/apache/felix/scr/impl/ main/java/org/apache/felix/scr/impl/config/ main/java/org/apache/felix/scr/impl/manager/ main/java/org/apache/felix/scr/impl/runtime/ test/java/org/apache/felix/scr/im... Date: Sun, 15 Jun 2014 01:10:07 -0000 To: commits@felix.apache.org From: djencks@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140615011008.4FEB42388C48@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: djencks Date: Sun Jun 15 01:10:07 2014 New Revision: 1602643 URL: http://svn.apache.org/r1602643 Log: FELIX-4402 separate ComponentHolder interface into 2 sides, one called from configuration support etc and one called from the component managers. Remove some unused methods from AbstractComponentManager. Some factory component tests currently fail. Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/TargetedPID.java felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java 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/ConfigurationComponentFactoryImpl.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/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolderTest.java felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/ActivateMethodTest.java felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/BindMethodTest.java Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java Sun Jun 15 01:10:07 2014 @@ -33,6 +33,7 @@ import java.util.Set; import org.apache.felix.scr.Component; import org.apache.felix.scr.ScrService; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.config.ComponentHolder; import org.apache.felix.scr.impl.config.ConfigurationSupport; import org.apache.felix.scr.impl.config.ConfigurableComponentHolder; @@ -323,7 +324,7 @@ public class ComponentRegistry implement { // register the name if no registration for that name exists already final ComponentRegistryKey key = new ComponentRegistryKey( bundle, name ); - ComponentHolder existingRegistration = null; + ComponentHolder existingRegistration = null; boolean present; synchronized ( m_componentHoldersByName ) { @@ -559,7 +560,7 @@ public class ComponentRegistry implement */ public ComponentHolder createComponentHolder( BundleComponentActivator activator, ComponentMetadata metadata ) { - ComponentHolder holder; + ComponentHolder holder = null;//TODO not null if (metadata.isFactory()) { @@ -568,11 +569,11 @@ public class ComponentRegistry implement // as soon as the component factory is satisfied if ( !metadata.isObsoleteFactoryComponentFactory() ) { - holder = new ComponentFactoryImpl(activator, metadata ); +//TODO holder = new ComponentFactoryImpl(this ); } else { - holder = new ConfigurationComponentFactoryImpl(activator, metadata ); +//TODO holder = new ConfigurationComponentFactoryImpl(activator ); } } else Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/TargetedPID.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/TargetedPID.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/TargetedPID.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/TargetedPID.java Sun Jun 15 01:10:07 2014 @@ -21,7 +21,6 @@ package org.apache.felix.scr.impl; import org.apache.felix.scr.impl.config.ComponentHolder; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; -import org.osgi.framework.ServiceReference; import org.osgi.framework.Version; /** Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ComponentHolder.java Sun Jun 15 01:10:07 2014 @@ -22,10 +22,8 @@ package org.apache.felix.scr.impl.config import java.util.Dictionary; import java.util.List; -import org.apache.felix.scr.Component; import org.apache.felix.scr.impl.BundleComponentActivator; import org.apache.felix.scr.impl.TargetedPID; -import org.apache.felix.scr.impl.manager.SingleComponentManager; import org.apache.felix.scr.impl.metadata.ComponentMetadata; @@ -44,18 +42,16 @@ public interface ComponentHolder /** * Returns the {@link BundleComponentActivator} owning this component - * holder. + * holder. (overlaps ComponentContaienr) */ BundleComponentActivator getActivator(); - /** * Returns the {@link ComponentMetadata} describing and declaring this - * component. + * component. (overlaps ComponentContaienr) */ ComponentMetadata getComponentMetadata(); - /** * The configuration with the given PID has been deleted from the * Configuration Admin service. @@ -129,11 +125,4 @@ public interface ComponentHolder * @param reason */ void disposeComponents( int reason ); - - - /** - * Informs the holder that the component has been disposed as a result of - * calling the dispose method. - */ - void disposed( SingleComponentManager component ); } Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java Sun Jun 15 01:10:07 2014 @@ -26,11 +26,9 @@ import java.util.Dictionary; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import org.apache.felix.scr.Component; import org.apache.felix.scr.impl.Activator; import org.apache.felix.scr.impl.BundleComponentActivator; import org.apache.felix.scr.impl.TargetedPID; @@ -61,7 +59,7 @@ import org.osgi.service.log.LogService; * service.factoryPid equals the component name. * */ -public class ConfigurableComponentHolder implements ComponentHolder, SimpleLogger +public class ConfigurableComponentHolder implements ComponentHolder, ComponentContainer, SimpleLogger { /** @@ -73,22 +71,22 @@ public class ConfigurableComponentHolder * The {@link ComponentMetadata} describing the held component(s) */ private final ComponentMetadata m_componentMetadata; - + /** the targeted pids corresponding to the pids specified in the config metadata, except possibly for the single * factory pid */ private final TargetedPID[] m_targetedPids; - + private final Long[] m_changeCount; - + private final Map m_factoryChangeCount = new HashMap(); - + /** * the index in metadata.getConfigurationPid() of the base factory pid, if any. Each component created from a factory configuration * might have a different targeted pid. */ private Integer m_factoryPidIndex; - + /** * the non-factory configurations shared between all instances. */ @@ -99,7 +97,7 @@ public class ConfigurableComponentHolder * other required configs may not yet be present so we can't create the component manager yet. */ private final Map> m_factoryConfigurations = new HashMap>(); - + /** * Each factory config may be from a different TargetedPID (sharing the same base service pid, but with different level of detail) */ @@ -129,7 +127,7 @@ public class ConfigurableComponentHolder *
    */ private AbstractComponentManager m_singleComponent; - + /** * Whether components have already been enabled by calling the * {@link #enableComponents(boolean)} method. If this field is true @@ -138,7 +136,7 @@ public class ConfigurableComponentHolder * enabled. Otherwise they are not enabled immediately. */ private volatile boolean m_enabled; - + private final ComponentMethods m_componentMethods; public ConfigurableComponentHolder( final BundleComponentActivator activator, final ComponentMetadata metadata ) @@ -146,7 +144,7 @@ public class ConfigurableComponentHolder this.m_activator = activator; this.m_componentMetadata = metadata; int pidCount = metadata.getConfigurationPid().size(); - this.m_targetedPids = new TargetedPID[pidCount]; + this.m_targetedPids = new TargetedPID[pidCount]; this.m_configurations = new Dictionary[pidCount]; this.m_changeCount = new Long[pidCount]; this.m_components = new HashMap>(); @@ -164,19 +162,19 @@ public class ConfigurableComponentHolder } else if ( m_componentMetadata.getServiceScope() == Scope.bundle ) { - manager = new ServiceFactoryComponentManager( m_activator, this, m_componentMetadata, m_componentMethods ); + manager = new ServiceFactoryComponentManager( this, m_componentMethods ); } else if ( m_componentMetadata.getServiceScope() == Scope.prototype ) { - manager = null;// NYI -// manager = new ServiceFactoryComponentManager( m_activator, this, m_componentMetadata, m_componentMethods ); + manager = null;// NYI + // manager = new ServiceFactoryComponentManager( m_activator, this, m_componentMetadata, m_componentMethods ); } else { //immediate or delayed - manager = new SingleComponentManager( m_activator, this, m_componentMetadata, m_componentMethods ); + manager = new SingleComponentManager( this, m_componentMethods ); } return manager; @@ -218,7 +216,7 @@ public class ConfigurableComponentHolder public void configurationDeleted( final TargetedPID pid, TargetedPID factoryPid ) { log( LogService.LOG_DEBUG, "ImmediateComponentHolder configuration deleted for pid {0}", - new Object[] {pid}, null); + new Object[] {pid}, null); // component to deconfigure or dispose of final Map, Map> scms = new HashMap, Map>(); @@ -226,88 +224,88 @@ public class ConfigurableComponentHolder synchronized ( m_components ) { -// // FELIX-2231: nothing to do any more, all components have been disposed off -// if (m_singleComponent == null) -// { -// return; -// } - if (factoryPid != null) { - checkFactoryPidIndex(factoryPid); - String servicePid = pid.getServicePid(); - m_factoryTargetedPids.remove(servicePid); - m_factoryChangeCount.remove(servicePid); - m_factoryConfigurations.remove(servicePid); - AbstractComponentManager scm = m_components.remove(servicePid); - if ( m_factoryConfigurations.isEmpty() ) - { - m_factoryPidIndex = null; - } - if ( !m_enabled || scm == null ) - { - return; - } - reconfigure = m_componentMetadata.isConfigurationOptional() && m_components.isEmpty(); - if ( reconfigure ) - { - m_singleComponent = scm; - scms.put( scm, mergeProperties(null) ); - } - else - { - scms.put( scm, null ); - } - } - else - { - //singleton pid - int index = getSingletonPidIndex(pid); - m_targetedPids[index] = null; - m_changeCount[index] = null; - m_configurations[index] = null; - if ( !m_enabled ) - { - return; - } - reconfigure = m_componentMetadata.isConfigurationOptional(); - - if ( m_factoryPidIndex == null) - { - if ( m_singleComponent != null ) { - if (reconfigure) { - scms.put(m_singleComponent, mergeProperties(null)); - } else { - scms.put(m_singleComponent, null); - m_singleComponent = null; - } - } - } - else - { - if (reconfigure) { - for (Map.Entry> entry : m_components.entrySet()) { - scms.put(entry.getValue(), mergeProperties(entry.getKey())); - } - } - else - { - for (Map.Entry> entry : m_components.entrySet()) { - scms.put(entry.getValue(), null ); - } - m_components.clear(); - } - } + // // FELIX-2231: nothing to do any more, all components have been disposed off + // if (m_singleComponent == null) + // { + // return; + // } + if (factoryPid != null) { + checkFactoryPidIndex(factoryPid); + String servicePid = pid.getServicePid(); + m_factoryTargetedPids.remove(servicePid); + m_factoryChangeCount.remove(servicePid); + m_factoryConfigurations.remove(servicePid); + AbstractComponentManager scm = m_components.remove(servicePid); + if ( m_factoryConfigurations.isEmpty() ) + { + m_factoryPidIndex = null; + } + if ( !m_enabled || scm == null ) + { + return; + } + reconfigure = m_componentMetadata.isConfigurationOptional() && m_components.isEmpty(); + if ( reconfigure ) + { + m_singleComponent = scm; + scms.put( scm, mergeProperties(null) ); + } + else + { + scms.put( scm, null ); + } + } + else + { + //singleton pid + int index = getSingletonPidIndex(pid); + m_targetedPids[index] = null; + m_changeCount[index] = null; + m_configurations[index] = null; + if ( !m_enabled ) + { + return; + } + reconfigure = m_componentMetadata.isConfigurationOptional(); + + if ( m_factoryPidIndex == null) + { + if ( m_singleComponent != null ) { + if (reconfigure) { + scms.put(m_singleComponent, mergeProperties(null)); + } else { + scms.put(m_singleComponent, null); + m_singleComponent = null; + } + } + } + else + { + if (reconfigure) { + for (Map.Entry> entry : m_components.entrySet()) { + scms.put(entry.getValue(), mergeProperties(entry.getKey())); + } + } + else + { + for (Map.Entry> entry : m_components.entrySet()) { + scms.put(entry.getValue(), null ); + } + m_components.clear(); + } + } - } + } } for ( Map.Entry,Map> entry: scms.entrySet()) { - if ( reconfigure ) { - entry.getKey().reconfigure( entry.getValue(), true); - } else { - entry.getKey().dispose(ComponentConstants.DEACTIVATION_REASON_CONFIGURATION_DELETED); - } - } + if ( reconfigure ) { + entry.getKey().reconfigure( entry.getValue(), true); + } else { + entry.getKey().dispose(ComponentConstants.DEACTIVATION_REASON_CONFIGURATION_DELETED); + } + } } @@ -328,69 +326,69 @@ public class ConfigurableComponentHolder public boolean configurationUpdated( TargetedPID pid, TargetedPID factoryPid, final Dictionary props, long changeCount ) { log( LogService.LOG_DEBUG, "ConfigurableComponentHolder configuration updated for pid {0} with properties {1}", - new Object[] {pid, props}, null); + new Object[] {pid, props}, null); // component to update or create final Map, Map> scms = new HashMap< AbstractComponentManager, Map>(); boolean created = false; - + //TODO better change count tracking synchronized (m_components) { - //Find or create the component manager, or return if not satisfied. - if (factoryPid != null) { - checkFactoryPidIndex(factoryPid); - m_factoryConfigurations.put(pid.getServicePid(), props); - m_factoryTargetedPids.put(pid.getServicePid(), factoryPid); - m_factoryChangeCount.put(pid.getServicePid(), changeCount); - if (m_enabled && isSatisfied()) { - if (m_singleComponent != null) { - AbstractComponentManager scm = m_singleComponent; - scms.put( scm, mergeProperties( pid.getServicePid() ) ); - m_singleComponent = null; - m_components.put(pid.getServicePid(), scm); - } else if (m_components.containsKey(pid.getServicePid())) { - scms.put( m_components.get(pid.getServicePid()), mergeProperties( pid.getServicePid()) ); - } else { - AbstractComponentManager scm = createComponentManager(); - m_components.put(pid.getServicePid(), scm); - scms.put( scm, mergeProperties( pid.getServicePid()) ); - created = true; - } - } else { - return false; - } - - } else { - //singleton pid - int index = getSingletonPidIndex(pid); - m_targetedPids[index] = pid; - m_changeCount[index] = changeCount; - m_configurations[index] = props; - if (m_enabled && isSatisfied()) { - if (m_singleComponent != null) { - scms.put( m_singleComponent, mergeProperties( pid.getServicePid() ) ); - } - else if ( m_factoryPidIndex != null) - { - for (Map.Entry> entry: m_components.entrySet()) - { - scms.put(entry.getValue(), mergeProperties( entry.getKey())); - } - } - else - { - m_singleComponent = createComponentManager(); - scms.put( m_singleComponent, mergeProperties( pid.getServicePid() ) ); - created = true; - } - } else { - return false; - } - - } - - } - + //Find or create the component manager, or return if not satisfied. + if (factoryPid != null) { + checkFactoryPidIndex(factoryPid); + m_factoryConfigurations.put(pid.getServicePid(), props); + m_factoryTargetedPids.put(pid.getServicePid(), factoryPid); + m_factoryChangeCount.put(pid.getServicePid(), changeCount); + if (m_enabled && isSatisfied()) { + if (m_singleComponent != null) { + AbstractComponentManager scm = m_singleComponent; + scms.put( scm, mergeProperties( pid.getServicePid() ) ); + m_singleComponent = null; + m_components.put(pid.getServicePid(), scm); + } else if (m_components.containsKey(pid.getServicePid())) { + scms.put( m_components.get(pid.getServicePid()), mergeProperties( pid.getServicePid()) ); + } else { + AbstractComponentManager scm = createComponentManager(); + m_components.put(pid.getServicePid(), scm); + scms.put( scm, mergeProperties( pid.getServicePid()) ); + created = true; + } + } else { + return false; + } + + } else { + //singleton pid + int index = getSingletonPidIndex(pid); + m_targetedPids[index] = pid; + m_changeCount[index] = changeCount; + m_configurations[index] = props; + if (m_enabled && isSatisfied()) { + if (m_singleComponent != null) { + scms.put( m_singleComponent, mergeProperties( pid.getServicePid() ) ); + } + else if ( m_factoryPidIndex != null) + { + for (Map.Entry> entry: m_components.entrySet()) + { + scms.put(entry.getValue(), mergeProperties( entry.getKey())); + } + } + else + { + m_singleComponent = createComponentManager(); + scms.put( m_singleComponent, mergeProperties( pid.getServicePid() ) ); + created = true; + } + } else { + return false; + } + + } + + } + // we have the icm. //properties is all the configs merged together (without any possible component factory info. @@ -398,199 +396,199 @@ public class ConfigurableComponentHolder final boolean enable = created && m_enabled;// TODO WTF?? && getComponentMetadata().isEnabled(); for ( Map.Entry,Map> entry: scms.entrySet()) { - // configure the component - entry.getKey().reconfigure(entry.getValue(), false); - log(LogService.LOG_DEBUG, - "ImmediateComponentHolder Finished configuring the dependency managers for component for pid {0} ", - new Object[] { pid }, null); - if (enable) { - entry.getKey().enable(false); - log(LogService.LOG_DEBUG, - "ImmediateComponentHolder Finished enabling component for pid {0} ", - new Object[] { pid }, null); - } else { - log(LogService.LOG_DEBUG, - "ImmediateComponentHolder Will not enable component for pid {0}: holder enabled state: {1}, metadata enabled: {2} ", - new Object[] { pid, m_enabled, - m_componentMetadata.isEnabled() }, null); - } - } - return created; - } - - private Map mergeProperties(String servicePid) { - Map properties; - properties = new HashMap(m_componentMetadata.getProperties()); - for (int i = 0; i < m_configurations.length; i++) - { - if ( m_factoryPidIndex != null && i == m_factoryPidIndex) - { - copyTo(properties, m_factoryConfigurations.get(servicePid)); - } - else if ( m_configurations[i] != null ) - { - copyTo(properties, m_configurations[i]); - } - } - return properties; - } - - private int getSingletonPidIndex(TargetedPID pid) { - int index = m_componentMetadata.getPidIndex(pid); - if (index == -1) { - log(LogService.LOG_ERROR, - "Unrecognized pid {0}, expected one of {1}", - new Object[] { pid, - m_componentMetadata.getConfigurationPid() }, - null); - throw new IllegalArgumentException("Unrecognized pid " - + pid); - } - if (m_factoryPidIndex != null && index == m_factoryPidIndex) { - log(LogService.LOG_ERROR, - "singleton pid {0} supplied, but matches an existing factory pid at index: {1}", - new Object[] { pid, m_factoryPidIndex }, null); - throw new IllegalStateException( - "Singleton pid supplied matching a previous factory pid " - + pid); - } - return index; - } + // configure the component + entry.getKey().reconfigure(entry.getValue(), false); + log(LogService.LOG_DEBUG, + "ImmediateComponentHolder Finished configuring the dependency managers for component for pid {0} ", + new Object[] { pid }, null); + if (enable) { + entry.getKey().enable(false); + log(LogService.LOG_DEBUG, + "ImmediateComponentHolder Finished enabling component for pid {0} ", + new Object[] { pid }, null); + } else { + log(LogService.LOG_DEBUG, + "ImmediateComponentHolder Will not enable component for pid {0}: holder enabled state: {1}, metadata enabled: {2} ", + new Object[] { pid, m_enabled, + m_componentMetadata.isEnabled() }, null); + } + } + return created; + } + + private Map mergeProperties(String servicePid) { + Map properties; + properties = new HashMap(m_componentMetadata.getProperties()); + for (int i = 0; i < m_configurations.length; i++) + { + if ( m_factoryPidIndex != null && i == m_factoryPidIndex) + { + copyTo(properties, m_factoryConfigurations.get(servicePid)); + } + else if ( m_configurations[i] != null ) + { + copyTo(properties, m_configurations[i]); + } + } + return properties; + } + + private int getSingletonPidIndex(TargetedPID pid) { + int index = m_componentMetadata.getPidIndex(pid); + if (index == -1) { + log(LogService.LOG_ERROR, + "Unrecognized pid {0}, expected one of {1}", + new Object[] { pid, + m_componentMetadata.getConfigurationPid() }, + null); + throw new IllegalArgumentException("Unrecognized pid " + + pid); + } + if (m_factoryPidIndex != null && index == m_factoryPidIndex) { + log(LogService.LOG_ERROR, + "singleton pid {0} supplied, but matches an existing factory pid at index: {1}", + new Object[] { pid, m_factoryPidIndex }, null); + throw new IllegalStateException( + "Singleton pid supplied matching a previous factory pid " + + pid); + } + return index; + } //TODO update error messages so they make sense for deleting config too. - private void checkFactoryPidIndex(TargetedPID factoryPid) { - int index = m_componentMetadata.getPidIndex(factoryPid); - if (index == -1) { - log(LogService.LOG_ERROR, - "Unrecognized factory pid {0}, expected one of {1}", - new Object[] { factoryPid, - m_componentMetadata.getConfigurationPid() }, - null); - throw new IllegalArgumentException( - "Unrecognized factory pid " + factoryPid); - } - if (m_configurations[index] != null) { - log(LogService.LOG_ERROR, - "factory pid {0}, but this pid is already supplied as a singleton: {1} at index {2}", - new Object[] { factoryPid, Arrays.asList(m_targetedPids), index }, null); - throw new IllegalStateException( - "Factory pid supplied after all non-factory configurations supplied " - + factoryPid); - } - if (m_factoryPidIndex == null) { - m_factoryPidIndex = index; - } else if (index != m_factoryPidIndex) { - log(LogService.LOG_ERROR, - "factory pid {0} supplied for index {1}, but a factory pid previously supplied at index {2}", - new Object[] { factoryPid, index, m_factoryPidIndex }, - null); - throw new IllegalStateException( - "Factory pid supplied at wrong index " + factoryPid); - } - } + private void checkFactoryPidIndex(TargetedPID factoryPid) { + int index = m_componentMetadata.getPidIndex(factoryPid); + if (index == -1) { + log(LogService.LOG_ERROR, + "Unrecognized factory pid {0}, expected one of {1}", + new Object[] { factoryPid, + m_componentMetadata.getConfigurationPid() }, + null); + throw new IllegalArgumentException( + "Unrecognized factory pid " + factoryPid); + } + if (m_configurations[index] != null) { + log(LogService.LOG_ERROR, + "factory pid {0}, but this pid is already supplied as a singleton: {1} at index {2}", + new Object[] { factoryPid, Arrays.asList(m_targetedPids), index }, null); + throw new IllegalStateException( + "Factory pid supplied after all non-factory configurations supplied " + + factoryPid); + } + if (m_factoryPidIndex == null) { + m_factoryPidIndex = index; + } else if (index != m_factoryPidIndex) { + log(LogService.LOG_ERROR, + "factory pid {0} supplied for index {1}, but a factory pid previously supplied at index {2}", + new Object[] { factoryPid, index, m_factoryPidIndex }, + null); + throw new IllegalStateException( + "Factory pid supplied at wrong index " + factoryPid); + } + } protected static void copyTo( Map target, Dictionary source ) { - + for ( Enumeration keys = source.keys(); keys.hasMoreElements(); ) { - String key = keys.nextElement(); - Object value = source.get(key); - target.put(key, value); + String key = keys.nextElement(); + Object value = source.get(key); + target.put(key, value); } } - + /** * Determine if the holder is satisfied with configurations * @return true if configuration optional or all pids supplied with configurations */ private boolean isSatisfied() { - if ( m_componentMetadata.isConfigurationOptional() || m_componentMetadata.isConfigurationIgnored() ) - { - return true; - } - for ( int i = 0; i < m_componentMetadata.getConfigurationPid().size(); i++) - { - if ( m_configurations[i] != null) - { - continue; - } - if ( m_factoryPidIndex != null && m_factoryPidIndex == i) - { - continue; - } - return false; - } - return true; - } + if ( m_componentMetadata.isConfigurationOptional() || m_componentMetadata.isConfigurationIgnored() ) + { + return true; + } + for ( int i = 0; i < m_componentMetadata.getConfigurationPid().size(); i++) + { + if ( m_configurations[i] != null) + { + continue; + } + if ( m_factoryPidIndex != null && m_factoryPidIndex == i) + { + continue; + } + return false; + } + return true; + } /** * @param pid the Targeted PID we need the change count for * @param targetedPid the targeted factory pid for a factory configuration or the pid for a singleton configuration * @return pid for this service pid. */ - public long getChangeCount( TargetedPID pid, TargetedPID targetedPid) + public long getChangeCount( TargetedPID pid, TargetedPID targetedPid) { - int index = m_componentMetadata.getPidIndex(targetedPid); - Long result; - if ( index == -1 ) - { - throw new IllegalArgumentException("pid not recognized as for this component: " + pid); - } - if ( m_factoryPidIndex != null && index == m_factoryPidIndex ) - { - result = m_factoryChangeCount.get(pid.getServicePid()); - } - else - { - result = m_changeCount[index]; - } - return result == null? -1: result; - + int index = m_componentMetadata.getPidIndex(targetedPid); + Long result; + if ( index == -1 ) + { + throw new IllegalArgumentException("pid not recognized as for this component: " + pid); + } + if ( m_factoryPidIndex != null && index == m_factoryPidIndex ) + { + result = m_factoryChangeCount.get(pid.getServicePid()); + } + else + { + result = m_changeCount[index]; + } + return result == null? -1: result; + } public List> getComponents() - { + { synchronized ( m_components ) { return getComponentManagers( false ); } - } + } - public boolean isEnabled() { - return m_enabled; - } + public boolean isEnabled() { + return m_enabled; + } public void enableComponents( final boolean async ) { - List> cms = new ArrayList>(); - synchronized ( m_components ) - { - if ( isSatisfied() ) - { - if ( m_factoryPidIndex == null) - { - m_singleComponent = createComponentManager(); - cms.add( m_singleComponent ); - m_singleComponent.reconfigure(mergeProperties( null ), false); - } - else - { - for (String pid: m_factoryConfigurations.keySet()) { - SingleComponentManager scm = createComponentManager(); - m_components.put(pid, scm); - scm.reconfigure( mergeProperties( pid ), false); - cms.add( scm ); - } - } - } - m_enabled = true; - } - for ( AbstractComponentManager cm : cms ) - { - cm.enable( async ); - } + List> cms = new ArrayList>(); + synchronized ( m_components ) + { + if ( isSatisfied() ) + { + if ( m_factoryPidIndex == null) + { + m_singleComponent = createComponentManager(); + cms.add( m_singleComponent ); + m_singleComponent.reconfigure(mergeProperties( null ), false); + } + else + { + for (String pid: m_factoryConfigurations.keySet()) { + SingleComponentManager scm = createComponentManager(); + m_components.put(pid, scm); + scm.reconfigure( mergeProperties( pid ), false); + cms.add( scm ); + } + } + } + m_enabled = true; + } + for ( AbstractComponentManager cm : cms ) + { + cm.enable( async ); + } } @@ -602,11 +600,11 @@ public class ConfigurableComponentHolder m_enabled = false; cms = getComponentManagers( true ); -// if (m_singleComponent != null && m_factoryPidIndex == null && -// (m_componentMetadata.isConfigurationIgnored() || m_componentMetadata.isConfigurationOptional())) -// { -// m_singleComponent = null; -// } + // if (m_singleComponent != null && m_factoryPidIndex == null && + // (m_componentMetadata.isConfigurationIgnored() || m_componentMetadata.isConfigurationOptional())) + // { + // m_singleComponent = null; + // } } for ( AbstractComponentManager cm : cms ) { @@ -648,7 +646,7 @@ public class ConfigurableComponentHolder if ( component == m_singleComponent ) { - m_singleComponent = null; + m_singleComponent = null; } } } @@ -666,7 +664,7 @@ public class ConfigurableComponentHolder * {@code ImmediateComponentHolder} and is equal to this object; * {@code false} otherwise. */ - public boolean equals(Object object) + public boolean equals(Object object) { if (!(object instanceof ConfigurableComponentHolder)) { @@ -675,30 +673,30 @@ public class ConfigurableComponentHolder ConfigurableComponentHolder other = (ConfigurableComponentHolder) object; return m_activator == other.m_activator - && getName().equals(other.getName()); + && getName().equals(other.getName()); + } + + /** + * Returns a hash code value for the object. + * + * @return An integer which is a hash code value for this object. + */ + @Override + public int hashCode() + { + return getName().hashCode(); + } + + @Override + public String toString() + { + return "[ImmediateComponentHolder:" + getName() + "]"; + } + + String getName() + { + return m_componentMetadata.getName(); } - - /** - * Returns a hash code value for the object. - * - * @return An integer which is a hash code value for this object. - */ - @Override - public int hashCode() - { - return getName().hashCode(); - } - - @Override - public String toString() - { - return "[ImmediateComponentHolder:" + getName() + "]"; - } - - String getName() - { - return m_componentMetadata.getName(); - } //---------- internal @@ -709,32 +707,32 @@ public class ConfigurableComponentHolder * * @param clear If true, clear the map and the single component manager. */ - List> getComponentManagers( final boolean clear ) - { - List> cm; - if ( m_components.isEmpty() ) - { - if ( m_singleComponent != null) - { - cm = Collections.singletonList(m_singleComponent); - } - else - { - cm = Collections.emptyList(); - } - } - - else - { - cm = new ArrayList>(m_components.values()); - } - if ( clear ) - { - m_components.clear(); - m_singleComponent = null; - } - return cm; - } + List> getComponentManagers( final boolean clear ) + { + List> cm; + if ( m_components.isEmpty() ) + { + if ( m_singleComponent != null) + { + cm = Collections.singletonList(m_singleComponent); + } + else + { + cm = Collections.emptyList(); + } + } + + else + { + cm = new ArrayList>(m_components.values()); + } + if ( clear ) + { + m_components.clear(); + m_singleComponent = null; + } + return cm; + } public boolean isLogEnabled( int level ) { @@ -761,20 +759,20 @@ public class ConfigurableComponentHolder public TargetedPID getConfigurationTargetedPID(TargetedPID pid, TargetedPID factoryPid) { - if ( factoryPid == null ) - { - int index = m_componentMetadata.getPidIndex(pid); - if (index != -1) - { - return m_targetedPids[index]; - } - return null; - } - //each factory configured component may have a different factory targeted pid. - synchronized (m_components) - { - return m_factoryTargetedPids.get(pid.getServicePid()); - } + if ( factoryPid == null ) + { + int index = m_componentMetadata.getPidIndex(pid); + if (index != -1) + { + return m_targetedPids[index]; + } + return null; + } + //each factory configured component may have a different factory targeted pid. + synchronized (m_components) + { + return m_factoryTargetedPids.get(pid.getServicePid()); + } } } 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=1602643&r1=1602642&r2=1602643&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 Sun Jun 15 01:10:07 2014 @@ -42,6 +42,7 @@ import java.util.concurrent.locks.Reentr import org.apache.felix.scr.impl.Activator; import org.apache.felix.scr.impl.BundleComponentActivator; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.config.ComponentManager; import org.apache.felix.scr.impl.config.ReferenceManager; import org.apache.felix.scr.impl.config.ScrConfiguration; @@ -77,14 +78,13 @@ public abstract class AbstractComponentM "Configuration deleted", "Component disabled", "Bundle stopped"}; + + protected final ComponentContainer m_container; private final boolean m_factoryInstance; // the ID of this component private long m_componentId; - // The metadata - private final ComponentMetadata m_componentMetadata; - private final ComponentMethods m_componentMethods; // The dependency managers that manage every dependency @@ -96,9 +96,6 @@ public abstract class AbstractComponentM private final AtomicInteger m_trackingCount = new AtomicInteger( ); - // A reference to the BundleComponentActivator - private BundleComponentActivator m_activator; - // The ServiceRegistration is now tracked in the RegistrationManager private final ReentrantLock m_stateLock; @@ -132,22 +129,22 @@ public abstract class AbstractComponentM /** * The constructor receives both the activator and the metadata * - * @param activator - * @param metadata + * @param container * @param componentMethods */ - protected AbstractComponentManager( BundleComponentActivator activator, ComponentMetadata metadata, ComponentMethods componentMethods ) + protected AbstractComponentManager( ComponentContainer container, ComponentMethods componentMethods ) { - this( activator, metadata, componentMethods, false ); + this( container, componentMethods, false ); } - protected AbstractComponentManager( BundleComponentActivator activator, ComponentMetadata metadata, ComponentMethods componentMethods, boolean factoryInstance ) + protected AbstractComponentManager( ComponentContainer container, ComponentMethods componentMethods, boolean factoryInstance ) { m_factoryInstance = factoryInstance; - m_activator = activator; - m_componentMetadata = metadata; + m_container = container; this.m_componentMethods = componentMethods; m_componentId = -1; + + ComponentMetadata metadata = container.getComponentMetadata(); m_dependencyManagers = loadDependencyManagers( metadata ); @@ -434,7 +431,7 @@ public abstract class AbstractComponentM if ( async ) { final CountDownLatch latch = enableLatch; - m_activator.schedule( new Runnable() + getActivator().schedule( new Runnable() { long count = taskCounter.incrementAndGet(); @@ -537,7 +534,7 @@ public abstract class AbstractComponentM if ( async ) { final CountDownLatch latch = enableLatch; - m_activator.schedule( new Runnable() + getActivator().schedule( new Runnable() { long count = taskCounter.incrementAndGet(); @@ -598,9 +595,9 @@ public abstract class AbstractComponentM { return m_componentId; } - - public String getName() { - return m_componentMetadata.getName(); + + protected String getName() { + return getComponentMetadata().getName(); } /** @@ -637,81 +634,10 @@ public abstract class AbstractComponentM } - public String getClassName() + protected boolean isImmediate() { - return m_componentMetadata.getImplementationClassName(); - } + return getComponentMetadata().isImmediate(); - public String getFactory() - { - return m_componentMetadata.getFactoryIdentifier(); - } - - public boolean isImmediate() - { - return m_componentMetadata.isImmediate(); - - } - - public boolean isDefaultEnabled() - { - return m_componentMetadata.isEnabled(); - } - - - public String getActivate() - { - return m_componentMetadata.getActivate(); - } - - - public boolean isActivateDeclared() - { - return m_componentMetadata.isActivateDeclared(); - } - - - public String getDeactivate() - { - return m_componentMetadata.getDeactivate(); - } - - - public boolean isDeactivateDeclared() - { - return m_componentMetadata.isDeactivateDeclared(); - } - - - public String getModified() - { - return m_componentMetadata.getModified(); - } - - - public String getConfigurationPolicy() - { - return m_componentMetadata.getConfigurationPolicy(); - } - - public List getConfigurationPid() - { - return m_componentMetadata.getConfigurationPid(); - } - - public boolean isConfigurationPidDeclared() - { - return m_componentMetadata.isConfigurationPidDeclared(); - } - - public boolean isServiceFactory() - { - return m_componentMetadata.getServiceScope() == Scope.bundle; - } - - public String getServiceScope() - { - return m_componentMetadata.getServiceScope().name(); } public boolean isFactory() @@ -719,15 +645,6 @@ public abstract class AbstractComponentM return false; } - public String[] getServices() - { - if ( m_componentMetadata.getServiceMetadata() != null ) - { - return m_componentMetadata.getServiceMetadata().getProvides(); - } - - return null; - } //-------------- atomic transition methods ------------------------------- @@ -1092,7 +1009,7 @@ public abstract class AbstractComponentM throw new IllegalStateException("Could not load implementation object class " + getComponentMetadata().getImplementationClassName()); } - m_componentMethods.initComponentMethods( m_componentMetadata, implementationObjectClass ); + m_componentMethods.initComponentMethods( getComponentMetadata(), implementationObjectClass ); for ( DependencyManager dependencyManager : m_dependencyManagers ) { @@ -1148,7 +1065,7 @@ public abstract class AbstractComponentM //********************************************************************************************************** public BundleComponentActivator getActivator() { - return m_activator; + return m_container.getActivator(); } @@ -1168,9 +1085,9 @@ public abstract class AbstractComponentM synchronized void clear() { // for some testing, the activator may be null - if ( m_activator != null ) + if ( m_container.getActivator() != null ) { - m_activator.unregisterComponentId( this ); + m_container.getActivator().unregisterComponentId( this ); } } @@ -1484,7 +1401,7 @@ public abstract class AbstractComponentM */ public ComponentMetadata getComponentMetadata() { - return m_componentMetadata; + return m_container.getComponentMetadata(); } /** 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=1602643&r1=1602642&r2=1602643&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 Sun Jun 15 01:10:07 2014 @@ -31,7 +31,7 @@ import org.apache.felix.scr.Component; import org.apache.felix.scr.component.ExtFactoryComponentInstance; import org.apache.felix.scr.impl.BundleComponentActivator; import org.apache.felix.scr.impl.TargetedPID; -import org.apache.felix.scr.impl.config.ComponentHolder; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.config.ComponentManager; import org.apache.felix.scr.impl.helper.ComponentMethods; import org.apache.felix.scr.impl.metadata.ComponentMetadata; @@ -58,7 +58,7 @@ import org.osgi.service.log.LogService; * not all dependencies are present and the created components also persist whether or * not the dependencies are present to allow the component instance to exist. */ -public class ComponentFactoryImpl extends AbstractComponentManager implements ComponentFactory, ComponentHolder +public class ComponentFactoryImpl extends AbstractComponentManager implements ComponentFactory, ComponentContainer { /** @@ -94,9 +94,9 @@ public class ComponentFactoryImpl ext protected TargetedPID m_targetedPID; - public ComponentFactoryImpl( BundleComponentActivator activator, ComponentMetadata metadata ) + public ComponentFactoryImpl( ComponentContainer container ) { - super( activator, metadata, new ComponentMethods() ); + super( container, new ComponentMethods() ); m_componentInstances = new IdentityHashMap, SingleComponentManager>(); m_configuration = new Hashtable(); } @@ -389,7 +389,7 @@ public class ComponentFactoryImpl ext { log( LogService.LOG_DEBUG, "ImmediateComponentHolder out of order configuration updated for pid {0} with existing count {1}, new count {2}", - new Object[] { getConfigurationPid(), m_changeCount, changeCount }, null ); + new Object[] { getComponentMetadata().getConfigurationPid(), m_changeCount, changeCount }, null ); return false; } m_changeCount = changeCount; @@ -535,7 +535,7 @@ public class ComponentFactoryImpl ext */ private SingleComponentManager createComponentManager() { - return new SingleComponentManager( getActivator(), this, getComponentMetadata(), getComponentMethods(), !getComponentMetadata().isPersistentFactoryComponent() ); + return new SingleComponentManager( this, getComponentMethods(), !getComponentMetadata().isPersistentFactoryComponent() ); } Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/ConfigurationComponentFactoryImpl.java Sun Jun 15 01:10:07 2014 @@ -26,12 +26,10 @@ import java.util.List; import java.util.Map; import org.apache.felix.scr.Component; -import org.apache.felix.scr.impl.BundleComponentActivator; import org.apache.felix.scr.impl.TargetedPID; -import org.apache.felix.scr.impl.config.ComponentHolder; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.config.ComponentManager; import org.apache.felix.scr.impl.helper.ComponentMethods; -import org.apache.felix.scr.impl.metadata.ComponentMetadata; import org.osgi.framework.Constants; import org.osgi.service.log.LogService; @@ -55,9 +53,9 @@ public class ConfigurationComponentFacto */ private final Map> m_configuredServices = new HashMap>(); - public ConfigurationComponentFactoryImpl( BundleComponentActivator activator, ComponentMetadata metadata ) + public ConfigurationComponentFactoryImpl( ComponentContainer container ) { - super( activator, metadata ); + super( container ); } @@ -247,15 +245,14 @@ public class ConfigurationComponentFacto */ private SingleComponentManager createConfigurationComponentManager() { - return new ComponentFactoryConfiguredInstance( getActivator(), this, getComponentMetadata(), getComponentMethods() ); + return new ComponentFactoryConfiguredInstance( this, getComponentMethods() ); } static class ComponentFactoryConfiguredInstance extends SingleComponentManager { - public ComponentFactoryConfiguredInstance( BundleComponentActivator activator, ComponentHolder componentHolder, - ComponentMetadata metadata, ComponentMethods componentMethods ) + public ComponentFactoryConfiguredInstance( ComponentContainer container, ComponentMethods componentMethods ) { - super( activator, componentHolder, metadata, componentMethods, true ); + super( container, componentMethods, true ); } public boolean isImmediate() 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=1602643&r1=1602642&r2=1602643&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 Sun Jun 15 01:10:07 2014 @@ -24,13 +24,11 @@ import java.util.Collection; import java.util.IdentityHashMap; import java.util.Iterator; -import org.apache.felix.scr.impl.BundleComponentActivator; -import org.apache.felix.scr.impl.config.ComponentHolder; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.helper.ActivateMethod; import org.apache.felix.scr.impl.helper.ComponentMethods; import org.apache.felix.scr.impl.helper.MethodResult; import org.apache.felix.scr.impl.helper.ModifiedMethod; -import org.apache.felix.scr.impl.metadata.ComponentMetadata; import org.osgi.framework.Bundle; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentConstants; @@ -51,15 +49,12 @@ public class ServiceFactoryComponentMana private IdentityHashMap serviceContexts = new IdentityHashMap(); /** - * @param activator BundleComponentActivator for this DS implementation - * @param componentHolder ComponentHolder for configuration management - * @param metadata ComponentMetadata for this component + * @param container ComponentHolder for configuration management * @param componentMethods */ - public ServiceFactoryComponentManager( BundleComponentActivator activator, ComponentHolder componentHolder, - ComponentMetadata metadata, ComponentMethods componentMethods ) + public ServiceFactoryComponentManager( ComponentContainer container, ComponentMethods componentMethods ) { - super( activator, componentHolder, metadata, componentMethods ); + super( container, componentMethods ); } 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=1602643&r1=1602642&r2=1602643&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 Sun Jun 15 01:10:07 2014 @@ -31,14 +31,13 @@ import java.util.concurrent.atomic.Atomi import org.apache.felix.scr.impl.BundleComponentActivator; import org.apache.felix.scr.impl.TargetedPID; -import org.apache.felix.scr.impl.config.ComponentHolder; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.config.ComponentManager; import org.apache.felix.scr.impl.config.ReferenceManager; import org.apache.felix.scr.impl.helper.ActivateMethod.ActivatorParameter; import org.apache.felix.scr.impl.helper.ComponentMethods; import org.apache.felix.scr.impl.helper.MethodResult; import org.apache.felix.scr.impl.helper.ModifiedMethod; -import org.apache.felix.scr.impl.metadata.ComponentMetadata; import org.apache.felix.scr.impl.metadata.ReferenceMetadata; import org.osgi.framework.Bundle; import org.osgi.framework.ServiceFactory; @@ -62,9 +61,6 @@ public class SingleComponentManager e // The context that will be passed to the implementationObject private volatile ComponentContextImpl m_componentContext; - // the component holder responsible for managing this component - private final ComponentHolder m_componentHolder; - // Merged properties from xml descriptor and all configurations private Map m_configurationProperties; @@ -82,31 +78,22 @@ public class SingleComponentManager e /** * The constructor receives both the activator and the metadata - * - * @param activator - * @param metadata - * @param componentMethods + * @param componentMethods */ - public SingleComponentManager( BundleComponentActivator activator, ComponentHolder componentHolder, - ComponentMetadata metadata, ComponentMethods componentMethods ) + public SingleComponentManager( ComponentContainer container, ComponentMethods componentMethods ) { - this(activator, componentHolder, metadata, componentMethods, false); + this(container, componentMethods, false); } - public SingleComponentManager( BundleComponentActivator activator, ComponentHolder componentHolder, - ComponentMetadata metadata, ComponentMethods componentMethods, boolean factoryInstance ) + public SingleComponentManager( ComponentContainer container, ComponentMethods componentMethods, + boolean factoryInstance ) { - super( activator, metadata, componentMethods, factoryInstance ); - - m_componentHolder = componentHolder; + super( container, componentMethods, factoryInstance ); } void clear() { - if ( m_componentHolder != null ) - { - m_componentHolder.disposed( this ); - } + m_container.disposed( this ); super.clear(); } Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java Sun Jun 15 01:10:07 2014 @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.List; import org.apache.felix.scr.impl.ComponentRegistry; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.config.ComponentHolder; import org.apache.felix.scr.impl.config.ComponentManager; import org.apache.felix.scr.impl.config.ReferenceManager; @@ -58,7 +59,7 @@ public class ServiceComponentRuntimeImpl } public ComponentDescriptionDTO getComponentDescriptionDTO(Bundle bundle, String name) { - ComponentHolder holder = componentRegistry.getComponentHolder(bundle, name); + ComponentHolder holder = componentRegistry.getComponentHolder(bundle, name); if ( holder != null ) { return holderToDescription(holder); Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolderTest.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolderTest.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolderTest.java (original) +++ felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/config/ConfiguredComponentHolderTest.java Sun Jun 15 01:10:07 2014 @@ -28,7 +28,6 @@ import java.util.Map; import junit.framework.TestCase; -import org.apache.felix.scr.impl.BundleComponentActivator; import org.apache.felix.scr.impl.TargetedPID; import org.apache.felix.scr.impl.helper.ComponentMethods; import org.apache.felix.scr.impl.manager.SingleComponentManager; @@ -239,7 +238,7 @@ public class ConfiguredComponentHolderTe protected SingleComponentManager createComponentManager() { - return new MockImmediateComponentManager( getActivator(), this, getComponentMetadata() ); + return new MockImmediateComponentManager( this ); } } @@ -249,9 +248,9 @@ public class ConfiguredComponentHolderTe private Map m_configuration; - public MockImmediateComponentManager( BundleComponentActivator activator, ComponentHolder componentHolder, ComponentMetadata metadata ) + public MockImmediateComponentManager( ComponentContainer container ) { - super( activator, componentHolder, metadata, new ComponentMethods() ); + super( container, new ComponentMethods() ); } Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/ActivateMethodTest.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/ActivateMethodTest.java?rev=1602643&r1=1602642&r2=1602643&view=diff ============================================================================== --- felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/ActivateMethodTest.java (original) +++ felix/trunk/scr/src/test/java/org/apache/felix/scr/impl/helper/ActivateMethodTest.java Sun Jun 15 01:10:07 2014 @@ -25,6 +25,8 @@ import java.util.Hashtable; import junit.framework.TestCase; +import org.apache.felix.scr.impl.BundleComponentActivator; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.manager.SingleComponentManager; import org.apache.felix.scr.impl.metadata.ComponentMetadata; import org.apache.felix.scr.impl.metadata.XmlHandler; @@ -264,8 +266,8 @@ public class ActivateMethodTest extends */ private void checkMethod( BaseObject obj, String methodName, String methodDesc ) { - ComponentMetadata metadata = newMetadata(); - SingleComponentManager icm = new SingleComponentManager( null, null, metadata, new ComponentMethods() ); + ComponentContainer container = newContainer(); + SingleComponentManager icm = new SingleComponentManager( container, new ComponentMethods() ); ActivateMethod am = new ActivateMethod( methodName, methodName != null, obj.getClass(), true, false ); am.invoke( obj, new ActivateMethod.ActivatorParameter( m_ctx, -1 ), null, icm ); Method m = get(am, "m_method"); @@ -275,6 +277,30 @@ public class ActivateMethodTest extends } + private ComponentContainer newContainer() + { + final ComponentMetadata metadata = newMetadata(); + ComponentContainer container = new ComponentContainer() { + + public BundleComponentActivator getActivator() + { + return null; + } + + public ComponentMetadata getComponentMetadata() + { + return metadata; + } + + public void disposed(SingleComponentManager component) + { + } + + }; + return container; + } + + private ComponentMetadata newMetadata() { ComponentMetadata metadata = new ComponentMetadata( XmlHandler.DS_VERSION_1_1 ); metadata.setName("foo"); @@ -295,8 +321,8 @@ public class ActivateMethodTest extends */ private void ensureMethodNotFoundMethod( BaseObject obj, String methodName ) { - ComponentMetadata metadata = newMetadata(); - SingleComponentManager icm = new SingleComponentManager( null, null, metadata, new ComponentMethods() ); + ComponentContainer container = newContainer(); + SingleComponentManager icm = new SingleComponentManager( container, new ComponentMethods() ); ActivateMethod am = new ActivateMethod( methodName, methodName != null, obj.getClass(), true, false ); am.invoke( obj, new ActivateMethod.ActivatorParameter( m_ctx, -1 ), null, icm ); assertNull( get( am, "m_method" ) ); 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=1602643&r1=1602642&r2=1602643&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 Sun Jun 15 01:10:07 2014 @@ -21,6 +21,8 @@ package org.apache.felix.scr.impl.helper import junit.framework.TestCase; +import org.apache.felix.scr.impl.BundleComponentActivator; +import org.apache.felix.scr.impl.config.ComponentContainer; import org.apache.felix.scr.impl.manager.SingleComponentManager; import org.apache.felix.scr.impl.manager.RefPair; import org.apache.felix.scr.impl.manager.components.FakeService; @@ -428,8 +430,8 @@ public class BindMethodTest extends Test private void testMethod( final String methodName, final T1 component, final boolean isDS11, final String expectCallPerformed ) { - ComponentMetadata metadata = newMetadata(); - SingleComponentManager icm = new SingleComponentManager( null, null, metadata, new ComponentMethods() ); + ComponentContainer container = newContainer(); + SingleComponentManager icm = new SingleComponentManager( container, new ComponentMethods() ); BindMethod bm = new BindMethod( methodName, component.getClass(), FakeService.class.getName(), isDS11, false ); RefPair refPair = new RefPair( m_serviceReference ); @@ -438,6 +440,29 @@ public class BindMethodTest extends Test assertEquals( expectCallPerformed, component.callPerformed ); } + private ComponentContainer newContainer() + { + final ComponentMetadata metadata = newMetadata(); + ComponentContainer container = new ComponentContainer() { + + public BundleComponentActivator getActivator() + { + return null; + } + + public ComponentMetadata getComponentMetadata() + { + return metadata; + } + + public void disposed(SingleComponentManager component) + { + } + + }; + return container; + } + private ComponentMetadata newMetadata() { ComponentMetadata metadata = new ComponentMetadata( XmlHandler.DS_VERSION_1_1 ); metadata.setName("foo");