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

    <meta charset="UTF-8">
      <title>OpenEJB 3.0 beta 2</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 beta 2

        <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: January 31st, 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.0beta2-Download"></a></p>

<h1>Download</h1>

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

<h4>OpenEJB Standlone Server</h4>

<ul>
<li><a href="http://archive.apache.org/dist/openejb/3.0-beta-2/openejb-3.0-beta-2.zip">openejb-3.0-beta-2.zip</a></li>
</ul>

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

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

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

<h4>OpenEJB for Tomcat</h4>

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

<p><a name="OpenEJB3.0beta2-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-beta-2/openejb-examples-3.0-beta-2.tar.gz">openejb-examples-3.0-beta-2.tar.gz</a></li>
</ul>

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

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

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

<h4>Source Code</h4>

<ul>
<li><a href="http://archive.apache.org/dist/openejb/3.0-beta-2/openejb-3.0-beta-2-src.zip">openejb-3.0-beta-2-src.zip</a></li>
</ul>

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

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

<p><a name="OpenEJB3.0beta2-NewFeaturesinbeta-2"></a></p>

<h1>New Features in beta-2</h1>

<ul>
<li>JAX-RPC Support</li>
<li>Tomcat 5.5 Support</li>
</ul>

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

<h1>Features</h1>

<p><a name="OpenEJB3.0beta2-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>Intercpetors</li>
<li>Java Persistence API</li>
<li>Service Locator (ala SessionContext.lookup)</li>
<li>POJO-style beans</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:
  - Web Services (JAX-WS, JAX-RPC)
  - CORBA</p>

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

<p><a name="OpenEJB3.0beta2-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><a name="OpenEJB3.0beta2-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.0beta2-ExtendedDependencyInjection"></a></p>

<h2>Extended Dependency Injection</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 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.0beta2-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 = locale=en_US style=MEDIUM Mar 1, 1954
homeDirectory = /home/esmith/
</code></pre>

<p><a name="OpenEJB3.0beta2-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.0beta2-JavaEE5EARandApplicationClientsupport"></a></p>

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

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

<p><a name="OpenEJB3.0beta2-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><a name="OpenEJB3.0beta2-JNDINameFormatting"></a></p>

<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 <a href="openejbx30:jndi-names.html">specify the exact format</a>
 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>

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

<h1>Changelog<div class="swizzlejira">}</h1>

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

<p><a name="OpenEJB3.0beta2-NewFeatures:"></a></p>

<h3>New Features:</h3>

<p><div class="swizzlejiraissues">:issues=$as.param($issues.equals("type", "New
Feature").descending("id"))|columns=key;summary}</p>

<p><a name="OpenEJB3.0beta2-Improvements:"></a></p>

<h3>Improvements:</h3>

<p><div class="swizzlejiraissues">:issues=$as.param($issues.equals("type",
"Improvement"))|columns=key;summary}</p>

<p><a name="OpenEJB3.0beta2-Tasks&amp;Sub-Tasks:"></a></p>

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

<p><div class="swizzlejiraissues">:issues=$as.param($issues.matches("type",
"Task|Sub-task").sort("summary"))|columns=key;summary}</p>

<p><div class="swizzlejira">}</p>




        <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>
