001 package org.apache.fulcrum.yaafi.service.servicemanager; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022 import org.apache.avalon.framework.activity.Disposable; 023 import org.apache.avalon.framework.context.Context; 024 import org.apache.avalon.framework.context.ContextException; 025 import org.apache.avalon.framework.context.Contextualizable; 026 import org.apache.avalon.framework.context.DefaultContext; 027 import org.apache.avalon.framework.logger.AbstractLogEnabled; 028 import org.apache.avalon.framework.logger.Logger; 029 import org.apache.avalon.framework.parameters.ParameterException; 030 import org.apache.avalon.framework.parameters.Parameterizable; 031 import org.apache.avalon.framework.parameters.Parameters; 032 import org.apache.avalon.framework.service.ServiceException; 033 import org.apache.avalon.framework.service.ServiceManager; 034 import org.apache.avalon.framework.service.Serviceable; 035 036 037 /** 038 * This is a sort of "edelhack" to solve the problem of accessing 039 * the Avalon infrastructure without having an instance of the 040 * container. The implementation stores the very first instance 041 * of itself in a static variable which can be accessed using 042 * getInstance(). 043 * 044 * This allows access to the various Avalon artifacts. 045 * 046 * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a> 047 */ 048 049 public class ServiceManagerServiceImpl 050 extends AbstractLogEnabled 051 implements ServiceManagerService, Contextualizable, Parameterizable, Serviceable, Disposable 052 { 053 /** The one and only instance */ 054 private static ServiceManagerServiceImpl instance; 055 056 /** Store the ServiceContainer on a per instance base */ 057 private ServiceManager serviceManager; 058 059 /** Store the passed parameters on a per instance base */ 060 private Parameters parameters; 061 062 /** Store the passed parameters on a per instance base */ 063 private Context context; 064 065 /** 066 * Constructor 067 */ 068 public ServiceManagerServiceImpl() 069 { 070 setInstance(this); 071 } 072 073 /** 074 * @return the one and only instance of this class 075 */ 076 public static synchronized ServiceManagerService getInstance() 077 { 078 return instance; 079 } 080 081 /** 082 * Create the one and only instance 083 * @param instance the instance 084 */ 085 protected static synchronized void setInstance( ServiceManagerServiceImpl instance ) 086 { 087 if( ServiceManagerServiceImpl.instance == null ) 088 { 089 ServiceManagerServiceImpl.instance = instance; 090 } 091 } 092 093 ///////////////////////////////////////////////////////////////////////// 094 // Avalon Lifecycle Implementation 095 ///////////////////////////////////////////////////////////////////////// 096 097 /** 098 * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager) 099 */ 100 public void service(ServiceManager serviceManager) throws ServiceException 101 { 102 this.serviceManager = serviceManager; 103 } 104 105 /** 106 * @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context) 107 */ 108 public void contextualize(Context context) throws ContextException 109 { 110 this.context = context; 111 } 112 113 /** 114 * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters) 115 */ 116 public void parameterize(Parameters parameters) throws ParameterException 117 { 118 this.parameters = parameters; 119 } 120 121 /** 122 * @see org.apache.avalon.framework.activity.Disposable#dispose() 123 */ 124 public void dispose() 125 { 126 this.serviceManager = null; 127 this.parameters = new Parameters(); 128 this.context = new DefaultContext(); 129 ServiceManagerServiceImpl.instance = null; 130 } 131 132 ///////////////////////////////////////////////////////////////////////// 133 // ServiceContainer Implementation 134 ///////////////////////////////////////////////////////////////////////// 135 136 /** 137 * @see org.apache.avalon.framework.service.ServiceManager#hasService(java.lang.String) 138 */ 139 public boolean hasService(String name) 140 { 141 return this.serviceManager.hasService(name); 142 } 143 144 /** 145 * @see org.apache.avalon.framework.service.ServiceManager#lookup(java.lang.String) 146 */ 147 public Object lookup(String name) throws ServiceException 148 { 149 return this.serviceManager.lookup(name); 150 } 151 152 /** 153 * @see org.apache.avalon.framework.service.ServiceManager#release(java.lang.Object) 154 */ 155 public void release(Object object) 156 { 157 this.serviceManager.release(object); 158 } 159 160 /** 161 * @return the ServiceManager for the container 162 */ 163 public ServiceManager getServiceManager() 164 { 165 return this.serviceManager; 166 } 167 168 /** 169 * @return the Parameters for the container 170 */ 171 public Parameters getParameters() 172 { 173 return this.parameters; 174 } 175 176 /** 177 * @return the Context for the container 178 */ 179 public Context getContext() 180 { 181 return this.context; 182 } 183 184 /** 185 * @see org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService#getAvalonLogger() 186 */ 187 public Logger getAvalonLogger() 188 { 189 return this.getLogger(); 190 } 191 }