# Introduction to the JBoss Microcontainer

The JBoss Microcontainer (MC) provides an environment to configure and manage POJOs (plain old java objects). It is designed to reproduce the existing JBoss JMX Microkernel but targetted at POJO environments. As such it can be used standalone outside the JBoss Application Server.

The 2.0.x release provides a set of features to support POJO deployment in JBossAS-5.0.x, JBossESB, and the bootstrap of services used by standalone projects like embedded EJB3.

This document takes you through the design of the microcontainer including design decisions and future directions.

## JBoss Microcontainer Highlights

The primary focus of the MC is as a framework for building server kernels. It replaces the legacy JMX based kernel found in JBossAS4.x and earlier with a POJO based kernel that has been generalized to better support extensibility along the primary aspects required for a server type of environment: aop, metadata, class loading, deployments, state management, lifecycle/dependcies, configuration, and management. The use of the term server should not be correlated with large memory/cpu requirment environments of typical application/web servers. A server in the context of the MC is just a kernel for plugging POJO container models into. The MC can be configured for extremely lightweight application type setups like a junit testcase as well as full feature application servers.

## Information and Roadmaps

A high level roadmap for the MC and status can be found in the wiki page JBossMicrocontainerHighLevelRoadMap. A more detailed roadmap of the issues going into releases can be found in the MC JIRA project page.

Design discussion occur in the JBoss POJO Developers Forums. This currently includes 3 sub-forums: Design the new POJO MicroContainer (the core MC projects independent of any particular usage), Design of POJO Server (discussions related to application server environments like JBossAS, JBossESB), Design of OSGi Integration (discussion of how a kernel/framework like OSGi should integrate with the MC).

## An overview of the MC modules

This section introduces the various MC modules

### aop-mc-int

Integration between the JBossAOP and MC projects

### container

A better name would be joinpoint. This module contains: reflection, the integration point for manipulating class information at runtime, e.g. overriding annotations or obtaining an aop instance advisor. joinpoint, the joinpoint model including the join point factory. classadaptor, the integration and configuration spi. metadata, base metadata types and repository

### dependency

Dependency management is handled by the controller. The controller is the core component for keeping track of contexts to make sure the configuration and lifecycle are done in the correct order including dependencies and classloading considerations.

### deployers

Deployers load components from various models, POJOs, JMX, Spring, Java EE, etc. into the MC runtime.

### kernel

The kernel defines the core kernel spi including, boostrap, configuration, POJO deployments, dependency, events, bean metadata, and bean registry.

### managed

The managed module defines the base objects defining the management view of a component.

### metatype

The metatype module defines the base types found in the management view of a component.

### osgi-int

This contains the integration classes that adapt the OSGi model onto the MC.

### spring-int

This contains the integration classes that adapt the spring model onto the MC.