package org.codehaus.plexus.container.initialization; /* * Copyright 2001-2006 Codehaus Foundation. * * Licensed 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. */ import org.codehaus.plexus.ComponentRegistry; import org.codehaus.plexus.DefaultComponentRegistry; import org.codehaus.plexus.component.manager.PerLookupComponentManagerFactory; import org.codehaus.plexus.component.manager.SingletonComponentManagerFactory; import org.codehaus.plexus.component.repository.ComponentDescriptor; import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException; import org.codehaus.plexus.component.repository.io.PlexusTools; import org.codehaus.plexus.configuration.PlexusConfiguration; import org.codehaus.plexus.configuration.PlexusConfigurationException; import org.codehaus.plexus.lifecycle.LifecycleHandlerManager; /** * @author Jason van Zyl */ public class InitializeComponentRegistryPhase implements ContainerInitializationPhase { public void execute( ContainerInitializationContext context ) throws ContainerInitializationException { LifecycleHandlerManager lifecycleHandlerManager = getLifecycleHandlerManager( context ); ComponentRegistry componentRegistry = new DefaultComponentRegistry( context.getContainer(), lifecycleHandlerManager ); componentRegistry.registerComponentManagerFactory( new PerLookupComponentManagerFactory() ); componentRegistry.registerComponentManagerFactory( new SingletonComponentManagerFactory() ); initializeComponentRegistry( componentRegistry, context ); context.getContainer().setComponentRegistry( componentRegistry ); } private void initializeComponentRegistry( ComponentRegistry componentRegistry, ContainerInitializationContext context ) throws ContainerInitializationException { // Add the components defined in the container xml configuration try { PlexusConfiguration configuration = context.getContainerXmlConfiguration(); PlexusConfiguration[] componentConfigurations = configuration.getChild( "components" ).getChildren( "component" ); for ( PlexusConfiguration componentConfiguration : componentConfigurations ) { ComponentDescriptor<?> componentDescriptor = PlexusTools.buildComponentDescriptor( componentConfiguration, context.getContainer().getContainerRealm() ); if ( componentDescriptor != null ) { componentRegistry.addComponentDescriptor( componentDescriptor ); } } } catch ( PlexusConfigurationException e ) { throw new ContainerInitializationException( "Error initializing component repository: " + "Cannot unmarshall component descriptor: ", e ); } catch ( ComponentRepositoryException e ) { throw new ContainerInitializationException( "Error initializing component repository: ", e ); } } private LifecycleHandlerManager getLifecycleHandlerManager( ContainerInitializationContext context ) { LifecycleHandlerManager lifecycleHandlerManager = context.getContainerConfiguration().getLifecycleHandlerManager(); lifecycleHandlerManager.initialize(); return lifecycleHandlerManager; } }