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 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