blob: 408ebc20bd68a3a6d07d99ed97d39df11aac640c [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Apache TomEE</title>
<meta name="description"
content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
<meta name="author" content="Luka Cvetinovic for Codrops" />
<link rel="icon" href="favicon.ico">
<link rel="icon" type="image/png" href="favicon.png">
<meta name="msapplication-TileColor" content="#80287a">
<meta name="theme-color" content="#80287a">
<link rel="stylesheet" type="text/css" href="css/normalize.css">
<link rel="stylesheet" type="text/css" href="css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="css/owl.css">
<link rel="stylesheet" type="text/css" href="css/animate.css">
<link rel="stylesheet" type="text/css" href="fonts/font-awesome-4.1.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="fonts/eleganticons/et-icons.css">
<link rel="stylesheet" type="text/css" href="css/jqtree.css">
<link rel="stylesheet" type="text/css" href="css/idea.css">
<link rel="stylesheet" type="text/css" href="css/cardio.css">
<script type="text/javascript">
<!-- Matomo -->
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
/* We explicitly disable cookie tracking to avoid privacy issues */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "//matomo.privacy.apache.org/";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '5']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true;
g.src = u + 'matomo.js';
s.parentNode.insertBefore(g, s);
})();
<!-- End Matomo Code -->
</script>
</head>
<body>
<div class="preloader">
<img src="img/loader.gif" alt="Preloader image">
</div>
<nav class="navbar">
<div class="container">
<div class="row"> <div class="col-md-12">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/" title="Apache TomEE">
<span>
<img
src="img/apache_tomee-logo.svg"
onerror="this.src='img/apache_tomee-logo.jpg'"
height="50"
>
</span>
</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right main-nav">
<li><a href="docs.html">Documentation</a></li>
<li><a href="community/index.html">Community</a></li>
<li><a href="security/security.html">Security</a></li>
<li><a class="btn btn-accent accent-orange no-shadow" href="download.html">Downloads</a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div></div>
</div>
<!-- /.container-fluid -->
</nav>
<div id="main-block" class="container main-block">
<div class="row title">
<div class="col-md-12">
<div class='page-header'>
<h1>Tomcat</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="sect1">
<h2 id="_introduction">Introduction</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The OpenEJB plugin for Tomcat makes all of the OpenEJB features available to Servlets, including:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>@Annotations <strong> @Resource </strong> @PersistenceUnit <strong> @PersistenceContext </strong> @EJB</p>
</li>
<li>
<p>JPA - Java Persistence Architecture</p>
</li>
<li>
<p>JMS - Java Messaging Service</p>
</li>
<li>
<p>JTA - Transaction Processing <strong> TransactionManager </strong> Container Managed Transactions ** XA Support</p>
</li>
<li>
<p>JavaMail</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>In addition, WAR files can contain EJB modules and JPA persistence units eliminating the annoying construction of .ear files.
Adding EJBs and JPA Persistence beans to your application is as simple as adding the @Stateless, @Stateful, @MessageDriven or @Entity to a class.
The packaging is refered to as <a href="collapsed-ear.html">Collapsed EAR</a> style as the war file, ejb jar, and persistence unit files are merged into one archive and share the same classloader.</p>
</div>
<div class="paragraph">
<p><em>Requirements:</em></p>
</div>
<div class="ulist">
<ul>
<li>
<p>OpenEJB 3.x</p>
</li>
<li>
<p>Tomcat 6.x or 5.5</p>
</li>
<li>
<p>Java 1.5 or 1.6</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation_for_the_impatient">Installation for the Impatient</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Assuming you have a <a href="tomcat-installation.html">normal working Tomcat 6.x or 5.5 installation</a> :</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Download <a href="download-ng.html">openejb.war</a></p>
</li>
<li>
<p>Copy openejb.war to ${catalina.base}/webapps/openejb.war (Note: the file <em>must</em> be named openejb.war)</p>
</li>
<li>
<p>Start Tomcat if it is not already running</p>
</li>
<li>
<p>(optional) Visit <a href="http://localhost:8080/openejb/installer" class="bare">http://localhost:8080/openejb/installer</a> and click the 'install' button</p>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_examples_tutorials_and_tests">Examples, Tutorials and Tests</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_ejb_examples_war">ejb-examples.war</h3>
<div class="paragraph">
<p>See the webapps/ejb-examples/ directory in the <a href="download-ng.html">openejb-examples zip</a> .</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_problems">Problems?</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_http_status_403">HTTP Status 403</h3>
<div class="paragraph">
<p>Did you get a "HTTP Status 403" error page containing the description "Access to the specified resource () has been forbidden." when visiting <a href="http://localhost:8080/openejb" class="bare">http://localhost:8080/openejb</a> ?</p>
</div>
<div class="paragraph">
<p>The openejb.war is protected by a Tomcat valve that restricts access to the application to the computer on which Tomcat is running.
If your browser is running on the same computer as Tomcat, try accessing OpenEJB using this link instead <a href="http://127.0.0.1:8080/openejb" class="bare">http://127.0.0.1:8080/openejb</a> .</p>
</div>
<div class="paragraph">
<p>If you want to access the openejb.war from another computer, you will need to either remove the valve, or modify the IP list in the valve declaration.</p>
</div>
<div class="paragraph">
<p>The easiest way to remove the valve it to simply delete the webapps/openejb/META-INF/context.xml file and the webapps/openejb.war file <em>while Tomcat is stopped</em>.
Warning that Tomcat keeps a copy of all context.xml files under conf/Catalina/localhost/<appname>.xml, so you may need to delete the conf/Catalina/localhost/openejb.xml file as well.
The openejb.war file must be removed because some versions of Tomcat will use the context.xml file packed in the openejb.war file regardless of what is in the unpacked directory.</appname></p>
</div>
</div>
<div class="sect2">
<h3 id="_duplicatedeploymentidexception">DuplicateDeploymentIdException:</h3>
<div class="paragraph">
<p>If you try to deploy the same ejb in two different web applications, then you will get the following exception (in conf/openejb.log):</p>
</div>
<div class="literalblock">
<div class="content">
<pre>org.apache.openejb.DuplicateDeploymentIdException: Application cannot be deployed as it contains deployment-ids which are in use:</pre>
</div>
</div>
<div class="paragraph">
<p>To fix the issue, do the following:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Create a file named system.properties under the conf directory</p>
</li>
<li>
<p>Add the following to the system.properties file and save</p>
<div class="paragraph">
<p>openejb.deploymentId.format={moduleId}/{ejbName}</p>
</div>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="_java_lang_outofmemoryerror_permgen_space">java.lang.OutOfMemoryError: PermGen space</h3>
<div class="paragraph">
<p>By default, the JVM starts with a small PermGen.
Tomcat does not increase this limit, so you may encounter this exception by the time Tomcat deploys and executes your application.
If you get this exception, you should consider increasing the PermGen allocation for the Tomcat JVM.
You can achieve this by adding "-XX:MaxPermSize=256m" to the CATALINA_OPTS environment variable before starting Tomcat.</p>
</div>
</div>
<div class="sect2">
<h3 id="_other_issues">Other Issues</h3>
<div class="paragraph">
<p>If you are having problems with the installation, please send a message to the OpenEJB users <a href="mailing-lists.html">mailing list</a> containing any error message(s) and the following information:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>OpenEJB Version</p>
</li>
<li>
<p>Tomcat Version</p>
</li>
<li>
<p>Java Version (execute java -version)</p>
</li>
<li>
<p>Operating System Type and Version</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_limitations">Limitations</h2>
<div class="sectionbody">
<div class="paragraph">
<p><em>JavaAgent</em> - OpenEJB uses OpenJPA to provide JPA and CMP persistence, and OpenJPA currently requires a JavaAgent to function properly.
This requirement is something that the OpenJPA project is working on removing.
Once removed, the OpenEJB plugin for Tomcat will no longer need to modify the startup shell scripts and you will not need to restart Tomcat after the OpenEJB installation.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_misc">Misc</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This document is a starting point for using OpenEJB in Tomcat and will evolve based on user contributions.
If you wish to contribute to this document, feel very welcome to click the 'Edit' link in the lower right and make changes and add new HOWTO&#8217;s and other docs.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_jsf_injection_support">JSF Injection Support</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Now you can inject EJB&#8217;s into JSF managed beans.
Currently we have tested with JSF 1.2 RI (Mojarra) and MyFaces v1.2.3 . We would definitely appreciate any feedback on other JSF implementations.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="margin-bottom: 30px;"></div>
<footer>
<div class="container">
<div class="row">
<div class="col-sm-6 text-center-mobile">
<h3 class="white">Be simple. Be certified. Be Tomcat.</h3>
<h5 class="light regular light-white">"A good application in a good server"</h5>
<ul class="social-footer">
<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
</ul>
<h5 class="light regular light-white">
<a href="privacy-policy.html" class="white">Privacy Policy</a>
</h5>
</div>
<div class="col-sm-6 text-center-mobile">
<div class="row opening-hours">
<div class="col-sm-3 text-center-mobile">
<h5><a href="latest/docs/" class="white">Documentation</a></h5>
<ul class="list-unstyled">
<li><a href="latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
<li><a href="latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
<li><a href="latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
<li><a href="latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="latest/examples/" class="white">Examples</a></h5>
<ul class="list-unstyled">
<li><a href="latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
<li><a href="latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
<li><a href="latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
<li><a href="latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="community/index.html" class="white">Community</a></h5>
<ul class="list-unstyled">
<li><a href="community/contributors.html" class="regular light-white">Contributors</a></li>
<li><a href="community/social.html" class="regular light-white">Social</a></li>
<li><a href="community/sources.html" class="regular light-white">Sources</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="security/index.html" class="white">Security</a></h5>
<ul class="list-unstyled">
<li><a href="https://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
<li><a href="https://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
<li><a href="https://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="row bottom-footer text-center-mobile">
<div class="col-sm-12 light-white">
<p>Copyright &copy; 1999-2022 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>
</div>
</div>
</div>
</footer>
<!-- Holder for mobile navigation -->
<div class="mobile-nav">
<ul>
<li><a hef="latest/docs/admin/index.html">Administrators</a>
<li><a hef="latest/docs/developer/index.html">Developers</a>
<li><a hef="latest/docs/advanced/index.html">Advanced</a>
<li><a hef="community/index.html">Community</a>
</ul>
<a href="#" class="close-link"><i class="arrow_up"></i></a>
</div>
<!-- Scripts -->
<script src="js/jquery-1.11.1.min.js"></script>
<script src="js/owl.carousel.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/wow.min.js"></script>
<script src="js/typewriter.js"></script>
<script src="js/jquery.onepagenav.js"></script>
<script src="js/tree.jquery.js"></script>
<script src="js/highlight.pack.js"></script>
<script src="js/main.js"></script>
</body>
</html>