| <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Technical Overview</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> <a href="http://wiki.codehaus.org/openejb"><span class="menuTopOff">[ w i k i ]</span></a> <a href="http://archive.openejb.codehaus.org/user/"><span class="menuTopOff">[ l i s t s ]</span></a> <a href="http://cvs.openejb.org/"><span class="menuTopOff">[ c v s ]</span></a> <a href="http://jira.codehaus.org/secure/BrowseProject.jspa?id=10401"><span class="menuTopOff">[ b u g s ]</span></a> <br><img border="0" height="2" width="1" src="images/dotTrans.gif"></td><td align="left" valign="top" height="20" width="120"> </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"> |
| Welcome!</span></a></td></tr><tr><td align="left" valign="top"><a href="download.html"><span class="subMenuOff"> |
| Download</span></a></td></tr><tr><td align="left" valign="top"><a href="lists.html"><span class="subMenuOff"> |
| Mailing Lists</span></a></td></tr><tr><td align="left" valign="top"><a href="cvs.html"><span class="subMenuOff"> |
| Source Code</span></a></td></tr><tr><td align="left" valign="top"><a href="contributors.html"><span class="subMenuOff"> |
| The Team</span></a></td></tr><tr><td align="left" valign="top"><a href="status.html"><span class="subMenuOff"> |
| 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"> |
| Quickstart</span></a></td></tr><tr><td align="left" valign="top"><a href="hello-world.html"><span class="subMenuOff"> |
| Hello World!</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_entity_postgresql.html"><span class="subMenuOff"> |
| CMP Example</span></a></td></tr><tr><td align="left" valign="top"><a href="cmp_guide.html"><span class="subMenuOff"> |
| CMP Guide</span></a></td></tr><tr><td align="left" valign="top"><a href="deploy.html"><span class="subMenuOff"> |
| Deploy</span></a></td></tr><tr><td align="left" valign="top"><a href="start-command.html"><span class="subMenuOff"> |
| Startup</span></a></td></tr><tr><td align="left" valign="top"><a href="validate.html"><span class="subMenuOff"> |
| Validation</span></a></td></tr><tr><td align="left" valign="top"><a href="config_containers.html"><span class="subMenuOff"> |
| Configuration</span></a></td></tr><tr><td align="left" valign="top"><a href="properties.html"><span class="subMenuOff"> |
| 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"> |
| Local Server</span></a></td></tr><tr><td align="left" valign="top"><a href="remote-server.html"><span class="subMenuOff"> |
| Remote Server</span></a></td></tr><tr><td align="left" valign="top"><a href="tomcat.html"><span class="subMenuOff"> |
| Tomcat</span></a></td></tr><tr><td align="left" valign="top"><a href="geronimo.html"><span class="subMenuOff"> |
| 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"> |
| Why OpenEJB</span></a></td></tr><tr><td align="left" valign="top"><a href="containersystem.html"><span class="subMenuOff"> |
| Overview</span></a></td></tr><tr><td align="left" valign="top"><a href="design_openejb.html"><span class="subMenuOff"> |
| Design</span></a></td></tr><tr><td align="left" valign="top"><a href="OpenEJB_presentaion.ppt"><span class="subMenuOff"> |
| 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"> </td><td align="left" valign="top" width="40"> </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">Technical Overview</span><br><img src="images/dotTrans.gif" hspace="0" height="1" border="0"></td></tr></table><p></p><p></p><br><span class="toc"><a href="#Overview">Overview</a><br></span><span class="toc"><a href="#Container-Server Contract">Container-Server Contract</a><br></span><span class="toc"><a href="#Application Server's Role">Application Server's Role</a><br></span><span class="toc"><a href="#Container's Role">Container's Role</a><br></span><span class="toc"><a href="#OpenEJB Architecture">OpenEJB Architecture</a><br></span><span class="toc"><a href="#Containers">Containers</a><br></span><span class="toc"><a href="#Primary Services">Primary Services</a><br></span><span class="toc"><a href="#IntraVM Server">IntraVM Server</a><br></span><br><a name="Overview"><h2>Overview</h2></a> |
| |
| <p><span class="bodyBlack"> |
| The Enterprise JavaBeans (EJB) architecture is a component architecture |
| for the development and deployment of component-based distributed business |
| applications. Applications written using the Enterprise JavaBeans architecture |
| are scalable, transactional, and multi-user secure. OpenEJB is an Open Source |
| implementation of version 1.1 of the EJB specification, which supports both |
| session and entity beans in addition to an enhanced security model. |
| |
| |
| </span></p> |
| |
| <a name="Container-Server Contract"><h2>Container-Server Contract</h2></a> |
| |
| <p><span class="bodyBlack"> |
| OpenEJB is a pre-built, self-contained, portable EJB container system that can |
| be plugged into any application server environment. OpenEJB provides a clear |
| separation of responsibilities between the EJB container and the EJB server. |
| The application server and OpenEJB container system interact through an open |
| programming interface, which forms the container-server contact. This contract |
| is defined by the Container Provider Interface (CPI), which is a small and |
| simple set of classes and interfaces. |
| </span></p> |
| |
| <a name="Application Server's Role"><h2>Application Server's Role</h2></a> |
| |
| |
| <p><span class="bodyBlack"> |
| Application servers that use OpenEJB are responsible for providing client applications |
| with naming and remote access to the application server. Its services may include |
| providing JNDI and proxy implementations that fulfill the client-server contract of the |
| EJB programming model. In application servers that use OpenEJB locally, such as a |
| Servlet Container, OpenEJB already provides the necessary JNDI and proxy |
| implementations. When a client makes a request on a remote bean reference, the |
| application server delivers the request to the OpenEJB container system, which delegates |
| the request to the appropriate enterprise bean and applies the transaction, security, and |
| persistence services appropriately. |
| </span></p> |
| |
| <a name="Container's Role"><h2>Container's Role</h2></a> |
| |
| <p><span class="bodyBlack"> |
| OpenEJB manages the enterprise bean's lifecycle and coordinates the application |
| of transactions (local or distributed), persistence, and security as defined by |
| the EJB specification. To manage these tasks in a way that is flexible and |
| customizable, OpenEJB also enforces a separation of these responsibilities into |
| separate services. OpenEJB provides a Service Provider Interface (SPI) for |
| transaction, persistence, and security services. These simple and flexible |
| container-service contracts are based on simple adapters and industry standards |
| like JTS and JAAS. |
| </span></p> |
| |
| <a name="OpenEJB Architecture"><h2>OpenEJB Architecture</h2></a> |
| |
| <p><span class="bodyBlack"> |
| OpenEJB is the first EJB container system that allows developers of an EJB |
| platform to assemble it from existing products rather than construct it from |
| scratch. Vendors focus on what they do best while OpenEJB provides the container |
| to host Enterprise JavaBeans. When plugged into any Java compatible application |
| server, the result is a complete, yet modular Enterprise JavaBeans container |
| system. Through the CPI, an application server vendor can use the OpenEJB container |
| system to obtain an instant and customizable EJB 1.1 platform. Through the SPI, |
| primary services may be interchanged to match any target environment's specific |
| requirements. |
| |
| </span></p> |
| |
| <a name="Containers"><h2>Containers</h2></a> |
| |
| <p><span class="bodyBlack"> |
| The OpenEJB container system provides four robust container types, including stateless |
| and stateful session-bean containers as well as Bean-Managed (BMP) and Container-Managed |
| (CMP) entity-bean containers. These containers are strictly compliant with the EJB 1.1 |
| specification, and provide the full complement of security and transaction behaviors to |
| beans. The OpenEJB containers are very lightweight because they multiplex requests |
| concurrently, requiring less overhead to service more beans. The containers are also |
| extremely fast because they introduce virtually no bottlenecks to service requests, |
| allowing a high volume of requests to execute within the container system simultaneously. |
| </span></p> |
| |
| <a name="Primary Services"><h2>Primary Services</h2></a> |
| |
| <p><span class="bodyBlack"> |
| OpenEJB defines four primary services: transaction, security, persistence, and assembly. |
| The first three are used continually at runtime by the container system. The last is |
| used only at startup to assemble the container system. The containers use the |
| transaction, security, and persistence services while servicing beans and performing |
| other responsibilities: the transaction service provides the container with |
| transactional integrity; the security service provides authorization control; the |
| persistence service provides an API for container-managed persistence of entity beans. |
| </span></p> |
| |
| <a name="IntraVM Server"><h2>IntraVM Server</h2></a> |
| |
| <p><span class="bodyBlack"> |
| OpenEJB includes an IntraVM server that allows for swift interaction among beans in the |
| same virtual machine. While respecting the remote semantics required by EJB, optimizations |
| in method calls from one bean to another provide for very fast throughput and little or |
| no latency. The IntraVM provides an immediately available platform for application servers |
| that do not need to support client access through distributed objects. For example, an |
| existing Servlet Container can use the IntraVM server to integrate the OpenEJB container |
| system with very little effort. |
| </span></p> |
| </td><td align="left" valign="top" height="5" width="120"> |
| |
| |
| |
| </td></tr><tr height="5"><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20"> </td><td valign="top" bgcolor="#7270c2" height="5" width="95"> </td><td align="left" valign="top" bgcolor="#a9a5de" height="5" width="7"> </td><td align="left" valign="top" height="5" width="40"> </td><td align="left" valign="top" height="5" width="120"> </td></tr><tr><td align="left" valign="top" bgcolor="#7270c2" height="5" width="20"> </td><td align="left" valign="top" bgcolor="#7270c2" width="95"> </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"> </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"> </td><td align="left" valign="top" height="100%" width="40"> </td><td align="left" valign="top" height="100%" width="120"> </td></tr><tr height="5"><td align="left" valign="top" height="25" width="40"> </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> <br></small></span><p></p> |
| |
| </td><td align="left" valign="top" height="25" width="120"> </td></tr></table></body></html> |