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