Hi, I have been thinking about a Container API based on Fede comments and I think I may have come up with a possible API and just wanted to see what you thought. I will give the basic outline of classes below. Replace with Servlet/Mailet/Portlet/EJB/Block etc Classes: Deployer Deployment Registry Factory Container Manager Info Entry Definitions: Deployer { void deploy( String location, URL url ); void undeploy( String location ); Deployment getDeployment( String location ); } A Deployer is responsible for taking a URL (ie a jar/war/ear) and deploying it to a particular "location". "location" means different things for different containers. For a servlet container it may mean the place to mount servlet (ie /myapp --> /myapp/Cocoon.xml is mapping cocoon servlet to /myapp context). Undeploying is only possible when the deployment is not currently being used (ie ran/executed/served/whatever). -------- Deployment { Manager getManager(); Factory getFactory(); Container getContainer(); Registry getRegistry(); } Basically represents an installed component. -------- Registry { void register( String name, Info info ); void register( String name ); Info getInfo( String name ); Ityerator getInfoNames(); } Basically represents a registry of all different types of sub-component that this container can instantiate. It is initially filled by Deployer. -------- Factory { Entry create( String name, Info info ); } This is the object that creates the entries for a component. It uses data given to it from Configuration + Info to create Entry. -------- Container { void add( Entry ); void remove( Entry ); Iterator list(); } This contains it during execution and may provide certain facilities (like a thread per EJB etc). -------- Manager implements Initializable, Disposable, Configurable { } This class is responsible for retrieving Infos from registry, feeding this to factory to create Entrys and then placing these Entrys into Containers. It also carries out lifecycle management of Entrys (ie configuure/compose/contextualize fro Blocks/mailets, init/destroy/service for servlets etc). -------- Info { ... } Contains Meta-Information about a component type (ie would be a BlockInfo, an EJBDescriptor, a MailetInfo etc) -------- Entry { Info getInfo(); String getName(); get(); State getState(); ... } Contains information about a particular instance of a . This would contain name, configuration data, parameters, log entries etc. Basically instance data. -------------------------- The above is just a rough run-down about Container system. I am still playing with other things (ie Context-like structures) thou what do you think?