| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| |
| <meta charset="UTF-8"> |
| <title>Manual Installation</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>Manual Installation |
| |
| <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> |
| |
| <h1>Overview</h1> |
| |
| <p>The manual installation process is significantly harder then the <a href="tomcat.html">automatic installation</a> |
| which we normally recommend. In this installation process you will do the |
| following:</p> |
| |
| <ol> |
| <li>Install openejb.war</li> |
| <li>Download openejb.war from the <a href="http://tomee.apache.org/downloads.html">download page</a></li> |
| <li>Make webapps/openejb directory</li> |
| <li>Change to new webapps/openejb directory</li> |
| <li>Unpack the openejb.war file in the new directory</li> |
| <li>Add the OpenEJB listener the conf/server.xml file</li> |
| <li>Update the non-compliant Tomcat annotations-api.jar</li> |
| <li>Add the OpenEJB JavaAgent to the bin/catalina.bat or bin/catalina.bat |
| script</li> |
| </ol> |
| |
| <h2>Install openejb.war</h2> |
| |
| <p>Once Tomcat has been <a href="tomcat-installation.html">installed</a> |
| , the OpenEJB plugin for Tomcat can be installed. The war can be obtained |
| from the <a href="http://tomee.apache.org/downloads.html">download page</a></p> |
| |
| <p>The commands in this example are executed from within the Tomcat |
| installation directory.</p> |
| |
| <p><a name="ManualInstallation-UnpackOpenEJBTomcatplugininTomcatwebappsdirectory"></a></p> |
| |
| <h2>Unpack OpenEJB Tomcat plugin in Tomcat webapps directory</h2> |
| |
| <p>Be careful, this is the most error prone step. A web |
| application does not contain a root directory, so if you unpack it in the |
| wrong directory, it is difficult to undo. Please, follow this step |
| closely, and most importantly make sure you execute the unpack command |
| from within the new webapps/openejb directory</p> |
| |
| <p>Due to the structure of war files, you must create a new directory for |
| OpenEJB, change to the new directory and execute the unpack command from |
| within the new directory. If you get this wrong, it is difficult to undo, |
| so follow the steps closely.</p> |
| |
| <pre><code> |
| C:\apache-tomcat-6.0.14>mkdir webapps\openejb |
| |
| C:\apache-tomcat-6.0.14>cd webapps\openejb |
| |
| C:\apache-tomcat-6.0.14\webapps\openejb>jar -xvf \openejb.war |
| created: WEB-INF/ |
| created: WEB-INF/classes/ |
| created: WEB-INF/classes/org/ |
| created: WEB-INF/classes/org/apache/ |
| created: WEB-INF/classes/org/apache/openejb/ |
| ...snip... |
| |
| C:\apache-tomcat-6.0.14\webapps\openejb>dir |
| Volume in drive C has no label. |
| Volume Serial Number is 0000-0000 |
| |
| Directory of C:\apache-tomcat-6.0.14\webapps\openejb |
| |
| 09/21/2007 10:19 AM <DIR> . |
| 09/21/2007 10:19 AM <DIR> .. |
| 09/21/2007 10:19 AM 1,000 index.html |
| 09/21/2007 10:19 AM <DIR> lib |
| 09/21/2007 10:19 AM 11,358 LICENSE |
| 09/21/2007 10:19 AM <DIR> META-INF |
| 09/21/2007 10:19 AM 11,649 NOTICE |
| 09/21/2007 10:19 AM 1,018 openejb.xml |
| 09/21/2007 10:19 AM 1,886 README.txt |
| 09/21/2007 10:19 AM <DIR> tomcat |
| 09/21/2007 10:19 AM <DIR> WEB-INF |
| 5 File(s) 26,911 bytes |
| 6 Dir(s) 4,633,796,608 bytes free |
| |
| C:\apache-tomcat-6.0.14\webapps\openejb>cd ..\.. |
| |
| C:\apache-tomcat-6.0.14> |
| |
| {card:label=Unix}{noformat:nopanel=true} |
| apache-tomcat-6.0.14$ mkdir webapps/openejb |
| |
| apache-tomcat-6.0.14$ cd webapps/openejb/ |
| |
| apache-tomcat-6.0.14/webapps/openejb$ jar -xvf path/to/openejb.war |
| created: WEB-INF/ |
| created: WEB-INF/classes/ |
| created: WEB-INF/classes/org/ |
| created: WEB-INF/classes/org/apache/ |
| created: WEB-INF/classes/org/apache/openejb/ |
| ...snip... |
| |
| apache-tomcat-6.0.14/webapps/openejb$ ls |
| LICENSE META-INF/ NOTICE README.txt WEB-INF/ index.html |
| lib/ openejb.xml tomcat/ |
| |
| apache-tomcat-6.0.14/webapps/openejb$ cd ../.. |
| |
| apache-tomcat-6.0.14$ |
| |
| </code></pre> |
| |
| <p><a name="ManualInstallation-AddtheOpenEJBlistenertoTomcat"></a></p> |
| |
| <h2>Add the OpenEJB listener to Tomcat</h2> |
| |
| <p>All Tomcat listener classes must be available in the Tomcat common class |
| loader, so the openejb-loader jar must be copied into the Tomcat lib |
| directory.</p> |
| |
| <pre><code> C:\apache-tomcat-6.0.14>copy webapps\openejb\lib\openejb-loader-3.0.0-SNAPSHOT.jar lib\openejb-loader.jar |
| 1 file(s) copied. |
| |
| apache-tomcat-6.0.14$ cp webapps/openejb/lib/openejb-loader-*.jar lib/openejb-loader.jar |
| </code></pre> |
| |
| <p>Add the following <code><Listener |
| className="org.apache.openejb.loader.OpenEJBListener" /></code> to your conf/server.xml file to load the OpenEJB listener:</p> |
| |
| <p>The snippet is shown below</p> |
| |
| <pre><code><!-- Note: A "Server" is not itself a "Container", so you may not |
| define subcomponents such as "Valves" at this |
| level. |
| Documentation at /docs/config/server.html |
| --> |
| |
| <Server port="8005" shutdown="SHUTDOWN"> |
| <!-- OpenEJB plugin for tomcat --> |
| <Listener |
| className="org.apache.openejb.loader.OpenEJBListener" /> |
| |
| <!--APR library loader. Documentation at /docs/apr.html --> |
| <Listener |
| className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> |
| </code></pre> |
| |
| <p><a name="ManualInstallation-UpdatetheTomcatannotations-api.jarfile"></a></p> |
| |
| <h2>Update the Tomcat annotations-api.jar file</h2> |
| |
| <p>Tomcat contains an old non-compliant version of the javax.annotation |
| classes and these invalid classes must be updated so OpenEJB can process |
| annotations. Simply, replace the annotations-api.jar in the Tomcat lib |
| directory with the updated annotations-api.jar in the OpenEJB war.</p> |
| |
| <pre><code> |
| |
| C:\apache-tomcat-6.0.14>copy webapps\openejb\tomcat\annotations-api.jar |
| lib\annotations-api.jar |
| Overwrite lib\annotations-api.jar? (Yes/No/All): y |
| 1 file(s) copied. |
| |
| apache-tomcat-6.0.14$ cp webapps/openejb/tomcat/annotations-api.jar |
| lib/annotations-api.jar |
| |
| </code></pre> |
| |
| <p><a name="ManualInstallation-{anchor:javaagent}AddOpenEJBjavaagenttoTomcatstartup"></a></p> |
| |
| <h2>Add OpenEJB javaagent to Tomcat startup</h2> |
| |
| <p>OpenJPA, the Java Persistence implementation used by OpenEJB, currently |
| must enhanced persistence classes to function properly, and this requires |
| the installation of a javaagent into the Tomcat startup process.</p> |
| |
| <p>First, copy the OpenEJB JavaAgent jar into the lib directory.</p> |
| |
| <pre><code> |
| |
| C:\apache-tomcat-6.0.14>copy webapps\openejb\lib\openejb-javaagent-3.0.0-SNAPSHOT.jar lib\openejb-javaagent.jar |
| 1 file(s) copied. |
| |
| apache-tomcat-6.0.14$ cp webapps/openejb/lib/openejb-javaagent-*.jar lib/openejb-javaagent.jar |
| |
| </code></pre> |
| |
| <p>Simply, add the snippet marked below in |
| bin/catalina.bat (Windows) or bin/catalina.sh (Unix) file to enable the |
| OpenEJB javaagent:</p> |
| |
| <pre><code>if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuli |
| set JAVA_OPTS=%JAVA_OPTS% |
| -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager |
| -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" |
| :noJuli |
| |
| # Start of Snippet to add |
| rem Add OpenEJB javaagent if not exist |
| "%CATALINA_BASE%\webapps\openejb\lib\openejb-javaagent.jar" goto |
| noOpenEJBJavaagent set |
| JAVA_OPTS="-javaagent:%CATALINA_BASE%\webapps\openejb\lib\openejb-javaagent.jar" |
| %JAVA_OPTS% :noOpenEJBJavaagent |
| # End of Snippet to add |
| |
| |
| rem ----- Execute The Requested Command |
| --------------------------------------- |
| echo Using CATALINA_BASE: %CATALINA_BASE% |
| echo Using CATALINA_HOME: %CATALINA_HOME% |
| |
| |
| |
| # Set juli LogManager if it is present |
| if [OPENEJB: -r "$CATALINA_BASE"/conf/logging.properties ](openejb:--r-"$catalina_base"/conf/logging.properties-.html) |
| ; then |
| JAVA_OPTS="$JAVA_OPTS |
| "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" |
| "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties" |
| fi |
| |
| #Start of Snippet to add |
| if [OPENEJB: -r "$CATALINA_BASE"/webapps/lib/openejb-javaagent.jar ](openejb:--r-"$catalina_base"/webapps/lib/openejb-javaagent.jar-.html) |
| ; then |
| JAVA_OPTS=""-javaagent:$CATALINA_BASE/lib/openejb-javaagent.jar" |
| $JAVA_OPTS" |
| fi |
| #End of Snippet to add |
| </code></pre> |
| |
| <h2>Note:</h2> |
| |
| <p>The example above is an excerpt from the middle of the |
| bin/catalina.sh file. Search for the this section and add the snippet shown </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 © 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> |