The Apache group's j2ee server is called Geronimo. Here are some notes.
The home page is
http://geronimo.apache.org/ and there's a wiki at
http://wiki.apache.org/geronimo/.
Concepts
GBean
Geronimo is modular; it consists of a kernel and a set of components that implement the features needed to implement the
J2EE specification. GBean (short for "Geronimo Bean") is the kernel-component interface. There's no GBean interface per se, but each GBean has a corresponding
GBeanInfo object that describes the GBean and tells the kernel how to interact with it. Some GBeans implement
GBeanLifecycle which allows them to get called when lifecycle events (start, stop, fail) happen.
The source code for the
GBeanTest
class shows how a GBean is used.
GBeans are tracked using an MBeanServer (
an MBean directory?).
According to mailing list traffic one advantage of GBeans over MBeans is that GBean method invocation is much faster.
Misc
Startup
Runs using a
standalone application jar called
target/bin/server.jar
. The startup class specified in
MANIFEST.MF
is
o.a.g.system.main.Daemon. The Daemon is a command-line wrapper around
o.a.g.kernel.Kernel. The daemon first unserializes the
META-INF/config.ser
from
server.jar
using Configuration.loadGMBeanState(). The format of
config.ser
is a leading int that indicates how many attribute name/value pairs follow, then a leading int that indicates how many setReferencePatterns() parameter pairs follow:
int attributeCount = ois.readInt();
for (int i = 0; i < attributeCount; i++) {
gbean.setAttribute((String) ois.readObject(), ois.readObject());
}
int endpointCount = ois.readInt();
for (int i = 0; i < endpointCount; i++) {
gbean.setReferencePatterns((String) ois.readObject(), (Set) ois.readObject());
}
Deployment
wiki page here:
http://wiki.apache.org/geronimo/Deployment
j2ee xml descriptor files (and their geronimo counterparts) are unmarshalled into java classes using apache xmlbeans (
http://xml.apache.org/xmlbeans).
For resource adapters, the
ConnectorModuleBuilder class builds the configuration that gets deployed at run-time.
http://nagoya.apache.org/jira/browse/GERONIMO-262 - NPE while deploying trivial RA
Stack trace at startup (setting a RA parameter), heavily edited to remove the gbean/mbean cruft:
at skeleton.ra.spread.AdapterImpl.setConfigParameter(AdapterImpl.java:84)
at org.apache.geronimo.connector.ResourceAdapterWrapper.setAttribute(ResourceAdapterWrapper.java:130)
at mx4j.server.MX4JMBeanServer.registerMBean(MX4JMBeanServer.java:729)
at org.apache.geronimo.kernel.Kernel.loadGBean(Kernel.java:255)
at org.apache.geronimo.kernel.config.Configuration.doStart(Configuration.java:176)
at org.apache.geronimo.gbean.jmx.GBeanMBean.doStart(GBeanMBean.java:593)
at org.apache.geronimo.gbean.jmx.AbstractManagedObject.startRecursive(AbstractManagedObject.java:303)
at mx4j.server.MX4JMBeanServer.invoke(MX4JMBeanServer.java:1079)
at org.apache.geronimo.gbean.jmx.AbstractManagedObject.startRecursive(AbstractManagedObject.java:310)
at org.apache.geronimo.kernel.Kernel.startRecursiveGBean(Kernel.java:275)
at org.apache.geronimo.system.main.Daemon.main(Daemon.java:137)
EJB
Geronimo embeds OpenEJB as its EJB container, so there's a lot of good info at
http://www.openejb.org/ that's also relevant to Geronimo, for example
http://www.openejb.org/geronimo.html and
http://openejb.codehaus.org/hello-world.html .
Geronimo's build process depends on downloading a copy of openejb from some site somewhere, and sometimes geronimo and openejb change simultaneously in ways that need to be closely coordinated. In that case you'll want to build openejb from source so that geronimo's build process can use your local openejb.
openejb's web site points to old source code, but according to
http://hausmates.codehaus.org/projectinfo newer code seems to be located at:
cvs -d :pserver:anonymous@cvs.openejb.codehaus.org:/home/projects/openejb/scm login
(no password)
cvs -d :pserver:anonymous@cvs.openejb.codehaus.org:/home/projects/openejb/scm
Build openejb first, then geronimo.