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

    <meta charset="UTF-8">
      <title>OpenEJB 3.1</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.1

        <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: October 22nd, 2008</li>
<li>Partial EJB 3.1 support</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.1-Download"></a></p>

<h1>Download</h1>

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

<h4>OpenEJB Standlone Server</h4>

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

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

<h4>OpenEJB for Tomcat</h4>

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

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

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

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

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

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

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

<h4>Source Code</h4>

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

<p><a name="OpenEJB3.1-ReleaseNotes"></a></p>

<h4>Release Notes</h4>

<ul>
<li><a href="http://www.apache.org/dist/openejb/3.1/RELEASE-NOTES.txt">RELEASE-NOTES.txt</a></li>
</ul>

<p><a name="OpenEJB3.1-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.1-ChangeSummary"></a></p>

<h1>Change Summary</h1>

<p>Major new features:
  - <a href="openejb-3.1#ejb3.1singletons.html">EJB 3.1 Singleton Support</a>
  - <a href="openejb-3.1#constructorinjection%28proposedejb3.1feature%29.html">EJB Constructor Injection</a>
  - <a href="openejb-3.1#springintegration.html">Spring Integration</a>
  - <a href="openejb-3.1#multicastdiscovery.html">Multicast Client-Server Discovery</a></p>

<p>Significant Improvements:
  - EAR-style classpath application discovery groups individual modules as
an EAR allowing sharing of persistence units and improved connector and
custom MDB deployment.
  - Detection of EclipseLink, TopLink, and Hibernate as JPA providers to
automatically adds the right persistence unit property to for wiring in the
OpenEJB TransactionManager.
  - System Property and InitialContext property overriding now applies to
persistence-unit properties and logging levels.
  - Login/logout now possible in an embedded scenario via InitialContext
params and initialContext.close() respectively.
  - Complete overhaul of all client/server connection management
dramatically increases performance.
  - Several new checks added to Application Validation ruleset, some
reworked to give even more details.</p>

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

<h1>EJB 3.1 Features</h1>

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

<h2>EJB 3.1 Singletons</h2>

<p>Singletons are a new type of Session bean being added to the EJB 3.1
specification.  As the name implies a javax.ejb.Singleton is a session bean
with a guarantee that there is at most one instance in the application.</p>

<p>Singletons gives you some important things that are missing in EJB 3.0 and
prior versions, such as the ability to have an EJB that is notified when
the application starts and notified when the application stops, allowing
you to do all sorts of things that previously could only be done with a
load-on-startup servlet.  Singletons also give provide a great place to
hold data that pertains to the entire application and all users using it,
without the need for a static.  Additionally, Singleton beans have
multi-threaded capabilities allowing them to be invoked by several threads
at one time similar to a Servlet.</p>

<p>See the <a href="openejbx30:singleton-beans.html">Singleton API</a>
 and [Singleton Example]
 pages.</p>

<p><a name="OpenEJB3.1-EmbeddableforTestingandJavaSEusage(proposedEJB3.1feature)"></a></p>

<h2>Embeddable for Testing and Java SE usage (proposed EJB 3.1 feature)</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 anywhere 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.1-CollapsedEAR(EJBsin.WARs)(proposedEJB3.1feature)"></a></p>

<h2>Collapsed EAR (EJBs in .WARs) (proposed EJB 3.1 feature)</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.1-ConstructorInjection(proposedEJB3.1feature)"></a></p>

<h2>Constructor Injection (proposed EJB 3.1 feature)</h2>

<p>For those of you who would like to use final fields, wish to avoid numerous
setters, or dislike private field injection and would like nothing more
than to just use plan old java constructors, your wish has come true.  This
is a feature we intended to add to OpenEJB 3.0 but didn't have time for. 
We're happy to bring it to the OpenEJB 3.1 release and with a bit of luck
and support from people like yourself, we'll see this as an EJB 3.1 feature
as well.</p>

<pre><code>@Stateless
public class WidgetBean implements Widget {

    @EJB(beanName = "FooBean")
    private final Foo foo;

    @Resource(name = "count")
    private final int count;

    @Resource
    private final DataSource ds;

    public WidgetBean(Integer count, Foo foo, DataSource ds) {
    this.count = count;
    this.foo = foo;
    this.ds = ds;
    }

    public int getCount() {
    return count;
    }

    public Foo getFoo() {
    return foo;
    }
}
</code></pre>

<p><a name="OpenEJB3.1-GeneralFeatures"></a></p>

<h1>General Features</h1>

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

<h2>EJB 3.0 Support</h2>

<p>OpenEJB 3.1 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.1-EJBPluginforTomcat6and5.5"></a></p>

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

<p>OpenEJB 3.1 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.1-SpringIntegration"></a></p>

<h2>Spring Integration</h2>

<p>Add OpenEJB 3.1 to your Spring application to gain the ability for EJBs to
be easily injected into Spring beans (and vice versa) and add Java EE 5
capabilities such as JPA, JAX-WS, JMS, J2EE Connectors, transactions, and
security.</p>

<p>See the <a href="openejbx30:spring.html">Spring</a>
 page and [Spring Example|OPENEJBx30:Spring EJB and JPA]
 for an example.</p>

<p><a name="OpenEJB3.1-MulticastDiscovery"></a></p>

<h2>Multicast Discovery</h2>

<p>Add the <a href="http://people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/openejb/openejb-multicast/3.1/openejb-multicast-3.1.jar">openejb-multicast.jar</a>
 to your OpenEJB distributions lib/ directory and gain the ability to use
multicast discovery between clients and serves as well as between servers
allowing for request failover to other discovered servers.  Clients can
discover and access servers with a new "multicast://239.255.3.2:6142" url
as follows:</p>

<pre><code>Properties p = new Properties();
p.put("java.naming.factory.initial",
</code></pre>

<p>"org.apache.openejb.client.RemoteInitialContextFactory");
    p.put("java.naming.provider.url", "multicast://239.255.3.2:6142");
    InitialContext ctx = new InitialContext(p);</p>

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

<h2>Runs on OSGi</h2>

<p>All OpenEJB 3.1 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.1-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.1-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.1 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.1-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.1-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,
</code></pre>

<p>PickupEditor.class);
        }
    }</p>

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

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

<p><a name="OpenEJB3.1-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.1-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.1-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.1-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=12312761&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>
