blob: dfe9bf6e6b544f2a4a2d8cda4524d3d901739689 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tomcat</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
<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><a name="Tomcat-Introduction"></a></p>
<h1>Introduction</h1>
<p>The OpenEJB plugin for Tomcat makes all of the OpenEJB features available
to Servlets, including:</p>
<ul>
<li>@Annotations
<em>* @Resource
<em></em> @PersistenceUnit
<em></em> @PersistenceContext
*</em> @EJB</li>
<li>JPA - Java Persistence Architecture</li>
<li>JMS - Java Messaging Service</li>
<li>JTA - Transaction Processing
<em>* TransactionManager
<em></em> Container Managed Transactions
*</em> XA Support</li>
<li>JavaMail</li>
</ul>
<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="openejb:collapsed-ear.html">OPENEJB: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>
<p><em>Requirements:</em>
* OpenEJB 3.x
* Tomcat 6.x or 5.5
* Java 1.5 or 1.6</p>
<p><a name="Tomcat-{anchor:quickinstructions}InstallationfortheImpatient"></a></p>
<h1>Installation for the Impatient</h1>
<p>Assuming you have a <a href="tomcat-installation.html">normal working Tomcat 6.x or 5.5 installation</a>
:</p>
<ol>
<li>Download <a href="openejb:download.html">openejb.war</a></li>
<li>Copy openejb.war to ${catalina.base}/webapps/openejb.war (Note: the
file <em>must</em> be named openejb.war)</li>
<li>Start Tomcat if it is not already running</li>
<li>(optional) Visit <a href="http://localhost:8080/openejb/installer">http://localhost:8080/openejb/installer</a>
and click the 'install' button</li>
</ol>
<p><a name="Tomcat-Examples,TutorialsandTests"></a></p>
<h1>Examples, Tutorials and Tests</h1>
<p><a name="Tomcat-ejb-examples.war"></a></p>
<h2>ejb-examples.war</h2>
<p>See the webapps/ejb-examples/ directory in the <a href="openejb:download.html">openejb-examples zip</a>
.</p>
<p><a name="Tomcat-{anchor:problems}Problems?"></a></p>
<h1>Problems?</h1>
<p><a name="Tomcat-HTTPStatus403"></a></p>
<h2>HTTP Status 403</h2>
<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">http://localhost:8080/openejb</a>
?</p>
<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">http://127.0.0.1:8080/openejb</a>
.</p>
<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>
<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.</p>
<p><a name="Tomcat-DuplicateDeploymentIdException:"></a></p>
<h2>DuplicateDeploymentIdException:</h2>
<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>
<pre><code>org.apache.openejb.DuplicateDeploymentIdException: Application cannot be
</code></pre>
<p>deployed as it contains deployment-ids which are in use: </p>
<p>To fix the issue, do the following:
1. Create a file named system.properties under the conf directory
1. Add the following to the system.properties file and save</p>
<pre><code>openejb.deploymentId.format={moduleId}/{ejbName}
</code></pre>
<p><a name="Tomcat-java.lang.OutOfMemoryError:PermGenspace"></a></p>
<h2>java.lang.OutOfMemoryError: PermGen space</h2>
<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>
<p><a name="Tomcat-OtherIssues"></a></p>
<h2>Other Issues</h2>
<p>If you are having problems with the installation, please send a message to
the OpenEJB users <a href="openejb:mailing-lists.html">mailing list</a>
containing any error message(s) and the following information:</p>
<ul>
<li>OpenEJB Version</li>
<li>Tomcat Version</li>
<li>Java Version (execute java -version)</li>
<li>Operating System Type and Version</li>
</ul>
<p><a name="Tomcat-Limitations"></a></p>
<h1>Limitations</h1>
<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>
<p><a name="Tomcat-Misc"></a></p>
<h1>Misc</h1>
<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's and other docs. </p>
<p><a name="Tomcat-JSFInjectionSupport"></a></p>
<h1>JSF Injection Support</h1>
<p>Now you can inject EJB'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 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>