1 /**
2  * <p>The microkernel core of the server is a simple, flexible, nested
3  * container framework defined in this package. </p>
4  * <p> The container model consists of&nbsp; three primary participants:<br>
5  * </p>
6  * <ul>
7  * <li><strong>Service</strong> - A well-known Java object defined by a
8  * Java interface. Code running in the server should be organized into
9  * services that perform logical (and limited) blocks of work. These
10  * services can then be exposed as a Java interface and obtained using the
11  * ServiceLookup service. Although most services will be local to the
12  * container, some may use RMI, web services, XMPP, or other remote
13  * procedure call technologies to provide services across the network.<br>
14  * </li>
15  * <li><strong>Module </strong>- The smallest server deployment unit. A
16  * module has a well-defined life cycle that is managed by its hosting
17  * container. A module may contain zero or more services and client code
18  * that accesses these services. Modules can be deployed and configured
19  * individually, allowing the easy implementation of server plugins and
20  * on the fly reconfiguration of the server.<br>
21  * </li>
22  * <li><strong>Container </strong>- A special module that hosts server
23  * modules including other containers. Hosting involves life cycle
24  * management of child modules, configuration of child modules, and
25  * providing access to shared resources. Containers also provide their own
26  * configurable security managers and custom classloaders that extend the
27  * classpath to automatically include module classes and jar files located
28  * in well defined locations (e.g. similar to WEB-INF/lib and
29  * WEB-INF/classes in a J2EE web-app/WAR).</li>
30  * </ul>
31  * <p>The nesting nature of containers allows a tree-like server
32  * architecture with a root 'bootstrap container' with core modules, and
33  * child containers with their own modules. Child containers by default
34  * inherit and extend the bootstrap container's classpath and services
35  * while being protected from implementation details of any modules,
36  * containers, or services in layers above them. In some cases, child
37  * containers may have restricted views or access to upper levels of the
38  * tree (e.g. a user plug-in container that allows users to add arbitrary
39  * server extensions).<br>
40  * </p>
41  */
42 package org.jivesoftware.openfire.container;
43