01: /**
02: * $RCSfile$
03: * $Revision: 624 $
04: * $Date: 2004-12-05 02:38:08 -0300 (Sun, 05 Dec 2004) $
05: *
06: * Copyright (C) 2004 Jive Software. All rights reserved.
07: *
08: * This software is published under the terms of the GNU Public License (GPL),
09: * a copy of which is included in this distribution.
10: */package org.jivesoftware.openfire.container;
11:
12: import org.jivesoftware.openfire.XMPPServer;
13:
14: /**
15: * Logical, server-managed entities must implement this interface. A module
16: * represents an operational unit and may contain zero or more services
17: * and rely on zero or more services that may be hosted by the container.
18: * <p/>
19: * In order to be hosted in the Jive server container, all modules must:
20: * </p>
21: * <ul>
22: * <li>Implement the Module interface</li>
23: * <li>Have a public no-arg constructor</li>
24: * </ul>
25: * <p/>
26: * The Jive container will run all modules through a simple lifecycle:
27: * <pre>
28: * constructor -> initialize() -> start() -> stop() -> destroy() -> finalizer
29: * |<-----------------------| ^
30: * | |
31: * V----------------------------------->
32: * </pre>
33: * </p>
34: * <p/>
35: * The Module interface is intended to provide the simplest mechanism
36: * for creating, deploying, and managing server modules.
37: * </p>
38: *
39: * @author Iain Shigeoka
40: */
41: public interface Module {
42:
43: /**
44: * Returns the name of the module for display in administration interfaces.
45: *
46: * @return The name of the module.
47: */
48: String getName();
49:
50: /**
51: * Initialize the module with the container.
52: * Modules may be initialized and never started, so modules
53: * should be prepared for a call to destroy() to follow initialize().
54: *
55: * @param server the server hosting this module.
56: */
57: void initialize(XMPPServer server);
58:
59: /**
60: * Start the module (must return quickly). Any long running
61: * operations should spawn a thread and allow the method to return
62: * immediately.
63: */
64: void start();
65:
66: /**
67: * Stop the module. The module should attempt to free up threads
68: * and prepare for either another call to initialize (reconfigure the module)
69: * or for destruction.
70: */
71: void stop();
72:
73: /**
74: * Module should free all resources and prepare for deallocation.
75: */
76: void destroy();
77: }
|