Author: sgoeschl Date: Tue Nov 1 04:44:34 2005 New Revision: 330049 URL: http://svn.apache.org/viewcvs?rev=330049&view=rev Log: Implementing transparent service lookup independent where the service is actually located (Turbine or Avalon container)
Added: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/TurbineServiceProvider.java Removed: jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/crypto/CryptoRunningInECMTest.java Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/BaseServiceBroker.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/InstantiationException.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/ServiceBroker.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineYaafiComponentService.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/Localization.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/LocalizationTool.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/security/BaseSecurityService.java jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/LoadingComponentsTest.java jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/intake/IntakeToolTest.java jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/BaseServiceBroker.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/BaseServiceBroker.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/BaseServiceBroker.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/BaseServiceBroker.java Tue Nov 1 04:44:34 2005 @@ -1,6 +1,5 @@ package org.apache.turbine.services; - /* * Copyright 2001-2004 The Apache Software Foundation. * @@ -19,6 +18,7 @@ import java.util.ArrayList; +import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; @@ -38,6 +38,9 @@ * <li>Providing <code>Services</code> with a configuration based on * system wide configuration mechanism.</li> * </ul> + * <li>Integration of TurbineServiceProviders for looking up + * non-local services + * </ul> * * @author <a href="mailto:[EMAIL PROTECTED]">Kevin Burton</a> * @author <a href="mailto:[EMAIL PROTECTED]">Rafal Krzewski</a> @@ -52,19 +55,19 @@ /** * Mapping of Service names to class names. */ - protected Configuration mapping = new BaseConfiguration(); + private Configuration mapping = new BaseConfiguration(); /** * A repository of Service instances. */ - protected Hashtable services = new Hashtable(); + private Hashtable services = new Hashtable(); /** * Configuration for the services broker. * The configuration should be set by the application * in which the services framework is running. */ - protected Configuration configuration; + private Configuration configuration; /** * A prefix for <code>Service</code> properties in @@ -89,7 +92,7 @@ * the requirement of having init(Object) all * together. */ - protected Hashtable serviceObjects = new Hashtable(); + private Hashtable serviceObjects = new Hashtable(); /** Logging */ private static Log log = LogFactory.getLog(BaseServiceBroker.class); @@ -98,15 +101,21 @@ * Application root path as set by the * parent application. */ - protected String applicationRoot; + private String applicationRoot; /** + * mapping from service names to instances of TurbineServiceProviders + */ + private Hashtable serviceProviderInstanceMap = new Hashtable(); + + /** * Default constructor, protected as to only be useable by subclasses. * * This constructor does nothing. */ protected BaseServiceBroker() { + // nothing to do } /** @@ -170,6 +179,7 @@ /** * Get an application specific service object. * + * @param name the name of the service object * @return Object application specific service object */ public Object getServiceObject(String name) @@ -383,12 +393,13 @@ if (service != null && service.getInit()) { service.shutdown(); + if (service.getInit() && service instanceof BaseService) { // BaseService::shutdown() does this by default, // but could've been overriden poorly. ((BaseService) service).setInit(false); - } + } } } catch (InstantiationException e) @@ -440,39 +451,53 @@ * @exception InstantiationException if the service is unknown or * can't be initialized. */ - public Service getService(String name) throws InstantiationException + public Object getService(String name) throws InstantiationException { Service service; - try + + if (this.isLocalService(name)) { - service = getServiceInstance(name); - if (!service.getInit()) - { - synchronized (service.getClass()) - { - if (!service.getInit()) - { - log.info("Start Initializing service (late): " + name); - service.init(); - log.info("Finish Initializing service (late): " + name); - } - } - } - if (!service.getInit()) - { - // this exception will be caught & rethrown by this very method. - // getInit() returning false indicates some initialization issue, - // which in turn prevents the InitableBroker from passing a - // reference to a working instance of the initable to the client. - throw new InitializationException( - "init() failed to initialize service " + name); - } - return service; + try + { + service = getServiceInstance(name); + if (!service.getInit()) + { + synchronized (service.getClass()) + { + if (!service.getInit()) + { + log.info("Start Initializing service (late): " + name); + service.init(); + log.info("Finish Initializing service (late): " + name); + } + } + } + if (!service.getInit()) + { + // this exception will be caught & rethrown by this very method. + // getInit() returning false indicates some initialization issue, + // which in turn prevents the InitableBroker from passing a + // reference to a working instance of the initable to the client. + throw new InitializationException( + "init() failed to initialize service " + name); + } + return service; + } + catch (InitializationException e) + { + throw new InstantiationException("Service " + name + + " failed to initialize", e); + } + } + else if (this.isNonLocalService(name)) + { + return this.getNonLocalService(name); } - catch (InitializationException e) + else { - throw new InstantiationException("Service " + name + - " failed to initialize", e); + throw new InstantiationException( + "ServiceBroker: unknown service " + name + + " requested"); } } @@ -502,7 +527,7 @@ { String className=null; - if (!mapping.containsKey(name)) + if (!this.isLocalService(name)) { throw new InstantiationException( "ServiceBroker: unknown service " + name @@ -517,8 +542,15 @@ { try { - service = (Service) - Class.forName(className).newInstance(); + service = (Service) Class.forName(className).newInstance(); + + // check if the newly created service is also a + // service provider - if so then remember it + if (service instanceof TurbineServiceProvider) + { + this.serviceProviderInstanceMap.put(name,service); + } + } // those two errors must be passed to the VM catch (ThreadDeath t) @@ -608,4 +640,75 @@ { return applicationRoot; } + + /** + * Determines if the requested service is managed by this + * ServiceBroker. + * + * @param name The name of the Service requested. + * @return true if the service is managed by the this ServiceBroker + */ + protected boolean isLocalService(String name) + { + return this.mapping.containsKey(name); + } + + /** + * Determines if the requested service is managed by an initialized + * TurbineServiceProvider. We use the service names to lookup + * the TurbineServiceProvider to ensure that we get a fully + * inititialized service. + * + * @param name The name of the Service requested. + * @return true if the service is managed by a TurbineServiceProvider + */ + protected boolean isNonLocalService(String name) + { + String serviceName = null; + TurbineServiceProvider turbineServiceProvider = null; + Enumeration list = this.serviceProviderInstanceMap.keys(); + + while (list.hasMoreElements()) + { + serviceName = (String) list.nextElement(); + turbineServiceProvider = (TurbineServiceProvider) this.getService(serviceName); + + if (turbineServiceProvider.exists(name)) + { + return true; + } + } + + return false; + } + + /** + * Get a non-local service managed by a TurbineServiceProvider. + * + * @param name The name of the Service requested. + * @return the requested service + * @throws InstantiationException the service couldn't be instantiated + */ + protected Object getNonLocalService(String name) + throws InstantiationException + { + String serviceName = null; + TurbineServiceProvider turbineServiceProvider = null; + Enumeration list = this.serviceProviderInstanceMap.keys(); + + while (list.hasMoreElements()) + { + serviceName = (String) list.nextElement(); + turbineServiceProvider = (TurbineServiceProvider) this.getService(serviceName); + + if (turbineServiceProvider.exists(name)) + { + return turbineServiceProvider.get(name); + } + } + + throw new InstantiationException( + "ServiceBroker: unknown non-local service " + name + + " requested"); + } } Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/InstantiationException.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/InstantiationException.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/InstantiationException.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/InstantiationException.java Tue Nov 1 04:44:34 2005 @@ -50,8 +50,7 @@ * and nested Throwable. * * @param msg The detail message. - * @param nested the exception or error that caused this exception - * to be thrown. + * @param t the root exception. */ public InstantiationException(String msg, Throwable t) { Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/ServiceBroker.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/ServiceBroker.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/ServiceBroker.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/ServiceBroker.java Tue Nov 1 04:44:34 2005 @@ -89,7 +89,7 @@ * @exception InstantiationException if the service is unknown or * can't be initialized. */ - Service getService(String name) throws InstantiationException; + Object getService(String name) throws InstantiationException; /** * Returns the configuration of a specific service. Services Added: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/TurbineServiceProvider.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/TurbineServiceProvider.java?rev=330049&view=auto ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/TurbineServiceProvider.java (added) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/TurbineServiceProvider.java Tue Nov 1 04:44:34 2005 @@ -0,0 +1,53 @@ +package org.apache.turbine.services; + +/* + * Copyright 2001-2004 The Apache Software 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. + */ + +/** + * Interface for telling Turbine that the implementation class + * is an external service provider therefore can be used for looking + * up services not found by the Turbine implementation. It is + * assumed that the referenced service container handles the + * complete lifecycle of its services. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Siegfried Goeschl</a> + */ +public interface TurbineServiceProvider +{ + /** + * Returns an instance of the requested service. If the + * given servise is not available/found we throw a RuntimeException + * since this is less intrusive. + * + * @param roleName the name of the requested service + * @return an instance of the service + * @throws InstantiationException the service could not be instantiated + */ + public Object get(String roleName) throws InstantiationException; + + /** + * Releases the instance you got before. This is only really + * required when not working with service singletons. + * + * @param component the component to release + */ + public void release(Object component); + + /** + * Is the service known to the service container? + */ + public boolean exists(String roleName); +} Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java Tue Nov 1 04:44:34 2005 @@ -18,6 +18,7 @@ import org.apache.avalon.framework.service.ServiceManager; import org.apache.turbine.services.Service; +import org.apache.turbine.services.TurbineServiceProvider; /** * This service allows access to avalon components. @@ -27,7 +28,7 @@ * @version $Id$ */ public interface AvalonComponentService - extends Service, ServiceManager + extends Service, ServiceManager, TurbineServiceProvider { /** The publically visible name of the service */ String SERVICE_NAME = "AvalonComponentService"; Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java Tue Nov 1 04:44:34 2005 @@ -39,6 +39,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.turbine.Turbine; import org.apache.turbine.services.InitializationException; +import org.apache.turbine.services.InstantiationException; import org.apache.turbine.services.TurbineBaseService; /** @@ -248,5 +249,40 @@ public boolean hasService(String roleName) { return manager.hasComponent(roleName); + } + + // ------------------------------------------------------------- + // TurbineServiceProvider + // ------------------------------------------------------------- + + /** + * @see org.apache.turbine.services.TurbineServiceProvider#exists(java.lang.String) + */ + public boolean exists(String roleName) + { + return this.hasService(roleName); + } + + /** + * @see org.apache.turbine.services.TurbineServiceProvider#get(java.lang.String) + */ + public Object get(String roleName) throws InstantiationException + { + try + { + return this.lookup(roleName); + } + catch (ServiceException e) + { + String msg = "Unable to get the following service : " + roleName; + log.error(msg); + throw new InstantiationException(msg); + } + catch (Throwable t) + { + String msg = "Unable to get the following service : " + roleName; + log.error(msg,t); + throw new InstantiationException(msg,t); + } } } Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineYaafiComponentService.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineYaafiComponentService.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineYaafiComponentService.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/avaloncomponent/TurbineYaafiComponentService.java Tue Nov 1 04:44:34 2005 @@ -18,9 +18,6 @@ */ import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Initializable; @@ -38,6 +35,7 @@ import org.apache.fulcrum.yaafi.framework.factory.ServiceContainerFactory; import org.apache.turbine.Turbine; import org.apache.turbine.services.InitializationException; +import org.apache.turbine.services.InstantiationException; import org.apache.turbine.services.TurbineBaseService; /** @@ -131,7 +129,8 @@ // create the configuration for YAAFI - ServiceContainerConfiguration config = this.createServiceContainerConfiguration(conf); + ServiceContainerConfiguration config = + this.createServiceContainerConfiguration(conf); config.setLogger( this.createAvalonLogger() ); config.setApplicationRootDir( homePath ); @@ -149,19 +148,6 @@ String msg = "Initializing YAAFI failed"; log.error(msg,e); throw e; - } - - // lookup the services to be backward compatible - - try - { - this.lookupServices(conf); - } - catch (Exception e) - { - String msg = "Looking up the Avalon services failed"; - log.error(msg,e); - throw e; } } @@ -190,11 +176,8 @@ } /** - * Releases the component + * Releases the component. * - * @param source. The path to the handler for this component For example, if the object is a - * java.sql.Connection object sourced from the "/turbine-merlin/datasource" - * component, the call would be :- release("/turbine-merlin/datasource", conn); * @param component the component to release */ public void release(Object component) @@ -312,39 +295,38 @@ return result; } + // ------------------------------------------------------------- + // TurbineServiceProvider + // ------------------------------------------------------------- + /** - * Lookup the services defined in the Turbine config file. This - * code is taken from the ECM implementation but I'm not sure - * why it is needed at all. - * - * @throws Exception generic exception - * @todo not sure why we need the additional component lookup - */ - private void lookupServices( Configuration conf ) - throws Exception - { - List lookupComponents = conf.getList( - COMPONENT_LOOKUP_KEY, - new ArrayList() - ); - - for (Iterator it = lookupComponents.iterator(); it.hasNext();) - { - String serviceName = (String) it.next(); - - try - { - Object service = this.container.lookup(serviceName); - log.info("Lookup for service " + serviceName + " successful"); - this.container.release(service); - - } - catch (Exception e) - { - String msg = "Lookup for service " + serviceName + " failed!"; - log.error(msg); - throw e; - } - } + * @see org.apache.turbine.services.TurbineServiceProvider#exists(java.lang.String) + */ + public boolean exists(String roleName) + { + return this.hasService(roleName); + } + + /** + * @see org.apache.turbine.services.TurbineServiceProvider#get(java.lang.String) + */ + public Object get(String roleName) throws InstantiationException + { + try + { + return this.lookup(roleName); + } + catch (ServiceException e) + { + String msg = "Unable to get the following service : " + roleName; + log.error(msg); + throw new InstantiationException(msg); + } + catch (Throwable t) + { + String msg = "Unable to get the following service : " + roleName; + log.error(msg,t); + throw new InstantiationException(msg,t); + } } } Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/Localization.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/Localization.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/Localization.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/Localization.java Tue Nov 1 04:44:34 2005 @@ -24,10 +24,9 @@ import javax.servlet.http.HttpServletRequest; -import org.apache.avalon.framework.service.ServiceException; import org.apache.commons.lang.exception.NestableRuntimeException; +import org.apache.turbine.services.ServiceManager; import org.apache.turbine.services.TurbineServices; -import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.util.RunData; /** @@ -244,14 +243,12 @@ protected static final LocalizationService getService() { try { - AvalonComponentService acs = (AvalonComponentService) TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME); - return (LocalizationService)acs.lookup(LocalizationService.class.getName()); + ServiceManager serviceManager = TurbineServices.getInstance(); + return (LocalizationService)serviceManager.getService(LocalizationService.class.getName()); } - catch (ServiceException se){ - throw new NestableRuntimeException(se); + catch (Exception e){ + throw new NestableRuntimeException(e); } - - } /** @@ -272,11 +269,11 @@ public static boolean isInitialized() { try { - AvalonComponentService acs = (AvalonComponentService) TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME); - acs.lookup(LocalizationService.class.getName()); + ServiceManager serviceManager = TurbineServices.getInstance(); + serviceManager.getService(LocalizationService.class.getName()); return true; } - catch (ServiceException se){ + catch (Exception e){ return false; } } Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/LocalizationTool.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/LocalizationTool.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/LocalizationTool.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/localization/LocalizationTool.java Tue Nov 1 04:44:34 2005 @@ -23,10 +23,11 @@ import org.apache.commons.logging.LogFactory; import org.apache.fulcrum.localization.LocalizationService; import org.apache.turbine.services.InstantiationException; +import org.apache.turbine.services.ServiceManager; import org.apache.turbine.services.TurbineServices; -import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.services.pull.ApplicationTool; import org.apache.turbine.util.RunData; + /** * A pull tool which provides lookups for localized text by delegating * to the configured Fulcrum <code>LocalizationService</code>. @@ -55,14 +56,17 @@ { if (localizationService == null) { - AvalonComponentService ecm = - (AvalonComponentService) TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME); - try { - localizationService = (LocalizationService)ecm.lookup(LocalizationService.ROLE); - } - catch (Exception e) { - throw new InstantiationException("Problem looking up Localization Service:"+e.getMessage()); - } + ServiceManager serviceManager = TurbineServices.getInstance(); + try + { + localizationService = (LocalizationService)serviceManager.getService( + LocalizationService.ROLE + ); + } + catch (Exception e) + { + throw new InstantiationException("Problem looking up Localization Service:"+e.getMessage()); + } } return localizationService; } Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java Tue Nov 1 04:44:34 2005 @@ -20,7 +20,6 @@ import java.io.IOException; import java.io.PrintWriter; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -34,21 +33,18 @@ import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.apache.ecs.Document; import org.apache.ecs.Element; import org.apache.ecs.StringElement; import org.apache.fulcrum.mimetype.MimeTypeService; - import org.apache.turbine.Turbine; import org.apache.turbine.TurbineConstants; import org.apache.turbine.om.security.User; import org.apache.turbine.pipeline.DefaultPipelineData; +import org.apache.turbine.services.ServiceManager; import org.apache.turbine.services.TurbineServices; -import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.services.template.TurbineTemplate; import org.apache.turbine.util.FormMessages; import org.apache.turbine.util.ServerData; @@ -320,10 +316,10 @@ if (!locale.equals(Locale.US)) { log.debug("We don't have US Locale!"); - AvalonComponentService ecm= (AvalonComponentService)TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME); + ServiceManager serviceManager = TurbineServices.getInstance(); MimeTypeService mimeTypeService=null; try { - mimeTypeService= (MimeTypeService)ecm.lookup(MimeTypeService.ROLE); + mimeTypeService= (MimeTypeService)serviceManager.getService(MimeTypeService.ROLE); } catch (Exception e){ throw new RuntimeException(e); Modified: jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/security/BaseSecurityService.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/security/BaseSecurityService.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/security/BaseSecurityService.java (original) +++ jakarta/turbine/core/trunk/src/java/org/apache/turbine/services/security/BaseSecurityService.java Tue Nov 1 04:44:34 2005 @@ -33,9 +33,9 @@ import org.apache.turbine.om.security.Role; import org.apache.turbine.om.security.User; import org.apache.turbine.services.InitializationException; +import org.apache.turbine.services.ServiceManager; import org.apache.turbine.services.TurbineBaseService; import org.apache.turbine.services.TurbineServices; -import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.services.factory.FactoryService; import org.apache.turbine.util.security.AccessControlList; import org.apache.turbine.util.security.DataBackendException; @@ -152,10 +152,10 @@ SecurityService.SECURE_PASSWORDS_ALGORITHM_KEY, SecurityService.SECURE_PASSWORDS_ALGORITHM_DEFAULT); - AvalonComponentService ecm = (AvalonComponentService)TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME); CryptoService cs = null; try { - cs = (CryptoService)ecm.lookup(CryptoService.ROLE); + ServiceManager serviceManager = TurbineServices.getInstance(); + cs = (CryptoService)serviceManager.getService(CryptoService.ROLE); } catch (Exception e){ throw new RuntimeException("Could not access Crypto Service",e); Modified: jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/LoadingComponentsTest.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/LoadingComponentsTest.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/LoadingComponentsTest.java (original) +++ jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/LoadingComponentsTest.java Tue Nov 1 04:44:34 2005 @@ -16,6 +16,8 @@ * limitations under the License. */ +import java.util.Locale; + import org.apache.fulcrum.cache.DefaultGlobalCacheService; import org.apache.fulcrum.crypto.CryptoService; import org.apache.fulcrum.factory.FactoryService; @@ -25,12 +27,14 @@ import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.test.BaseTestCase; import org.apache.turbine.util.TurbineConfig; + /** * Unit test for verifing that we can load all the appropriate components from the * appropriate Container. For now that is just ECM (AvalonComponentService) * but in the future with mixed containers there could be multiple. * * @author <a href="mailto:[EMAIL PROTECTED]">Eric Pugh</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Siegfried Goeschl</a> * @version $Id$ */ public class LoadingComponentsTest extends BaseTestCase @@ -40,25 +44,103 @@ { super(name); } - public void testLoading() throws Exception + + /** + * Test to load a couple of Avalon services directly by the + * AvalonComponentService. + * + * @throws Exception loading failed + */ + public void testLoadingByAvalonComponentService() throws Exception { - AvalonComponentService ecm = + AvalonComponentService avalonComponentService = (AvalonComponentService) TurbineServices.getInstance().getService( AvalonComponentService.SERVICE_NAME); - DefaultGlobalCacheService dgcs = (DefaultGlobalCacheService)ecm.lookup(DefaultGlobalCacheService.ROLE); - assertNotNull(dgcs); - CryptoService cs = (CryptoService)ecm.lookup(CryptoService.ROLE); + assertNotNull(avalonComponentService); + + DefaultGlobalCacheService dgcs = (DefaultGlobalCacheService)avalonComponentService.lookup(DefaultGlobalCacheService.ROLE); + assertNotNull(dgcs); + CryptoService cs = (CryptoService)avalonComponentService.lookup(CryptoService.ROLE); + assertNotNull(cs); + LocalizationService ls = (LocalizationService)avalonComponentService.lookup(LocalizationService.ROLE); + assertNotNull(ls); + IntakeService intake = (IntakeService)avalonComponentService.lookup(IntakeService.ROLE); + assertNotNull(intake); + FactoryService fs = (FactoryService)avalonComponentService.lookup(FactoryService.ROLE); + assertNotNull(fs); + MimeTypeService mimetype = (MimeTypeService)avalonComponentService.lookup(MimeTypeService.ROLE); + assertNotNull(mimetype); + } + + /** + * Test to load a couple of Avalon services by using the + * TurbineServices which delegate the service retrieval to + * the AvalonComponentService + * + * @throws Exception loading failed + */ + public void testLoadingByTurbineServices() throws Exception + { + ServiceManager serviceManager = TurbineServices.getInstance(); + + DefaultGlobalCacheService dgcs = (DefaultGlobalCacheService)serviceManager.getService(DefaultGlobalCacheService.ROLE); + assertNotNull(dgcs); + CryptoService cs = (CryptoService)serviceManager.getService(CryptoService.ROLE); assertNotNull(cs); - LocalizationService ls = (LocalizationService)ecm.lookup(LocalizationService.ROLE); + LocalizationService ls = (LocalizationService)serviceManager.getService(LocalizationService.ROLE); assertNotNull(ls); - IntakeService intake = (IntakeService)ecm.lookup(IntakeService.ROLE); + IntakeService intake = (IntakeService)serviceManager.getService(IntakeService.ROLE); assertNotNull(intake); - FactoryService fs = (FactoryService)ecm.lookup(FactoryService.ROLE); + FactoryService fs = (FactoryService)serviceManager.getService(FactoryService.ROLE); assertNotNull(fs); - MimeTypeService mimetype = (MimeTypeService)ecm.lookup(MimeTypeService.ROLE); + MimeTypeService mimetype = (MimeTypeService)serviceManager.getService(MimeTypeService.ROLE); assertNotNull(mimetype); } + + /** + * Lookup up an unknown servie + * @throws Exception + */ + public void testLookupUnknownService() throws Exception + { + ServiceManager serviceManager = TurbineServices.getInstance(); + + try + { + serviceManager.getService("foo"); + fail("We expect an InstantiationException"); + } + catch (InstantiationException e) + { + // that'w what we expect + return; + } + catch (Throwable t) + { + fail("We expect an InstantiationException"); + } + } + + /** + * Shutdown the AvalonComponentService where the MimeTypeService + * resides and lookup the MimeTypeService. This should trigger + * a late initialization of AvalonComponentService and returns + * a fully functional MimeTypeService. + */ + public void testAvalonComponentServiceShutdown() throws Exception + { + ServiceManager serviceManager = TurbineServices.getInstance(); + serviceManager.shutdownService(AvalonComponentService.SERVICE_NAME); + + MimeTypeService mimeTypeService = (MimeTypeService) serviceManager.getService(MimeTypeService.class.getName()); + assertNotNull(mimeTypeService); + + Locale locale = new Locale("en", "US"); + String s = mimeTypeService.getCharSet(locale); + assertEquals("ISO-8859-1", s); + } + public void setUp() throws Exception { tc = new TurbineConfig(".", "/conf/test/TestFulcrumComponents.properties"); Modified: jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java (original) +++ jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java Tue Nov 1 04:44:34 2005 @@ -18,8 +18,8 @@ import org.apache.fulcrum.cache.CachedObject; import org.apache.fulcrum.cache.GlobalCacheService; +import org.apache.turbine.services.ServiceManager; import org.apache.turbine.services.TurbineServices; -import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.test.BaseTestCase; import org.apache.turbine.util.TurbineConfig; /** @@ -38,13 +38,11 @@ } public void testComponentAndFacaded() throws Exception { - AvalonComponentService acs = (AvalonComponentService) TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME); - GlobalCacheService cache = (GlobalCacheService)acs.lookup(GlobalCacheService.ROLE); + ServiceManager serviceManager = TurbineServices.getInstance(); + GlobalCacheService cache = (GlobalCacheService)serviceManager.getService(GlobalCacheService.ROLE); CachedObject inputObject = new CachedObject(new Double(10.2)); cache.addObject("testObj",inputObject); - } - public void setUp() throws Exception { Modified: jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/intake/IntakeToolTest.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/intake/IntakeToolTest.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/intake/IntakeToolTest.java (original) +++ jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/intake/IntakeToolTest.java Tue Nov 1 04:44:34 2005 @@ -26,7 +26,6 @@ import org.apache.fulcrum.intake.model.Group; import org.apache.turbine.om.security.User; import org.apache.turbine.services.TurbineServices; -import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.services.rundata.RunDataService; import org.apache.turbine.test.BaseTestCase; import org.apache.turbine.test.EnhancedMockHttpServletRequest; @@ -36,6 +35,7 @@ import com.mockobjects.servlet.MockHttpServletResponse; import com.mockobjects.servlet.MockHttpSession; import com.mockobjects.servlet.MockServletConfig; + /** * Unit test for Localization Tool. Verifies that localization works the same using the * deprecated Turbine localization service as well as the new Fulcrum Localization @@ -104,17 +104,14 @@ RunData runData = rds.getRunData(request, response, config); return runData; } + public void setUp() throws Exception { tc = new TurbineConfig(".", "/conf/test/TestFulcrumComponents.properties"); - tc.initialize(); - - AvalonComponentService avalon = - (AvalonComponentService) TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME); - - avalon.lookup(IntakeService.class.getName()); - + tc.initialize(); + TurbineServices.getInstance().getService(IntakeService.class.getName()); } + public void tearDown() throws Exception { if (tc != null) Modified: jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java URL: http://svn.apache.org/viewcvs/jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java?rev=330049&r1=330048&r2=330049&view=diff ============================================================================== --- jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java (original) +++ jakarta/turbine/core/trunk/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java Tue Nov 1 04:44:34 2005 @@ -1,6 +1,5 @@ package org.apache.turbine.services.mimetype; - /* * Copyright 2001-2004 The Apache Software Foundation. * @@ -17,18 +16,19 @@ * limitations under the License. */ - import java.util.Locale; import org.apache.fulcrum.mimetype.MimeTypeService; +import org.apache.turbine.services.ServiceManager; import org.apache.turbine.services.TurbineServices; -import org.apache.turbine.services.avaloncomponent.AvalonComponentService; import org.apache.turbine.test.BaseTestCase; import org.apache.turbine.util.TurbineConfig; + /** * Unit test for Accessing the Fulcrum Mimetype component within Turbine. * * @author <a href="mailto:[EMAIL PROTECTED]">Eric Pugh</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Siegfried Goeschl</a> * @version $Id$ */ public class FulcrumMimetypeComponentTest extends BaseTestCase @@ -40,10 +40,8 @@ } public void testComponent() throws Exception { - AvalonComponentService acs = - (AvalonComponentService) TurbineServices.getInstance().getService( - AvalonComponentService.SERVICE_NAME); - MimeTypeService mimeTypeService = (MimeTypeService) acs.lookup(MimeTypeService.class.getName()); + ServiceManager serviceManager = TurbineServices.getInstance(); + MimeTypeService mimeTypeService = (MimeTypeService) serviceManager.getService(MimeTypeService.class.getName()); Locale locale = new Locale("en", "US"); String s = mimeTypeService.getCharSet(locale); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]