blob: b91fcd6241a00b2fff219ee76a789d7631bc1557 [file] [log] [blame]
<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>The OpenEJB Container System --
Everything in OpenEJB is pluggable, even OpenEJB itself</title><link href="default.css" rel="stylesheet"><link href="/images/favicon.ico" rel="SHORTCUT ICON"></head><body marginwidth="0" marginheight="0" leftmargin="0" bottommargin="0" topmargin="0" vlink="#6763a9" link="#6763a9" bgcolor="#ffffff"><a name="top"></a><table height="400" width="712" cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#7270c2" align="left" valign="top" width="20"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td bgcolor="#7270c2" align="left" valign="top" width="95"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="7"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" width="40"><img border="0" height="6" width="40" src="images/dotTrans.gif"></td><td bgcolor="#5A5CB8" align="left" valign="top" width="430"><img border="0" height="6" width="430" src="images/top_2.gif"></td><td bgcolor="#E24717" align="left" valign="top" width="120"><img src="images/top_3.gif" width="120" height="6" border="0"></td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" width="20"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="95"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#ffffff" width="7"></td><td align="left" valign="top" width="40"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td><td align="left" valign="middle" width="430"><a href="faq.html"><span class="menuTopOff">[ f a q ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://wiki.codehaus.org/openejb"><span class="menuTopOff">[ w i k i ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://archive.openejb.codehaus.org/user/"><span class="menuTopOff">[ l i s t s ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://cvs.openejb.org/"><span class="menuTopOff">[ c v s ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://jira.codehaus.org/secure/BrowseProject.jspa?id=10401"><span class="menuTopOff">[ b u g s ]</span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img border="0" height="2" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" height="20" width="120">&nbsp;</td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" width="20"><img border="0" height="3" width="20" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="95"><img border="0" height="3" width="105" src="images/line_sm.gif"></td><td align="left" valign="top" bgcolor="#a9a5de" width="7"><img border="0" height="3" width="7" src="images/line_sm.gif"></td><td align="left" valign="top" width="40"><img border="0" height="3" width="40" src="images/line_light.gif"></td><td align="left" valign="top" width="430"><img border="0" height="3" width="430" src="images/line_light.gif"></td><td align="left" valign="top" width="120"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td></tr><tr><td align="left" valign="top" bgcolor="#7270c2"><img border="0" height="10" width="20" src="images/dotTrans.gif"></td><td align="left" valign="top" bgcolor="#7270c2" width="95"><img border="0" height="2" width="1" src="images/dotTrans.gif"><br><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Main</span></td></tr><tr><td align="left" valign="top"><a href="index.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Welcome!</span></a></td></tr><tr><td align="left" valign="top"><a href="download.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Download</span></a></td></tr><tr><td align="left" valign="top"><a href="lists.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Mailing Lists</span></a></td></tr><tr><td align="left" valign="top"><a href="cvs.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Source Code</span></a></td></tr><tr><td align="left" valign="top"><a href="contributors.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
The Team</span></a></td></tr><tr><td align="left" valign="top"><a href="status.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Status</span></a></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Users</span></td></tr><tr><td align="left" valign="top"><a href="quickstart.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Quickstart</span></a></td></tr><tr><td align="left" valign="top"><a href="hello-world.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Hello World!</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_entity_postgresql.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
CMP Example</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_guide.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
CMP Guide</span></a></td></tr><tr><td align="left" valign="top"><a href="deploy.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Deploy</span></a></td></tr><tr><td align="left" valign="top"><a href="start-command.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Startup</span></a></td></tr><tr><td align="left" valign="top"><a href="validate.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Validation</span></a></td></tr><tr><td align="left" valign="top"><a href="config_containers.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Configuration</span></a></td></tr><tr><td align="left" valign="top"><a href="properties.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Properties</span></a></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Servers</span></td></tr><tr><td align="left" valign="top"><a href="embedded.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Local Server</span></a></td></tr><tr><td align="left" valign="top"><a href="remote-server.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Remote Server</span></a></td></tr><tr><td align="left" valign="top"><a href="tomcat.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Tomcat</span></a></td></tr><tr><td align="left" valign="top"><a href="geronimo.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Geronimo</span></a></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr><td align="left" valign="top"><span class="subMenuOn">Integrators</span></td></tr><tr><td align="left" valign="top"><a href="whyopenejb.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Why OpenEJB</span></a></td></tr><tr><td align="left" valign="top"><a href="containersystem.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Overview</span></a></td></tr><tr><td align="left" valign="top"><a href="design_openejb.html"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Design</span></a></td></tr><tr><td align="left" valign="top"><a href="OpenEJB_presentaion.ppt"><span class="subMenuOff">&nbsp;&nbsp;&nbsp;
Presentation</span></a></td></tr></table><img border="0" height="15" width="1" src="images/dotTrans.gif"><br><img border="0" height="3" width="105" src="images/line_sm.gif"><br><A href="http://codehaus.org"><IMG alt="The Codehaus" border="0" height="17" width="88" src="http://www.openejb.org/codehaus-smaller.png"></A></td><td align="left" valign="top" bgcolor="#a9a5de" width="7">&nbsp;</td><td align="left" valign="top" width="40">&nbsp;</td><td valign="top" width="430" rowspan="4"><table width="430" cellspacing="0" cellpadding="0" border="0" rows="2" cols="1"><tr><td align="left" valign="top"><br><img width="200" vspace="0" src="./images/logo_ejb2.gif" hspace="0" height="55" border="0"><br><img src="images/dotTrans.gif" hspace="0" height="7" border="0"><br><span class="pageTitle">The OpenEJB Container System</span><br><span class="pageSubTitle">Everything in OpenEJB is pluggable, even OpenEJB itself</span><br><img src="images/dotTrans.gif" hspace="0" height="1" border="0"></td></tr></table><p></p><br><a name="OpenEJB is whatever you want it to be"><h2>OpenEJB is whatever you want it to be</h2></a>
<p><span class="bodyBlack">
OpenEJB is a complete EJB Server platform, clients can access beans through
the <a href="embedded.html">Local Server</a> or the
<a href="remote-server.html">Remote Server</a>. Both of these are focused on
ordinary users who just want to create EJBs and need a an EJB Server to run them.
This is great, but what if you want more control?
</span></p>
<p><span class="bodyBlack">
What if you want to customize part of the EJB Server? What if want to create a new
enterprise bean type? What if you want to tear out things you don't need? What if
you want to re-implement something or make very specific optimizations?
</span></p>
<p><span class="bodyBlack">
What if you want the EJB Server to directly and tightly use systems
in your existing infrastructure, such as a security system or transaction system?
</span></p>
<p><span class="bodyBlack">
What if you are not looking to create EJBs at all, but rather, you want to create your own
EJB Server or add EJB compliance to your existing application server?
</span></p>
<p><span class="bodyBlack">
If you need any of these things, then OpenEJB is for you.
</span></p>
<a name="OpenEJB is like a kernel"><h2>OpenEJB is like a kernel</h2></a>
<p><span class="bodyBlack">
Just as Linux is actually the kernel for the operating system, OpenEJB is a kernel
for an EJB platform. We refer to this EJB specific "kernel" as the container system.
It is a framework by which EJB Containers can interoperate but not be dependent on each other.
Where an EJB Server can provide remote access to beans in those EJB Containers without
being dependent on any of the EJB Containers in the system.
</span></p>
<p><span class="bodyBlack">
Just like the Linux operating system, OpenEJB is divided into several independent pieces.
Every piece can be ripped out and replaced independently of the others. Pieces can be added
and combined in a number of different ways to create customized EJB platforms for specific
needs. This idea is similar the concept of a Linux distribution. Each distribution is a
full working operating system, each has a unique combination of pieces, but all share the
same heart, the kernel.
</span></p>
<a name="Anyone can participate"><h2>Anyone can participate</h2></a>
<p><span class="bodyBlack">
The power of OpenEJB, as with Linux, is that many people can play in the same game. Anyone
can add a piece. All pieces can play together.
</span></p>
<p><span class="bodyBlack">
For example, the open source project <a href="http://openorb.sf.net">OpenORB</a>, formerly
of <a href="http://www.exolab.org">Exolab</a>, integrated OpenEJB into OpenORB to provide
OpenORB users with EJB functionality. Similarly, Apple Computer integrated OpenEJB into its
<a href="http://www.apple.com/webobjects/">WebObjects</a> application server to provide
WebObjects users with EJB functionality.
</span></p>
<a name="Vendors can play along"><h2>Vendors can play along</h2></a>
<p><span class="bodyBlack">
Vendors are already participating in this game. As mentioned above, Apple Computer
put OpenEJB into WebObjects and has been shipping it world over since WebObjects version 5.1.
This is great. Imagine the possibilities when more vendors participate.</span></p>
<p><span class="bodyBlack">
Let's say Oracle decided to take the part of their application server that provides
EntityBeans with lightning-fast Container-Managed Persistence to the Oracle Database and
make it an OpenEJB-compatible EJB Container. They could sell that EJB Container separately
or packaged with the Oracle Database to anyone using an OpenEJB-based platform. WebObjects
users could purchase and plug-in the Oracle CMP Container, as could OpenORB users, and as
could users of any other software that uses OpenEJB as its container system.
</span></p>
<p><span class="bodyBlack">
In the extreme case, IBM or BEA could convert their EJB Containers to OpenEJB-compatible
EJB Containers and sell them separately, in combinations, or at different price levels.
One container for stateless SessionBeans, one for stateful SessionBeans, one for
bean-managed persistence EntityBeans, one for container-managed EntityBeans, and one
for JMS MessageDrivenBeans. Along with selling one big platform for $20 grand, they
could sell a base platform for $5, for example, and each of the containers
for $5 grand. They could sell those containers to their existing customers or users of any
other OpenEJB-based EJB platform.
</span></p>
<a name="Open Source can play along"><h2>Open Source can play along</h2></a>
<p><span class="bodyBlack">
Now if someday the developers of the PostgreSQL database server, or the MySQL database
server decided to create an EJB Container that supported EntityBeans with container-managed
persistence, the same rules apply. Anyone using an OpenEJB-based EJB platform could
download, plug-in and use one or both of those those containers for their CMP EntityBeans.
Those containers could be written to work as close to the database as possible, cutting out
all middle-men like JDBC and providing container-managed persitence in the most performant way
possible, taking full advantage of all the features of the database.
</span></p>
<a name="You can play along"><h2>You can play along</h2></a>
<p><span class="bodyBlack">
Let's not forget, OpenEJB is open source and distributed with a business-friendly,
non-restrictive, BSD-style license. Anyone can help themselves to as much of
our code as they can stomach. You can even sell what you make from it!
</span></p>
<p><span class="bodyBlack">
Change the code as much as you want. If there is functionality you need, grab
the existing piece and edit till your heart is content. We do this very same thing
when there is functionality we need, you can too. In fact, all the containers in OpenEJB
were created using our stateless SessionBean container as a template.
</span></p>
<p><span class="bodyBlack">
If you want to be the one to write that PostgreSQL CMP EntityBean Container, just grab
our existing Castor CMP EntityBean Container and hack it up. We'll even let you use our CVS
if you want to make it available to other OpenEJB users as well.
</span></p>
<p><span class="bodyBlack">
Perhaps you want to create a CMP EntityBean container that persists beans directly to your
mainframe. Grab the code you need to get started, put a few developers on the task, then
plug it into an OpenEJB system and put it to work.
</span></p>
<p><span class="bodyBlack">
Be creative and think outside the box, invent a new EnterpriseBean type!
A NativeBean type, for example. Just create an OpenEJB EJB Container that executes
your native code according to your specification, and start writing beans in C++.
</span></p>
<p><span class="bodyBlack">
Want to distribute beans via a special distributed object protocol? Grab the Remote Server
code and change it to use another protocol, SOAP for example. Maybe you want to make
it an extention to the Remote Server or maybe you want to write it as a brand new
org.openejb.spi.ApplicationServer implementation. It's your time and your desicion.
</span></p>
<p><span class="bodyBlack">
</span></p>
</td><td align="left" valign="top" height="5" width="120"><img src="images/diagram-container-system.gif" width="240" height="300" border="0"><br>
&nbsp;
</td></tr><tr height="5"><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20">&nbsp;</td><td valign="top" bgcolor="#7270c2" height="5" width="95">&nbsp;</td><td align="left" valign="top" bgcolor="#a9a5de" height="5" width="7">&nbsp;</td><td align="left" valign="top" height="5" width="40">&nbsp;</td><td align="left" valign="top" height="5" width="120">&nbsp;</td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20">&nbsp;</td><td align="left" valign="top" bgcolor="#7270c2" width="95">&nbsp;</td><td align="left" valign="top" bgcolor="#a9a5de" width="7"><img border="0" height="25" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="40"><img border="0" height="25" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" width="120">&nbsp;</td></tr><tr height="5"><td align="left" valign="bottom" bgcolor="#7270c2" height="100%" rowspan="2" width="20"><img border="0" height="125" width="20" src="images/stripes1.gif"></td><td align="left" valign="bottom" bgcolor="#7270c2" height="100%" rowspan="2" width="95"><img border="0" height="125" width="105" src="images/stripe105.gif"></td><td align="left" valign="top" bgcolor="#a9a5de" height="100%" rowspan="2" width="7">&nbsp;</td><td align="left" valign="top" height="100%" width="40">&nbsp;</td><td align="left" valign="top" height="100%" width="120">&nbsp;</td></tr><tr height="5"><td align="left" valign="top" height="25" width="40">&nbsp;</td><td align="left" valign="bottom" height="25" width="430"><br><br><img height="3" width="430" border="0" src="images/line_light.gif"><br><p></p><span class="bodyGrey"><small><notice>
OpenEJB is a trademark of the OpenEJB Group.
Java, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered
trademarks of Sun Microsystems, Inc. in the United States and in other
countries. XML, XML Schema, XSLT and related standards are trademarks or registered
trademarks of MIT, INRIA, Keio or others, and a product of the World Wide Web
Consortium. All other product names mentioned herein are trademarks of their respective
owners.
</notice><br>&nbsp;<br></small></span><p></p>
&nbsp;
</td><td align="left" valign="top" height="25" width="120">&nbsp;</td></tr></table></body></html>