01: package org.apache.turbine.services;
02:
03: /*
04: * Licensed to the Apache Software Foundation (ASF) under one
05: * or more contributor license agreements. See the NOTICE file
06: * distributed with this work for additional information
07: * regarding copyright ownership. The ASF licenses this file
08: * to you under the Apache License, Version 2.0 (the
09: * "License"); you may not use this file except in compliance
10: * with the License. You may obtain a copy of the License at
11: *
12: * http://www.apache.org/licenses/LICENSE-2.0
13: *
14: * Unless required by applicable law or agreed to in writing,
15: * software distributed under the License is distributed on an
16: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17: * KIND, either express or implied. See the License for the
18: * specific language governing permissions and limitations
19: * under the License.
20: */
21:
22: /**
23: * Classes that implement this interface can act as a broker for
24: * <code>Initable</code> classes.
25: *
26: * Functionality provided by the broker includes:
27: *
28: * <ul>
29: *
30: * <li>Maintaining a single instance of each <code>Initable</code> in
31: * the system.</li>
32: *
33: * <li>Early initialization of <code>Initables</code> during system
34: * startup.</li>
35: *
36: * <li>Late initialization of <code>Initables</code> before they are
37: * used.</li>
38: *
39: * <li>Providing instances of <code>Initables</code> to requesting
40: * parties.</li>
41: *
42: * <li>Maintainging dependencies between <code>Initables</code> during
43: * early initalization phases, including circular dependencies
44: * detection.</li>
45: *
46: * </ul>
47: *
48: * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
49: * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
50: * @version $Id: InitableBroker.java 534527 2007-05-02 16:10:59Z tv $
51: */
52: public interface InitableBroker {
53: /**
54: * Performs early initialization of an Initable class.
55: *
56: * If your class depends on another Initable being initialized to
57: * perform early initialization, you should always ask your broker
58: * to initialize the other class with the objects that are passed
59: * to you, before you try to retrieve that Initable's instance with
60: * getInitable().
61: *
62: * @param className The name of the class to be initailized.
63: * @param data An object to be used for initialization activities.
64: * @exception InitializationException if initialization of this
65: * class was not successful.
66: */
67: void initClass(String className, Object data)
68: throws InitializationException;
69:
70: /**
71: * Shutdowns an Initable class.
72: *
73: * This method is used to release resources allocated by an
74: * Initable class, and return it to initial (uninitailized)
75: * state.
76: *
77: * @param className The name of the class to be uninitialized.
78: */
79: void shutdownClass(String className);
80:
81: /**
82: * Provides an instance of Initable class ready to work.
83: *
84: * If the requested class couldn't be instatiated or initialized,
85: * InstantiationException will be thrown. You needn't handle this
86: * exception in your code, since it indicates fatal
87: * misconfigurtion of the system.
88: *
89: * @param className The name of the Initable requested.
90: * @return An instance of requested Initable.
91: * @exception InstantiationException if there was a problem
92: * during instantiation or initialization of the Initable.
93: */
94: Initable getInitable(String className)
95: throws InstantiationException;
96: }
|