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

    <meta charset="UTF-8">
      <title>Tomcat JPA</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></small><br>
    <h1>Tomcat JPA

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

<p>Tomcat + Java EE = TomEE, the Java Enterprise Edition of Tomcat.  With TomEE you get Tomcat with JPA added and integrated and ready to go!</p>

<p>In a plain Servlet, Filter or Listener you can do fun things like injection of JPA EntityManager or EntityManagerFactory:</p>

<pre><code>import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.servlet.http.HttpServlet;
import javax.transaction.UserTransaction;

public class MyServet extends HttpServlet {

    @Resource
    private UserTransaction userTransaction;

    @PersistenceContext
    private EntityManager entityManager;


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //...

        userTransaction.begin();

        try {
            entityManager.persist(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
            entityManager.persist(new Movie("Joel Coen", "Fargo", 1996));
            entityManager.persist(new Movie("Joel Coen", "The Big Lebowski", 1998));
        } finally {
            userTransaction.commit();
        }

        //...
    }

}
</code></pre>

<p>No need to add even a single library!  To make the above work all you need is a <code>WEB-INF/persistence.xml</code> file in your webapp like the following:</p>

<pre><code>&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"&gt;

  &lt;persistence-unit name="movie-unit"&gt;
    &lt;jta-data-source&gt;movieDatabase&lt;/jta-data-source&gt;
    &lt;non-jta-data-source&gt;movieDatabaseUnmanaged&lt;/non-jta-data-source&gt;

    &lt;properties&gt;
      &lt;property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/&gt;
    &lt;/properties&gt;
  &lt;/persistence-unit&gt;
&lt;/persistence&gt;
</code></pre>

<p>DataSources will automatically be created if they haven't be configured explicitly.</p>

<p><a href="downloads.html">Download</a> TomEE and you're minutes away from a functioning JPA application on Tomcat.</p>

<p>Apache TomEE, pronounced "Tommy", is an all-Apache Java EE 6 Web Profile certified stack where Apache Tomcat is top dog. Apache TomEE is assembled from a vanilla Apache Tomcat zip file. We start with Apache Tomcat, add our jars and zip up the rest. The result is Tomcat with added EE features - TomEE.</p>

<p><a class="btn primary large" href="downloads.html">Download Apache TomEE Now &raquo;</a>&nbsp; and <a href="documentation.html">get started today!</a></p>

<h2>TomEE</h2>

<p><div class="row"><div class="span6"></p>

<p>The Web Profile version of TomEE contains</p>

<ul>
<li><strong>CDI</strong> - Apache OpenWebBeans</li>
<li><strong>EJB</strong> - Apache OpenEJB</li>
<li><strong>JPA</strong> - Apache OpenJPA</li>
<li><strong>JSF</strong> - Apache MyFaces</li>
<li><strong>JSP</strong> - Apache Tomcat</li>
<li><strong>JSTL</strong> - Apache Tomcat</li>
<li><strong>JTA</strong> - Apache Geronimo Transaction</li>
<li><strong>Servlet</strong> - Apache Tomcat</li>
<li><strong>Javamail</strong> - Apache Geronimo JavaMail</li>
<li><strong>Bean Validation</strong> - Apache BVal</li>
</ul>

<h2>TomEE+</h2>

<p>The TomEE Plus distribution adds the following:</p>

<ul>
<li><strong>JAX-RS</strong> - Apache CXF</li>
<li><strong>JAX-WS</strong> - Apache CXF</li>
<li><strong>JMS</strong> - Apache ActiveMQ</li>
<li><strong>Connector</strong> - Apache Geronimo Connector
</div></li>
</ul>

<div class="span5" style="float:right; width:350px" width="350px">
    <img src="resources/images/microprofile.png" alt="Microprofile" style="float:left; margin-right:5px;">
    <p style="font-size:13px;line-height:18px;">Microprofile is an open forum to optimize Enterprise Java for a microservices architecture by innovating across multiple implementations and collaborating on common areas of interest with a goal of standardization. TomEE is actively participating in this effort, and would welcome help from the community in moving this process forward.</p>
    <p><a class="btn primary"target="_blank" href="http://microprofile.io/">Find out more</a></p>
</div>

