01: package org.tigris.scarab.services;
02:
03: /* ====================================================================
04: *
05: * Copyright (c) 2006 Hussayn dabbous.
06: *
07: * Licensed under the
08: *
09: * CollabNet/Tigris.org Apache-style license (the "License");
10: *
11: * you may not use this file except in compliance with the License.
12: * You may obtain a copy of the License at
13: *
14: * http://scarab.tigris.org/LICENSE
15: *
16: * Unless required by applicable law or agreed to in writing, software
17: * distributed under the License is distributed on an "AS IS" BASIS,
18: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
19: * implied. See the License for the specific language governing
20: * permissions and limitations under the License.
21: * ====================================================================
22: *
23: * This software consists of voluntary contributions made by many
24: * individuals on behalf of CollabNet.
25: *
26: */
27:
28: import org.apache.fulcrum.TurbineServices;
29: import org.apache.fulcrum.localization.LocalizationService;
30: import org.apache.turbine.services.yaaficomponent.YaafiComponentService;
31: import org.tigris.scarab.tools.localization.L10NKeySet;
32: import org.tigris.scarab.tools.localization.L10NMessage;
33: import org.tigris.scarab.util.ScarabException;
34: import org.tigris.scarab.util.ScarabRuntimeException;
35:
36: /**
37: * Common access class for component services (i.e. yaafi).
38: *
39: * @author <a href="mailto:hussayn.dabbous@tigris.org">Hussayn Dabbous</a>
40: */
41: public class ServiceManager {
42: static ServiceManager instance = null;
43:
44: private ServiceManager() {
45: // intentionally left blank
46: }
47:
48: /**
49: * Return the one and only Servicemanager instance
50: * @return
51: */
52: public static ServiceManager getInstance() {
53: if (instance == null) {
54: instance = new ServiceManager();
55: }
56: return instance;
57: }
58:
59: /**
60: * Lookup a service. If the service exists, but is not initialized yet,
61: * perform the initialization before returnning the service.
62: * The method is synchronized in order to avoid duplicate initializations
63: * due to possible parallel calls from multiple threads.
64: * @param serviceClass
65: * @return
66: * @throws ScarabException
67: */
68: public synchronized Object lookup(Class serviceClass) {
69: Object serviceInstance;
70: YaafiComponentService yaafi = getService();
71: try {
72: serviceInstance = yaafi.lookup(serviceClass.getName());
73: } catch (Exception e) {
74: L10NMessage msg = new L10NMessage(
75: L10NKeySet.ExceptionGeneric, e);
76: throw new ScarabRuntimeException(msg);
77: }
78: return serviceInstance;
79: }
80:
81: public static YaafiComponentService getService() {
82: YaafiComponentService yaafi = null;
83: try {
84: yaafi = (YaafiComponentService) TurbineServices
85: .getInstance().getService(
86: YaafiComponentService.SERVICE_NAME);
87: } catch (Exception e) {
88: L10NMessage msg = new L10NMessage(
89: L10NKeySet.ExceptionGeneric, e);
90: throw new ScarabRuntimeException(msg);
91: }
92: return yaafi;
93:
94: }
95:
96: }
|