Return-Path: Delivered-To: apmail-ws-tuscany-commits-archive@locus.apache.org Received: (qmail 92970 invoked from network); 3 Apr 2007 17:41:06 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 3 Apr 2007 17:41:05 -0000 Received: (qmail 89249 invoked by uid 500); 3 Apr 2007 17:41:11 -0000 Delivered-To: apmail-ws-tuscany-commits-archive@ws.apache.org Received: (qmail 89196 invoked by uid 500); 3 Apr 2007 17:41:11 -0000 Mailing-List: contact tuscany-commits-help@ws.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: tuscany-dev@ws.apache.org Delivered-To: mailing list tuscany-commits@ws.apache.org Received: (qmail 89153 invoked by uid 99); 3 Apr 2007 17:41:11 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 10:41:11 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 10:41:02 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 637AE1A9838; Tue, 3 Apr 2007 10:40:42 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r525216 - in /incubator/tuscany/java/sca/modules: ./ core/ core/src/main/java/org/apache/tuscany/core/ core/src/main/java/org/apache/tuscany/core/bootstrap/ core/src/main/java/org/apache/tuscany/core/component/ core/src/main/java/org/apache... Date: Tue, 03 Apr 2007 17:40:41 -0000 To: tuscany-commits@ws.apache.org From: rfeng@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070403174042.637AE1A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rfeng Date: Tue Apr 3 10:40:40 2007 New Revision: 525216 URL: http://svn.apache.org/viewvc?view=rev&rev=525216 Log: Add the minicore that can bootstrap Tuscany system without dependency on SCDL and Java component type Added: incubator/tuscany/java/sca/modules/ incubator/tuscany/java/sca/modules/core/ - copied from r521957, incubator/tuscany/sandbox/rfeng/minicore/ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/ - copied from r524305, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java - copied, changed from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java - copied, changed from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java - copied, changed from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistry.java (with props) incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImpl.java (with props) incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/CallableReferenceImpl.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/component/CallableReferenceImpl.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/CallbackReferenceImpl.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/component/CallbackReferenceImpl.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/ComponentContextImpl.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/component/ComponentContextImpl.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/ServiceReferenceImpl.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/component/ServiceReferenceImpl.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeLoader.java - copied unchanged from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeLoader.java incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/loader/ - copied from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/loader/ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java - copied, changed from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImplTestCase.java (with props) incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/scope/BasicConversationalScopeTestCase.java - copied unchanged from r521966, incubator/tuscany/sandbox/rfeng/minicore/src/test/java/org/apache/tuscany/core/component/scope/BasicConversationalScopeTestCase.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/scope/BasicHttpSessionScopeTestCase.java - copied unchanged from r521966, incubator/tuscany/sandbox/rfeng/minicore/src/test/java/org/apache/tuscany/core/component/scope/BasicHttpSessionScopeTestCase.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerDestroyOnExpirationTestCase.java - copied unchanged from r521966, incubator/tuscany/sandbox/rfeng/minicore/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerDestroyOnExpirationTestCase.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java - copied unchanged from r521966, incubator/tuscany/sandbox/rfeng/minicore/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxAgeTestCase.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java - copied unchanged from r521966, incubator/tuscany/sandbox/rfeng/minicore/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerMaxIdleTimeTestCase.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java - copied unchanged from r521966, incubator/tuscany/sandbox/rfeng/minicore/src/test/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerPersistenceTestCase.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/scope/WorkContextTestCase.java - copied unchanged from r521966, incubator/tuscany/sandbox/rfeng/minicore/src/test/java/org/apache/tuscany/core/component/scope/WorkContextTestCase.java Removed: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/model/ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingInterceptorGenerator.java incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/builder/physical/ incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/component/WorkContextImplTestCase.java Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java Copied: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java (from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java) URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java?view=diff&rev=525216&p1=incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java&r1=524852&p2=incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java&r2=525216 ============================================================================== --- incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java (original) +++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java Tue Apr 3 10:40:40 2007 @@ -71,5 +71,6 @@ AutowireResolver getAutowireResolver(); ComponentManager getComponentManager(); + ExtensionRegistry getExtensionRegistry(); } Copied: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java) URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?view=diff&rev=525216&p1=incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java&r1=524852&p2=incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java&r2=525216 ============================================================================== --- incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original) +++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Tue Apr 3 10:40:40 2007 @@ -24,6 +24,8 @@ import org.apache.tuscany.core.binding.local.LocalBindingDefinition; import org.apache.tuscany.core.binding.local.LocalBindingLoader; import org.apache.tuscany.core.builder.BuilderRegistryImpl; +import org.apache.tuscany.core.builder.ConnectorImpl; +import org.apache.tuscany.core.component.ComponentManagerImpl; import org.apache.tuscany.core.component.scope.AbstractScopeContainer; import org.apache.tuscany.core.component.scope.CompositeScopeContainer; import org.apache.tuscany.core.component.scope.RequestScopeContainer; @@ -41,8 +43,10 @@ import org.apache.tuscany.core.loader.ReferenceLoader; import org.apache.tuscany.core.loader.ServiceLoader; import org.apache.tuscany.core.resolver.AutowireResolver; +import org.apache.tuscany.core.resolver.DefaultAutowireResolver; import org.apache.tuscany.host.MonitorFactory; import org.apache.tuscany.spi.builder.Builder; +import org.apache.tuscany.spi.builder.BuilderRegistry; import org.apache.tuscany.spi.builder.Connector; import org.apache.tuscany.spi.component.ComponentManager; import org.apache.tuscany.spi.component.ScopeContainerMonitor; @@ -68,6 +72,7 @@ private final AutowireResolver resolver; private final Connector connector; private final ScopeRegistry scopeRegistry; + private final ExtensionRegistry extensionRegistry; /** * Create a default bootstrapper. @@ -91,7 +96,18 @@ this.resolver = resolver; this.connector = connector; this.scopeRegistry = createScopeRegistry(); + this.extensionRegistry = new ExtensionRegistryImpl(); } + + public DefaultBootstrapper(MonitorFactory monitorFactory) { + this.monitorFactory = monitorFactory; + this.xmlFactory = XMLInputFactory.newInstance("javax.xml.stream.XMLInputFactory", getClass().getClassLoader()); + this.resolver = new DefaultAutowireResolver(); + this.componentManager = new ComponentManagerImpl(null, this.resolver); + this.connector = new ConnectorImpl(componentManager); + this.scopeRegistry = createScopeRegistry(); + this.extensionRegistry = new ExtensionRegistryImpl(); + } /** * Returns the MonitorFactory being used by this bootstrapper. @@ -110,11 +126,15 @@ */ public Deployer createDeployer() { ScopeRegistry scopeRegistry = getScopeRegistry(); - Builder builder = createBuilder(scopeRegistry); - Loader loader = createLoader(null, null); + BuilderRegistry builder = createBuilder(scopeRegistry); + LoaderRegistry loader = createLoader(null, null); DeployerImpl deployer = new DeployerImpl(xmlFactory, loader, builder, componentManager, resolver, connector); deployer.setMonitor(getMonitorFactory().getMonitor(ScopeContainerMonitor.class)); deployer.setScopeRegistry(getScopeRegistry()); + extensionRegistry.addExtension(ScopeRegistry.class, scopeRegistry); + extensionRegistry.addExtension(BuilderRegistry.class, builder); + extensionRegistry.addExtension(LoaderRegistry.class, loader); + extensionRegistry.addExtension(Deployer.class, deployer); return deployer; } @@ -195,7 +215,7 @@ * will be supported * @return a new Builder */ - private Builder createBuilder(ScopeRegistry scopeRegistry) { + private BuilderRegistry createBuilder(ScopeRegistry scopeRegistry) { BuilderRegistryImpl builderRegistry = new BuilderRegistryImpl(scopeRegistry); CompositeBuilder compositeBuilder = new CompositeBuilder(); compositeBuilder.setBuilderRegistry(builderRegistry); @@ -219,6 +239,13 @@ */ public ScopeRegistry getScopeRegistry() { return scopeRegistry; + } + + /** + * @return the extensionRegistry + */ + public ExtensionRegistry getExtensionRegistry() { + return extensionRegistry; } } Copied: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java (from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java) URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java?view=diff&rev=525216&p1=incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java&r1=524852&p2=incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java&r2=525216 ============================================================================== --- incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java (original) +++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionActivator.java Tue Apr 3 10:40:40 2007 @@ -19,13 +19,17 @@ package org.apache.tuscany.core.bootstrap; -import org.apache.tuscany.spi.builder.BuilderRegistry; -import org.apache.tuscany.spi.loader.LoaderRegistry; /** * @version $Rev$ $Date$ */ public interface ExtensionActivator { - void start(LoaderRegistry loaderRegistry, BuilderRegistry builderRegistry); - void stop(); + /** + * @param registry + */ + void start(ExtensionRegistry registry); + /** + * @param registry + */ + void stop(ExtensionRegistry registry); } Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistry.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistry.java?view=auto&rev=525216 ============================================================================== --- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistry.java (added) +++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistry.java Tue Apr 3 10:40:40 2007 @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.core.bootstrap; + +import java.util.List; + +/** + * @version $Rev$ $Date$ + */ +public interface ExtensionRegistry { + /** + * @param + * @param extensionPoint + * @param extension + */ + void addExtension(Class extensionPoint, T extension); + /** + * @param + * @param extensionPoint + * @return + */ + List getExtensions(Class extensionPoint); + /** + * @param + * @param extensionPoint + * @return + */ + T getExtension(Class extensionPoint); + /** + * @param + * @param extensionPoint + * @param extension + */ + void removeExtension(Class extensionPoint, T extension); + /** + * @param extensionPoint + */ + void removeExtensionPoint(Class extensionPoint); +} Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistry.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImpl.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImpl.java?view=auto&rev=525216 ============================================================================== --- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImpl.java (added) +++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImpl.java Tue Apr 3 10:40:40 2007 @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.core.bootstrap; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * A registry to hold all the extension points and extensions + * + * @version $Rev$ $Date$ + */ +public class ExtensionRegistryImpl implements ExtensionRegistry { + private Map> extensions = new HashMap>(); + + public void addExtension(Class extensionPoint, T extension) { + List list = extensions.get(extensionPoint); + if (list == null) { + list = new ArrayList(); + extensions.put(extensionPoint, list); + } + if (!list.contains(extension)) { + list.add(extension); + } + } + + public T getExtension(Class extensionPoint) { + List list = extensions.get(extensionPoint); + if (list == null || list.isEmpty()) { + return null; + } else { + return extensionPoint.cast(list.get(0)); + } + } + + @SuppressWarnings("unchecked") + public List getExtensions(Class extensionPoint) { + return (List)extensions.get(extensionPoint); + } + + public void removeExtension(Class extensionPoint, T extension) { + List list = getExtensions(extensionPoint); + if (list != null) { + list.remove(extension); + } + } + + public void removeExtensionPoint(Class extensionPoint) { + extensions.remove(extensionPoint); + } + +} Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImpl.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java?view=diff&rev=525216&r1=524305&r2=525216 ============================================================================== --- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java (original) +++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/component/scope/AbstractScopeContainer.java Tue Apr 3 10:40:40 2007 @@ -59,127 +59,42 @@ } }; - private final Scope scope; - protected final ScopeContainerMonitor monitor; - protected final Map, URI> componentGroups = new ConcurrentHashMap, URI>(); - protected final Map contextGroups = new ConcurrentHashMap(); + // the queue of instanceWrappers to destroy, in the order that their instances were created + protected final Map>> destroyQueues = + new ConcurrentHashMap>>(); + // the queue of components to eagerly initialize in each group protected final Map>> initQueues = new HashMap>>(); - // the queue of instanceWrappers to destroy, in the order that their instances were created - protected final Map>> destroyQueues = - new ConcurrentHashMap>>(); + protected final ScopeContainerMonitor monitor; + + private final Scope scope; public AbstractScopeContainer(Scope scope, ScopeContainerMonitor monitor) { this.scope = scope; this.monitor = monitor; } - public Scope getScope() { - return scope; - } - - @Reference - public void setScopeRegistry(ScopeRegistry scopeRegistry) { - scopeRegistry.register(this); - } - - @Init - public synchronized void start() { - int lifecycleState = getLifecycleState(); - if (lifecycleState != UNINITIALIZED && lifecycleState != STOPPED) { - throw new IllegalStateException("Scope must be in UNINITIALIZED or STOPPED state [" + lifecycleState + "]"); - } - setLifecycleState(RUNNING); - } - - @Destroy - public synchronized void stop() { - int lifecycleState = getLifecycleState(); - if (lifecycleState != RUNNING) { - throw new IllegalStateException("Scope in wrong state [" + lifecycleState + "]"); - } - setLifecycleState(STOPPED); - componentGroups.clear(); - contextGroups.clear(); - synchronized (initQueues) { - initQueues.clear(); - } - destroyQueues.clear(); - } - protected void checkInit() { if (getLifecycleState() != RUNNING) { throw new IllegalStateException("Scope container not running [" + getLifecycleState() + "]"); } } - public void onEvent(Event event) { - } - - public void register(AtomicComponent component, URI groupId) { - checkInit(); - if (component.isEagerInit()) { - componentGroups.put(component, groupId); - synchronized (initQueues) { - List> initQueue = initQueues.get(groupId); - if (initQueue == null) { - initQueue = new ArrayList>(); - initQueues.put(groupId, initQueue); - } - // FIXME it would be more efficient to binary search and then insert - initQueue.add(component); - Collections.sort(initQueue, COMPARATOR); - } - } - } - - public void unregister(AtomicComponent component) { - if (component.isEagerInit()) { - URI groupId = componentGroups.remove(component); - synchronized (initQueues) { - List> initQueue = initQueues.get(groupId); - initQueue.remove(component); - if (initQueue.isEmpty()) { - initQueues.remove(groupId); - } - } - } - } - - public void startContext(KEY contextId, URI groupId) throws GroupInitializationException { - assert !contextGroups.containsKey(contextId); - contextGroups.put(contextId, groupId); - destroyQueues.put(contextId, new ArrayList>()); - - // get and clone initialization queue - List> initQueue; - synchronized (initQueues) { - initQueue = initQueues.get(groupId); - if (initQueue != null) { - initQueue = new ArrayList>(initQueue); - } - } - if (initQueue != null) { - initializeComponents(contextId, initQueue); - } - } - - public void stopContext(KEY contextId) { - assert contextGroups.containsKey(contextId); - shutdownComponents(destroyQueues.get(contextId)); - contextGroups.remove(contextId); - destroyQueues.remove(contextId); - } - - public InstanceWrapper getWrapper(AtomicComponent component, KEY contextId) - throws TargetResolutionException { - return null; + /** + * Creates a new physical instance of a component, wrapped in an InstanceWrapper. + * + * @param component the component whose instance should be created + * @return a wrapped instance that has been injected but not yet started + * @throws TargetResolutionException if there was a problem creating the instance + */ + protected InstanceWrapper createInstance(AtomicComponent component) throws TargetResolutionException { + return component.createInstanceWrapper(); } public InstanceWrapper getAssociatedWrapper(AtomicComponent component, KEY contextId) @@ -187,12 +102,13 @@ return null; } - public void returnWrapper(AtomicComponent component, InstanceWrapper wrapper, KEY contextId) - throws TargetDestructionException { + public Scope getScope() { + return scope; } - public void remove(AtomicComponent component) throws PersistenceException { - throw new UnsupportedOperationException("Scope does not support persistence"); + public InstanceWrapper getWrapper(AtomicComponent component, KEY contextId) + throws TargetResolutionException { + return null; } /** @@ -223,6 +139,39 @@ } } + public void onEvent(Event event) { + } + + public void register(AtomicComponent component, URI groupId) { + checkInit(); + if (component.isEagerInit()) { + componentGroups.put(component, groupId); + synchronized (initQueues) { + List> initQueue = initQueues.get(groupId); + if (initQueue == null) { + initQueue = new ArrayList>(); + initQueues.put(groupId, initQueue); + } + // FIXME it would be more efficient to binary search and then insert + initQueue.add(component); + Collections.sort(initQueue, COMPARATOR); + } + } + } + + public void remove(AtomicComponent component) throws PersistenceException { + throw new UnsupportedOperationException("Scope does not support persistence"); + } + + public void returnWrapper(AtomicComponent component, InstanceWrapper wrapper, KEY contextId) + throws TargetDestructionException { + } + + @Reference + public void setScopeRegistry(ScopeRegistry scopeRegistry) { + scopeRegistry.register(this); + } + /** * Shut down an ordered list of instances. * The list passed to this method is treated as a live, mutable list @@ -248,18 +197,69 @@ } } + @Init + public synchronized void start() { + int lifecycleState = getLifecycleState(); + if (lifecycleState != UNINITIALIZED && lifecycleState != STOPPED) { + throw new IllegalStateException("Scope must be in UNINITIALIZED or STOPPED state [" + lifecycleState + "]"); + } + setLifecycleState(RUNNING); + } + + public void startContext(KEY contextId, URI groupId) throws GroupInitializationException { + assert !contextGroups.containsKey(contextId); + contextGroups.put(contextId, groupId); + destroyQueues.put(contextId, new ArrayList>()); + + // get and clone initialization queue + List> initQueue; + synchronized (initQueues) { + initQueue = initQueues.get(groupId); + if (initQueue != null) { + initQueue = new ArrayList>(initQueue); + } + } + if (initQueue != null) { + initializeComponents(contextId, initQueue); + } + } + + @Destroy + public synchronized void stop() { + int lifecycleState = getLifecycleState(); + if (lifecycleState != RUNNING) { + throw new IllegalStateException("Scope in wrong state [" + lifecycleState + "]"); + } + setLifecycleState(STOPPED); + componentGroups.clear(); + contextGroups.clear(); + synchronized (initQueues) { + initQueues.clear(); + } + destroyQueues.clear(); + } + + public void stopContext(KEY contextId) { + assert contextGroups.containsKey(contextId); + shutdownComponents(destroyQueues.get(contextId)); + contextGroups.remove(contextId); + destroyQueues.remove(contextId); + } + public String toString() { return "In state [" + super.toString() + ']'; } - /** - * Creates a new physical instance of a component, wrapped in an InstanceWrapper. - * - * @param component the component whose instance should be created - * @return a wrapped instance that has been injected but not yet started - * @throws TargetResolutionException if there was a problem creating the instance - */ - protected InstanceWrapper createInstance(AtomicComponent component) throws TargetResolutionException { - return component.createInstanceWrapper(); + public void unregister(AtomicComponent component) { + if (component.isEagerInit()) { + URI groupId = componentGroups.remove(component); + synchronized (initQueues) { + List> initQueue = initQueues.get(groupId); + initQueue.remove(component); + if (initQueue.isEmpty()) { + initQueues.remove(groupId); + } + } + } } } Copied: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java (from r524852, incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java) URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java?view=diff&rev=525216&p1=incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java&r1=524852&p2=incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java&r2=525216 ============================================================================== --- incubator/tuscany/sandbox/rfeng/minicore/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java (original) +++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java Tue Apr 3 10:40:40 2007 @@ -40,6 +40,7 @@ import org.apache.tuscany.core.bootstrap.Bootstrapper; import org.apache.tuscany.core.bootstrap.DefaultBootstrapper; import org.apache.tuscany.core.bootstrap.ExtensionActivator; +import org.apache.tuscany.core.bootstrap.ExtensionRegistry; import org.apache.tuscany.core.builder.ConnectorImpl; import org.apache.tuscany.core.component.ComponentManagerImpl; import org.apache.tuscany.core.component.SimpleWorkContext; @@ -119,6 +120,7 @@ * The ComponentManager that manages all components in this runtime. */ protected ComponentManager componentManager; + protected ExtensionRegistry extensionRegistry; /** * Registry for ClassLoaders used by this runtime. @@ -205,16 +207,17 @@ // URI name = TUSCANY_SYSTEM_ROOT.resolve("main"); Bootstrapper bootstrapper = createBootstrapper(); Deployer deployer = bootstrapper.createDeployer(); + this.extensionRegistry = bootstrapper.getExtensionRegistry(); + registerSystemComponent(TUSCANY_DEPLOYER, Deployer.class, deployer); registerSystemComponent(WORK_CONTEXT_URI, WorkContext.class, new SimpleWorkContext()); this.scopeRegistry = bootstrapper.getScopeRegistry(); - - LoaderRegistry loaderRegistry = (LoaderRegistry)((DeployerImpl)deployer).getLoader(); - BuilderRegistry builderRegistry = (BuilderRegistry)((DeployerImpl)deployer).getBuilder(); + activators = getInstances(getHostClassLoader(), ExtensionActivator.class); + ExtensionRegistry registry = bootstrapper.getExtensionRegistry(); for (ExtensionActivator activator : activators) { - activator.start(loaderRegistry, builderRegistry); + activator.start(registry); } registerBaselineSystemComponents(); @@ -275,6 +278,7 @@ try { JavaServiceContract contract = new JavaServiceContract(type); componentManager.registerJavaObject(uri, contract, component); + extensionRegistry.addExtension(type, component); } catch (RegistrationException e) { throw new InitializationException(e); } @@ -333,16 +337,17 @@ Enumeration urls = classLoader.getResources("META-INF/services/" + name); while (urls.hasMoreElements()) { URL url = urls.nextElement(); - String service = getServiceName(url); + Set service = getServiceNames(url); if (service != null) { - set.add(service); + set.addAll(service); } } return set; } - private static String getServiceName(URL url) throws IOException { + private static Set getServiceNames(URL url) throws IOException { + Set names = new HashSet(); InputStream is = IOHelper.getInputStream(url); BufferedReader reader = null; try { @@ -351,8 +356,10 @@ String line = reader.readLine(); if (line == null) { break; - } else if (!line.startsWith("#")) { - return line.trim(); + } + line = line.trim(); + if (!line.startsWith("#") && !"".equals(line)) { + names.add(line.trim()); } } } finally { @@ -360,7 +367,7 @@ reader.close(); } } - return null; + return names; } private static Collection getInstances(final ClassLoader classLoader, Class serviceClass) { Added: incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImplTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImplTestCase.java?view=auto&rev=525216 ============================================================================== --- incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImplTestCase.java (added) +++ incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImplTestCase.java Tue Apr 3 10:40:40 2007 @@ -0,0 +1,40 @@ +package org.apache.tuscany.core.bootstrap; + +import junit.framework.TestCase; + +public class ExtensionRegistryImplTestCase extends TestCase { + private ExtensionRegistry registry; + + protected void setUp() throws Exception { + super.setUp(); + registry = new ExtensionRegistryImpl(); + } + + public void testRegistry() { + MyService service = new MyServiceImpl(); + registry.addExtension(MyService.class, service); + assertSame(service, registry.getExtension(MyService.class)); + assertEquals(1, registry.getExtensions(MyService.class).size()); + MyService service2 = new MyServiceImpl(); + registry.addExtension(MyService.class, service2); + assertSame(service, registry.getExtension(MyService.class)); + assertEquals(2, registry.getExtensions(MyService.class).size()); + registry.removeExtension(MyService.class, service); + assertSame(service2, registry.getExtension(MyService.class)); + assertEquals(1, registry.getExtensions(MyService.class).size()); + registry.removeExtensionPoint(MyService.class); + assertNull(registry.getExtension(MyService.class)); + } + + private static interface MyService { + void doSomething(); + } + + private static class MyServiceImpl implements MyService { + + public void doSomething() { + } + + } + +} Propchange: incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImplTestCase.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/tuscany/java/sca/modules/core/src/test/java/org/apache/tuscany/core/bootstrap/ExtensionRegistryImplTestCase.java ------------------------------------------------------------------------------ svn:keywords = Rev Date --------------------------------------------------------------------- To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org For additional commands, e-mail: tuscany-commits-help@ws.apache.org