<div class="span5" style="float:right; width:350px" width="350px">
    <img src="resources/images/Geek-Choice-Awards-App-Server-100x100-black.png" alt="Geeks Choice Award" style="float:left; margin-right:5px">
    <p style="font-size:13px;line-height:18px;">RebelLabs released an annual study with awards to recognize Geeky Excellence for 2014. Tomcat and TomEE were named as one of the 10 Geek Choice Awards winner. For a complete list of winners, check out the report <a target="_blank" href="http://zeroturnaround.com/rebellabs/10-kick-ass-technologies-modern-developers-love/">"10 Kick-Ass Technologies Modern Developers Love"</a>.</p>
    <p><a class="btn primary"target="_blank" href="http://zeroturnaround.com/rebellabs/10-kick-ass-technologies-modern-developers-love/10/">Read the Report</a></p>
</div>

<p><div class="span10"><div class="hero-unit">
<iframe width="460" height="264" src="http://www.youtube.com/embed/eCrtoSTZ2RE" frameborder="0" allowfullscreen></iframe></div></div></div></p>

<h1>Our Goal</h1>

<p>Simple, get much more from Apache Tomcat, yet without giving anything up.</p>

<h1>Principles</h1>

<p>Some core principles guide the integration:</p>

<ul>
<li>Don't mess with Tomcat - Just take it as it comes and extend it</li>
<li>Keep it as simple as possible for the end user</li>
<li>Avoid architectural overhead - It should just run existing applications out of the box</li>
</ul>

<p>The desire to beef-up Tomcat installations has persisted despite the existence of full-profile application servers,
many of which actually include Tomcat in some truncated or stripped-down form.
TomEE strives to fill this gap.</p>

<h1>Under the Covers</h1>

<p>Apache TomEE is assembled from a vanilla Apache Tomcat official distribution.
No picking and choosing individual parts of Tomcat and building a "new" server
leveraging Tomcat.  We start with Tomcat, add our jars and configuration and zip up the rest.
 The result is Tomcat with added EE features, TomEE.</p>

<p>Tomcat provides plenty of hooks for filling out parts of its lifecycle.  We
leverage them all to fill the gaps.  The result is a whole lotta sharing!</p>

<p>Servlets now get access to JPA and Transactions, EJBs get access to Tomcat
provided Security.  Any Tomcat provided resources, say from a context.xml,
can be looked up or injected by <em>any</em> managed component in the system.</p>

<h1>Keep it Tight, Keep it Simple</h1>

<p>There's a definite "less is more" philosophy in Apache TomEE.  It's too
easy to go too far when developing an app server.  The result is usually a
slow to start, memory hogging, beast.  We're not here to create an ultra
flexible, super powerful, infinitely composable, be anything to anyone
platform.  We're here to deliver Java EE 6 Web Profile in the simplest way
possible.</p>

<p>If you were to imagine taking a plain Tomcat install and integrating the
missing components in the most direct and to-the-point style possible,
you'd end up with TomEE.  The result speaks for itself:</p>

<ul>
<li>Runs without any additional memory requirements</li>
<li>Compatible with most Tomcat-aware tools</li>
<li>Compatible with Tomcat-tested apps</li>
</ul>

<h1>History</h1>

<p>In Apache TomEE's previous life, it was simply known as the OpenEJB+Tomcat
integration.  That description was always quite misleading.  For one,
there's incredible benefit even if EJB is never used.</p>

<p>Quite simply, EJB as a technology integrates with the most number of specs
than any other spec.  It touches JMS, Web Services, Connectors, Servlets
(EJB Web Services are still driven by Servlets!), JPA, JDBC, Transactions,
Security.  Integrating with all these technologies takes time and expertise
and in the end has very little to do with EJB specifically.  To apply this
all to Tomcat and leverage it all from a simple Servlet is a natural
extension and the reason most app servers started out as EJB servers.</p>

<p>Whereas most app servers pluck Tomcat out of its environment, Apache
OpenEJB has always existed as an embeddable container focused on being as
tiny and invisible as possible.  The natural extension of this is to embed
the "EE" into Tomcat, rather than the other way around.</p>

<p>But in the end, it is not about EJB.  It's about the other guys: ActiveMQ,
CXF, MyFaces, OpenJPA, OpenWebBeans, and of course Tomcat!  So out with
OpenEJB+Tomcat and in with Apache TomEE!</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>
