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

    <meta charset="UTF-8">
      <title>OpenEJB 3.1.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.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: June 2nd, 2009</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.1-Download"></a></p>

<h1>Download</h1>

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

<h4>OpenEJB Standlone Server</h4>

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

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

<h4>OpenEJB for Tomcat</h4>

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

<p><a name="OpenEJB3.1.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.1/openejb-examples-3.1.1.tar.gz">openejb-examples-3.1.1.tar.gz</a></li>
</ul>

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

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

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

<h4>Source Code</h4>

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

<p>([pgp|http://www.apache.org/dist/openejb/3.1.1/openejb-3.1.1-src.tar.gz.asc], [md5|http://www.apache.org/dist/openejb/3.1.1/openejb-3.1.1-src.tar.gz.md5]
) </p>

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

<h4>Release Notes</h4>

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

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

<h1>Change Summary</h1>

<p>Major new features:
  * TestCase Dependency Injection via @LocalClient
  * Support for exposing a single interface as @WebService, @Remote, and
@Local
  * Support for alternate deployment descriptors for testing and other
environments</p>

<p>Significant Improvements:</p>

<ul>
<li>Global "openejb:" jndi namespace</li>
<li>Ability to use mappedName as a JNDI Name format</li>
<li>Web service endpoints securable</li>
<li>@EjbDeployment annotation as alternative to <ejb-deployment> in
openejb-jar.xml</li>
<li>All openejb.* options and values logged on debug</li>
</ul>

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

<h1>EJB 3.1 Features</h1>

<p><a name="OpenEJB3.1.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.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, "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");

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.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.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.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.1-GeneralFeatures"></a></p>

<h1>General Features</h1>

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

<h2>EJB 3.0 Support</h2>

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

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

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

<h2>Spring Integration</h2>

<p>Add OpenEJB 3.1.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.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", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "multicast://239.255.3.2:6142");
InitialContext ctx = new InitialContext(p);
</code></pre>

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

<h2>Runs on OSGi</h2>

<p>All OpenEJB 3.1.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.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.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.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.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.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, PickupEditor.class);
    }
}
</code></pre>

<p>And referenced 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.1.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>

<p>META-INF/env-entries.properties</p>

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

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