<!DOCTYPE html>
<html lang="en">
  <head>

    <meta charset="UTF-8">
      <title>OpenEJB 3.0</title>
    <meta name="description" content="Apache TomEE">
    <meta name="author" content="Apache TomEE">
    <meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0">

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <link href="./../resources/css/bootstrap.css" rel="stylesheet">
    <link href="./../resources/css/prettify.css" rel="stylesheet">
    <!--link href="./../resources/css/bootstrap-mods.css" rel="stylesheet"-->
    <link href="./../resources/css/main.css" rel="stylesheet">
    <link href="./../resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">

    <script type="text/javascript">
        var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,""));
        var u = encodeURIComponent(""+document.URL);
    
      function fbshare () {
          window.open(
                  "http://www.facebook.com/sharer/sharer.php?u="+u,
                  'Share on Facebook',
                  'width=640,height=426');
      };
      function gpshare () {
          window.open(
                  "https://plus.google.com/share?url="+u,
                  'Share on Google+',
                  'width=584,height=385');
      };
      function twshare () {
          window.open(
                  "https://twitter.com/intent/tweet?url="+u+"&text="+t,
                  'Share on Twitter',
                  'width=800,height=526');
      };
      function pinshare () {
          window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t,
                  'Share on Pinterest',
                  'width=800,height=526');
      };
    </script>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="./../favicon.ico">
    <link rel="apple-touch-icon" href="./../resources/images/apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="72x72" href="./../resources/images/apple-touch-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="114x114" href="./../resources/images/apple-touch-icon-114x114.png">

    <script src="./../resources/js/prettify.js" type="text/javascript"></script>
    <script src="./../resources/js/jquery-latest.js"></script>
    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
    <script src="./../resources/js/common.js"></script>
    <script src="./../resources/js/prettyprint.js"></script>
    <!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//-->
    
    <script type="text/javascript">

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-2717626-1']);
      _gaq.push(['_setDomainName', 'apache.org']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();

    </script>
  </head>

  <body>

    <div class="topbar" data-dropdown="dropdown">
      <div class="fill">
        <div class="container">
          <a class="brand" href="./../index.html">Apache TomEE</a>
          <ul class="nav">
              <li class="dropdown">
                  <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                  Apache
                      <b class="caret"></b>
                  </a>
                  <ul class="dropdown-menu">
                     <!-- <li><a href="./../misc/whoweare.html">Who we are?</a></li> -->
                     <!-- <li><a href="./../misc/heritage.html">Heritage</a></li> -->
                     <li><a href="http://www.apache.org">Apache Home</a></li>
                     <!-- <li><a href="./../misc/resources.html">Resources</a></li> -->
                     <li><a href="./../misc/contact.html">Contact</a></li>
                     <li><a href="./../misc/legal.html">Legal</a></li>
                     <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                     <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
                     <li class="divider"/>
                     <li><a href="http://www.apache.org/security">Security</a></li>
                  </ul>
              </li>
              <li><a href="./../index.html">Home</a></li>
              <li><a href="./../downloads.html">Downloads</a></li>
              <li><a href="./../documentation.html">Documentation</a></li>
              <li><a href="./../examples-trunk/index.html">Examples</a></li>
              <li><a href="./../support.html">Support</a></li>
              <li><a href="./../contribute.html">Contribute</a></li>
              <li><a href="./../security/index.html">Security</a></li>
          </ul>

            <!-- Google CSE Search Box Begins  -->
            <FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search">
            </FORM>
            <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>-->
            <!-- Google CSE Search Box Ends -->
        </div>
      </div>
    </div>

    <div class="container">
    

<div class="page-header">
    <small><a href="./../index.html">Home</a>&nbsp;&raquo&nbsp;<a href="./../download/">Download</a></small><br>
    <h1>OpenEJB 3.0

        <div style="float: right; position: relative; bottom: -10px; ">
            <a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a>
            <a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a>
            <a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a>
            <a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a>
            <a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a>
        </div>
    </h1>
</div>

<ul>
<li>Release Date: April 12th, 2008</li>
<li>EJB 3.0 support</li>
<li>EJB 2.1 support</li>
<li>EJB 2.0 support</li>
<li>EJB 1.1 support</li>
</ul>

<p><a name="OpenEJB3.0-Download"></a></p>

<h1>Download</h1>

<p><a name="OpenEJB3.0-OpenEJBStandloneServer"></a></p>

<h4>OpenEJB Standlone Server</h4>

<ul>
<li><a href="http://archive.apache.org/dist/openejb/3.0/openejb-3.0.zip">openejb-3.0.zip</a>
([pgp|http://www.apache.org/dist/openejb/3.0/openejb-3.0.zip.asc], [md5|http://www.apache.org/dist/openejb/3.0/openejb-3.0.zip.md5]
) </li>
<li><a href="http://archive.apache.org/dist/openejb/3.0/openejb-3.0.tar.gz">openejb-3.0.tar.gz</a>
([pgp|http://www.apache.org/dist/openejb/3.0/openejb-3.0.tar.gz.asc], [md5|http://www.apache.org/dist/openejb/3.0/openejb-3.0.tar.gz.md5]
) </li>
</ul>

<p><a name="OpenEJB3.0-OpenEJBforTomcat"></a></p>

<h4>OpenEJB for Tomcat</h4>

<ul>
<li><a href="http://archive.apache.org/dist/openejb/3.0/openejb.war">openejb.war</a>
([pgp|http://www.apache.org/dist/openejb/3.0/openejb.war.asc], [md5|http://www.apache.org/dist/openejb/3.0/openejb.war.md5]
) </li>
</ul>

<p><a name="OpenEJB3.0-EJB3.0andotherexamples(sourceincluded)"></a></p>

<h4>EJB 3.0 and other examples (source included)</h4>

<ul>
<li><a href="http://archive.apache.org/dist/openejb/3.0/openejb-examples-3.0.tar.gz">openejb-examples-3.0.tar.gz</a></li>
</ul>

<p>([pgp|http://www.apache.org/dist/openejb/3.0/openejb-examples-3.0.tar.gz.asc], [md5|http://www.apache.org/dist/openejb/3.0/openejb-examples-3.0.tar.gz.md5]
) 
 * <a href="http://archive.apache.org/dist/openejb/3.0/openejb-examples-3.0.zip">openejb-examples-3.0.zip</a></p>

<p>([pgp|http://www.apache.org/dist/openejb/3.0/openejb-examples-3.0.zip.asc], [md5|http://www.apache.org/dist/openejb/3.0/openejb-examples-3.0.zip.md5]
) </p>

<p><a name="OpenEJB3.0-SourceCode"></a></p>

<h4>Source Code</h4>

<ul>
<li><a href="http://archive.apache.org/dist/openejb/3.0/openejb-3.0-src.zip">openejb-3.0-src.zip</a>
([pgp|http://www.apache.org/dist/openejb/3.0/openejb-3.0-src.zip.asc], [md5|http://www.apache.org/dist/openejb/3.0/openejb-3.0-src.zip.md5]
) </li>
<li><a href="http://archive.apache.org/dist/openejb/3.0/openejb-3.0-src.tar.gz">openejb-3.0-src.tar.gz</a>
([pgp|http://www.apache.org/dist/openejb/3.0/openejb-3.0-src.tar.gz.asc], [md5|http://www.apache.org/dist/openejb/3.0/openejb-3.0-src.tar.gz.md5]
) </li>
</ul>

<p><a name="OpenEJB3.0-TestedOn"></a></p>

<h1>Tested On</h1>

<table>
<tr><th> </th><th> Windows XP (JDK 1.5) </th><th> Windows XP (JDK 1.6) </th><th> Linux (JDK 1.5) </th><th>
Linux (JDK 1.6) </th><th> Mac OSX (JDK 1.5) </th><th> Mac OSX (JDK 1.6) </th></tr>
<tr><td> Embedded </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Standalone </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 6.0.14 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 6.0.13 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 6.0.10 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 6.0.9 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 5.5.26 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 5.5.25 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 5.5.23 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
<tr><td> Tomcat 5.5.20 </td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td><td><IMG class="emoticon" src="http://tomee.apache.org/resources/images/check.png" height="16" width="16" align="absmiddle" alt="" border="0"></td></tr>
</table>

<p><a name="OpenEJB3.0-ChangeSummary"></a></p>

<h1>Change Summary</h1>

<p>OpenEJB 3.0 Final includes several improvements and refinements over the
very successful 3.0 beta 2 release. Dependency injection got a major boost
with support for Java Generics and Enums.  A dozen new validations makes it
even harder to do something "wrong". JPA users will find it nearly
impossible to misconfigure the jta-data-source and non-jta-data-source.
More robust EJB references allow for circular and lazy references to ejbs
in other ears. Deep levels of annotation inheritance are completely
respected allowing for greater design control and less duplicate code.</p>

<p><a name="OpenEJB3.0-Features"></a></p>

<h1>Features</h1>

<p><a name="OpenEJB3.0-EJB3.0"></a></p>

<h2>EJB 3.0</h2>

<p>OpenEJB 3.0 supports the EJB 3.0 specification as well as the prior EJB
2.1, EJB 2.0, and EJB 1.1.  New features in EJB 3.0 include:</p>

<ul>
<li>Annotations instead of xml</li>
<li>No home interfaces</li>
<li>Business Interfaces</li>
<li>Dependency Injection</li>
<li>Interceptors</li>
<li>Java Persistence API</li>
<li>Service Locator (ala SessionContext.lookup)</li>
<li>POJO-style beans</li>
<li>JAX-WS Web Services</li>
</ul>

<p>EJB 2.x features since OpenEJB 1.0 also include:
 - MessageDriven Beans
 - Container-Managed Persistence (CMP) 2.0
 - Timers</p>

<p>The two aspects of EJB that OpenEJB does not yet support are:
  - JAX-RPC
  - CORBA</p>

<p>CORBA support will be added in future releases.  Support for the JAX-RPC
API is not a planned feature.</p>

<p><a name="OpenEJB3.0-EmbeddableforTestingandJavaSEusage"></a></p>

<h2>Embeddable for Testing and Java SE usage</h2>

<p>Over the years, OpenEJB has innovated the art of the embedded/Java SE EJB
container usable as a plain library much the way an embedded databases
work.  In a simple 1, 2, 3 step of 1) add OpenEJB to your classpath, 2) add
a META-INF/ejb-jar.xml containing at minimum "<ejb-jar/>", then 3) use the
org.apache.openejb.client.LocalInitialContextFactory when creating your
client InitialContext, you've got a Java SE EJB container that can be used
in unit tests, your IDE, or anyway you'd like to drop in EJB functionality.
 Configuration can be done through an openejb.xml file or can be
encapsulated 100% in the test case through the parameters passed to the
InitialContext.  For example, to create a JTA DataSource for JPA usage, you
can simply:</p>

<pre><code>Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
</code></pre>

<p>"org.apache.openejb.client.LocalInitialContextFactory");
    p.put("movieDatabase", "new://Resource?type=DataSource");
    p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
    p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");</p>

<pre><code>Context context = new InitialContext(p);
</code></pre>

<p>See the examples zip for a dozen embedded testing examples that range from
simple @Stateless beans to advanced transaction and security testing.</p>

<p><a name="OpenEJB3.0-EJBPluginforTomcat6and5.5"></a></p>

<h2>EJB Plugin for Tomcat 6 and 5.5</h2>

<p>OpenEJB 3.0 can be <a href="openejbx30:tomcat.html">plugged into</a>
 any Tomcat 6 or Tomcat 5.5 server, adding support for EJBs in Web Apps. 
War files themselves can contain EJBs and the Servlets can use new JavaEE 5
annotations, XA transactions, JPA, and JMS.  Webapps can even support fat
java clients connecting over HTTP.</p>

<p>Don't use EJBs?  </p>

<p>No matter, adding OpenEJB to Tomcat gives Servlets several new Java EE 5
capabilities such as JPA, JAX-WS, JMS, J2EE Connectors, transactions, and
more as well as enhancing the injection features of Tomcat 6 to now support
injection of JavaEE objects like Topics, Queues, EntityManagers, JMS
ConnectionFactories, JavaMail Sessions, as well as simpler data types such
as Dates, Classes, URI, URL, List, Map, Set, Properties, and more. In the
case of Tomcat 5.5 which doesn't support dependency injection at all, even
more is gained.</p>

<p><a name="OpenEJB3.0-CollapsedEAR(EJBsin.WARs)"></a></p>

<h2>Collapsed EAR (EJBs in .WARs)</h2>

<p>Along the lines of the Tomcat integration where OpenEJB can be plugged into
Tomcat, we've expanded the idea to also allow your EJBs to be plugged into
your webapp.  We call this innovative feature <a href="collapsed-ear.html">Collapsed EAR</a>
.  In this style 100% of your classes, including your EJBs, can be packed
into your WEB-INF/classes and WEB-INF/lib directories.  The result is that
your WAR file becomes a replacement for an EAR.  Unlike an EAR, all
multi-packaging and multi-classloader requirements are stripped away and
collapsed down to one archive and one classloader all your components, EJBs
or otherwise, can share.</p>

<p><a name="OpenEJB3.0-RunsonOSGi"></a></p>

<h2>Runs on OSGi</h2>

<p>All OpenEJB 3.0 binaries come with complete OSGi metadata and are usable as
a bundle in any OSGi platform.  Look for OpenEJB in the upcoming,
OSGi-based ServiceMix 4 which is built on Apache Felix.</p>

<p><a name="OpenEJB3.0-CMPviaJPA"></a></p>

<h2>CMP via JPA</h2>

<p>Our CMP implementation is a thin layer over the new Java Persistence API
(JPA).  This means when you deploy an old style CMP 1.1 or CMP 2.1 bean it
is internally converted and ran as a JPA bean.  This makes it possible to
use both CMP and JPA in the same application without any coherence issues
that can come from using two competing persistence technologies against the
same data.  Everything is ultimately JPA in the end.</p>

<p><a name="OpenEJB3.0-DependencyInjection--Enums,Classes,Dates,Files,ohmy."></a></p>

<h2>Dependency Injection -- Enums, Classes, Dates, Files, oh my.</h2>

<p>Dependency Injection in EJB 3.0 via @Resource is largely limited to objects
provided by the container, such as DataSources, JMS Topics and Queues.  It
is possible for you to supply your own configuration information for
injection, but standard rules allow for only data of type String,
Character, Boolean, Integer, Short, Long, Double, Float and Byte.  If you
needed a URL, for example, you'd have to have it injected as a String then
convert it yourself to a URL.  This is just plain silly as the conversion
of Strings to other basic data types has existed in JavaBeans long before
Enterprise JavaBeans existed.  </p>

<p>OpenEJB 3.0 supports injection of any data type for which you can supply a
JavaBeans PropertyEditor.  We include several built-in PropertyEditors
already such as Date, InetAddress, Class, File, URL, URI, Map, List, any
java.lang.Enum and more.</p>

<pre><code>import java.net.URI;
import java.io.File;
import java.util.Date;

@Stateful 
public class MyBean {
    @Resource URI blog;
    @Resource Date birthday;
    @Resource File homeDirectory;
}
</code></pre>

<p><a name="OpenEJB3.0-DependencyInjection--GenericCollectionsandMaps"></a></p>

<h2>Dependency Injection -- Generic Collections and Maps</h2>

<p>Support for Java Generics makes the dependency injection that much more
powerful.  Declare an injectable field that leverages Java Generics and we
will use that information to boost your injection to the next level.  For
example:</p>

<pre><code>import java.net.URI;
import java.io.File;

@Stateful 
public class MyBean {
    @Resource List&lt;Class&gt; factories;
    @Resource Map&lt;URI, File&gt; locations;
}
</code></pre>

<p><a name="OpenEJB3.0-DependencyInjection--CustomTypes"></a></p>

<h2>Dependency Injection -- Custom Types</h2>

<p>You can easily add your own types or override the way built-in types are
handled and claim dependency injection as your own making it a critical
part of your architecture.  For example, let's register a custom editor for
our Pickup enum.</p>

<pre><code>import java.beans.PropertyEditorManager;

public enum Pickup {

    HUMBUCKER,
    SINGLE_COIL;

    // Here's the little magic where we register the PickupEditor
    // which knows how to create this object from a string.
    // You can add any of your own Property Editors in the same way.
    static {
        PropertyEditorManager.registerEditor(Pickup.class, PickupEditor.class);
    }
}
</code></pre>

<p>Reference as follows</p>

<pre><code>@Stateful
public class StratocasterImpl implements Stratocaster {

    @Resource(name = "pickups")
    private List&lt;Pickup&gt; pickups;
}
</code></pre>

<p><a name="OpenEJB3.0-TheMETA-INF/env-entries.properties"></a></p>

<h2>The META-INF/env-entries.properties</h2>

<p>Along the lines of injection, one of the last remaining things in EJB 3
that people need an ejb-jar.xml file for is to supply the value of
env-entries.  Env Entries are the source of data for all user supplied data
injected into your bean; the afore mentioned String, Boolean, Integer, etc.
 This is a very big burden as each env-entry is going to cost you 5 lines
of xml and the complication of having to figure out how to add you bean
declaration in xml as an override of an existing bean and not accidentally
as a new bean.  All this can be very painful when all you want is to supply
the value of a few @Resource String fields in you bean class.  </p>

<p>To fix this, OpenEJB supports the idea of a META-INF/env-entries.properties
file where we will look for the value of things that need injection that
are not container controlled resources (i.e. datasources and things of that
nature).  You can configure you ejbs via a properties file and skip the
need for an ejb-jar.xml and it's 5 lines per property madness.</p>

<pre><code>blog = http://acme.org/myblog
birthday = 1954-03-01
homeDirectory = /home/esmith/
</code></pre>

<p><a name="OpenEJB3.0-SupportforGlassFishdescriptors"></a></p>

<h2>Support for GlassFish descriptors</h2>

<p>Unit testing EJBs with OpenEJB is a major feature and draw for people, even
for people who may still use other app servers for final deployment such as
Geronimo or GlassFish.  The descriptor format for Geronimo is natively
understood by OpenEJB as OpenEJB is the EJB Container provider for
Geronimo.  However, OpenEJB also supports the GlassFish descriptors so
people using GlassFish as their final server can still use OpenEJB for
testing EJBs via plain JUnit tests in their build and only have one set of
vendor descriptors to maintain.</p>

<p><a name="OpenEJB3.0-JavaEE5EARandApplicationClientsupport"></a></p>

<h2>JavaEE 5 EAR and Application Client support</h2>

<p>JavaEE 5 EARs, RARs, and Application Clients can be deployed in addition to
ejb jars.  EAR support is limited to ejbs, application clients, RARs, and
libraries; WAR files will be ignored unless embedded in Tomcat.   Per the
JavaEE 5 spec, the META-INF/application.xml and
META-INF/application-client.xml files are optional.</p>

<p><a name="OpenEJB3.0-ApplicationValidationforEJB3.0"></a></p>

<h2>Application Validation for EJB 3.0</h2>

<p>Incorrect usage of various new aspects of EJB 3.0 are checked for and
reported during the deployment process preventing strange errors and
failures.  </p>

<p>As usual validation failures (non-compliant issues with your application)
are printed out in complier-style "all-at-once" output allowing you to see
and fix all your issues in one go.  For example, if you have 10
@PersistenceContext annotations that reference an invalid persistence unit,
you get all 10 errors on the <em>first</em> deploy rather than one failure on the
first deploy with 9 more failed deployments to go.</p>

<p>Validation output comes in three levels.  The most verbose level will tell
you in detail what you did wrong, what the options are, and what to do
next... even including valid code and annotation usage tailored to your app
that you can copy and paste into your application.  Very ideal for
beginners and people using OpenEJB in a classroom setting.</p>

<p>Some example output might look like the following.  Here we illegally add
some annotations to the "Movies" bean's interface as well as use the wrong
annotations for various types of injection:</p>

<pre><code>FAIL ... Movies:  @Stateful cannot be applied to an interface: org.superbiz.injection.jpa.Movies
FAIL ... Movies:  Missing required "type" attribute on class-level @Resource usage
FAIL ... Movies:  Mistaken use of @Resource on an EntityManagerFactory reference.
                  Use @PersistenceUnit for ref "org.superbiz.injection.jpa.MoviesImpl/entityManagerFactory"
FAIL ... Movies:  Mistaken use of @PersistenceUnit on an EntityManager reference.
                  Use @PersistenceContext for ref "org.superbiz.injection.jpa.MoviesImpl/entityManager"
WARN ... Movies:  Inoring @RolesAllowed used on interface org.superbiz.injection.jpa.Movies method deleteMovie.
                  Annotation only usable on the bean class.
WARN ... Movies:  Ignoring @TransactionAttribute used on interface org.superbiz.injection.jpa.Movies method addMovie.
                  Annotation only usable on the bean class.
</code></pre>

<h2>JNDI Name Formatting</h2>

<p>A complication when using EJB is that plain client applications are at the
mercy of vendor's chosen methodology for how JNDI names should be
constructed.  OpenEJB breaks the mold by allowing you to [specify the exact format|OPENEJBx30:JNDI Names]
 you'd like OpenEJB to use for your server or any individual application. 
Supply us with a formatting string, such as
"ejb/{ejbName}/{interfaceClass.simpleName}", to get a JNDI layout that
best matches your needs.</p>

<h1>Changelog</h1>

<pre><code>{swizzlejira}
#set ( $jira =
</code></pre>

<p>$rss.fetch("http://issues.apache.org/jira/secure/IssueNavigator.jspa?view=rss&amp;&amp;pid=12310530&amp;status=5&amp;status=6&amp;fixfor=12312805&amp;tempMax=1000&amp;reset=true&amp;decorator=none")
)
    #set( $issues = $jira.issues )</p>

<h3>New Features:</h3>

<pre><code>{swizzlejiraissues:issues=$as.param($issues.equals("type", "New
</code></pre>

<p>Feature").descending("id"))|columns=key;summary}</p>

<h3>Improvements:</h3>

<pre><code>{swizzlejiraissues:issues=$as.param($issues.equals("type",
</code></pre>

<p>"Improvement"))|columns=key;summary}</p>

<h3>Tasks &amp; Sub-Tasks:</h3>

<pre><code>{swizzlejiraissues:issues=$as.param($issues.matches("type",
</code></pre>

<p>"Task|Sub-task").sort("summary"))|columns=key;summary}</p>

<pre><code>{swizzlejira}
</code></pre>




        <div id="edit" class="modal hide fade in" style="display: none; ">
            <div class="modal-header">
                <a class="close" data-dismiss="modal">x</a>

                <h3>Thank you for contributing to the documentation!</h3>
            </div>
            <div class="modal-body">
                <h4>Any help with the documentation is greatly appreciated.</h4>
                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
                <!--[if gt IE 6]>
                <h4>Internet Explorer Users</h4>
                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
                <![endif]-->

            </div>
            <div class="modal-footer">
                Do you have an Apache ID?
                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
            </div>
        </div>
        <script src="./../resources/js/bootstrap-modal.js"></script>

        <footer>
            <p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
                Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation.
                All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
        </footer>

    </div> <!-- /container -->

    <!-- Javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="./../resources/js/bootstrap-dropdown.js"></script>

  </body>
</html>
