blob: c3dd4feb79048eeadb3a319fb836adff23681890 [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">
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="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="/">
<span>
<img src="../../../../img/logo-active.png">
</span>
Apache TomEE
</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 href="../../../../download-ng.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'>
<div class='btn-toolbar pull-right' style="z-index: 2000;">
<div class='btn-group'>
<a class="btn" href="../../../../tomee-8.0/docs/advanced/tomee-embedded/index.pdf"><i class="fa fa-file-pdf-o"></i> Download as PDF</a>
</div>
</div>
<h1>TomEE Embedded</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>TomEE Embedded is based on Tomcat embedded and starts a real TomEE in the launching JVM. It is also
able to deploy the classpath as a webapp and to use either <code>META-INF/resources</code> or a folder as web resources.</p>
</div>
<div class="paragraph">
<p>Here is a basic programmatic usage based on <code>org.apache.tomee.embedded.Container</code> class:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">try (final Container container = new Container(new Configuration()).deployClasspathAsWebApp()) {
System.out.println("Started on http://localhost:" + container.getConfiguration().getHttpPort());
// do something or wait until the end of the application
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>All EE features are then accessible directly in the same JVM.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_tomee_embedded_configuration">TomEE Embedded Configuration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The default configuration allows to start tomee without issue but you can desire to customize some of them.</p>
</div>
<table class="tableblock frame-all grid-all spread table table-bordered">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Default</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">httpPort</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8080</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">http port</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">stopPort</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8005</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">shutdown port</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">localhost</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">dir</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">where to create a file hierarchy for tomee (conf, temp, &#8230;&#8203;)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serverXml</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">which server.xml to use</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keepServerXmlAsThis</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">don&#8217;t adjust ports/host from the configuration and keep the ones in server.xml</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">properties</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">container properties</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">quickSession</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">true</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">use Random instead of SecureRandom (for dev)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">skipHttp</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">don&#8217;t use the http connector</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">httpsPort</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8443</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">https potr</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">activate https</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">withEjbRemote</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">use EJBd</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keystoreFile</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">https keystore location</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keystorePass</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">https keystore password</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keystoreType</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JKS</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">https keystore type</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientAuth</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">https client auth</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keyAlias</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">https alias</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sslProtocol</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">SSL protocol for https connector</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">webXml</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">default web.xml to use</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">loginConfig</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">which LoginConfig to use, relies on <code>org.apache.tomee.embedded.LoginConfigBuilder</code> to create it</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">securityConstraints</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">add some security constraints, use <code>org.apache.tomee.embedded.SecurityConstaintBuilder</code> to build them</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">realm</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">which realm to use (useful to switch to <code>JAASRealm</code> for instance) without modifying the application</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployOpenEjbApp</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">should internal openejb application be delpoyed</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">users</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">a map of user/password</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">roles</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">a map of role/users</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tempDir</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">${java.io.tmpdir}/tomee-embedded_${timestamp}</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">tomcat needs a docBase, in case you don&#8217;t provide one one will be created there</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">webResourceCached</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">true</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">should web resources be cached by tomcat (set false in frontend dev)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configuration-location</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">location (classpath or file) to a .properties to configure the server
[pre-task</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Runnable or org.apache.tomee.embedded.LifecycleTask implementations to execute before the container starts</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">classes-filter</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">implementation of a custom xbean Filter to ignore not desired classes during scanning</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">basic</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>Note: passing to <code>Container</code> constructor a <code>Configuration</code> it will start the container automatically but using <code>setup(Configuration)</code>
to initialize the configuration you will need to call <code>start()</code>.</p>
</div>
<div class="paragraph">
<p>You can also pass through the properties <code>connector.xxx</code> and <code>connector.attributes.xxx</code> to customize connector(s)
configuration directly.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_standalone_applications_or_tomee_embedded_provided_main_string">Standalone applications or TomEE Embedded provided main(String[])</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Deploying an application in a server is very nice cause the application is generally small and it allows to update the
container without touching the application (typically insanely important in case of security issues for instance).</p>
</div>
<div class="paragraph">
<p>However sometimes you don&#8217;t have the choice so TomEE Embedded provides a built-in <code>main(String[])</code>. Here are its options:</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
this is still a TomEE so all system properties work (for instance to create a resource).
</td>
</tr>
</table>
</div>
<table class="tableblock frame-all grid-all spread table table-bordered">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Default</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">--path</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">location of application(s) to deploy</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">--context</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Context name for applications (same order than paths)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-p or --port</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8080</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">http port</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-s or --shutdown</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8005</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">shutdown port</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-d or --directory</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">./.apache-tomee</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">tomee work directory</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-c or --as-war</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">deploy classpath as a war</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-b or --doc-base</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">where web resources are for classpath deployment</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">--renaming</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">for fat war only, is renaming of the context supported</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">--serverxml</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">the server.xml location</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">--tomeexml</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">the server.xml location</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">--property</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">a list of container properties (values follow the format x=y)</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>Note that since 7.0.0 TomEE provides 3 flavors (qualifier) of tomee-embedded as fat jars:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>uber (where we put all request features by users, this is likely the most complete and the biggest)</p>
</li>
<li>
<p>jaxrs: webprofile minus JSF</p>
</li>
<li>
<p>jaxws: webprofile plus JAX-WS</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>These different uber jars are interesting in mainly 2 cases:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>you do a war shade (it avoids to list a bunch of dependencies but still get a customized version)</p>
</li>
<li>
<p>you run your application using <code>--path</code> option</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
if you already do a custom shade/fatjar this is not really impacting since you can depend on <code>tomee-embedded</code> and exclude/include what you want.
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_fatapp_a_shortcut_main">FatApp a shortcut main</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>FatApp</code> main (same package as tomee embedded <code>Main</code>) just wraps the default main ensuring:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Ì€`--as-war` is used</p>
</li>
<li>
<p>Ì€`--single-classloader` is used</p>
</li>
<li>
<p><code>--configuration-location=tomee-embedded.properties</code> is set if <code>tomee-embedded.properties</code> is found in the classpath</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_configuration_location">configuration-location</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>--configuration-location</code> option allows to simplify the configuration of tomee embedded through properties.</p>
</div>
<div class="paragraph">
<p>Here are the recognized entries (they match the configuration, see org.apache.tomee.embedded.Configuration for the detail):</p>
</div>
<table class="tableblock frame-all grid-all spread">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">http</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">https</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">stop</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">dir</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">serverXml</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keepServerXmlAsThis</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">quickSession</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">skipHttp</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ssl</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">http2</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">webResourceCached</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">withEjbRemote</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">deployOpenEjbApp</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keystoreFile</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keystorePass</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keystoreType</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">clientAuth</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">keyAlias</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sslProtocol</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">webXml</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tempDir</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">classesFilter</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">conf</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">properties.x (set container properties x with the associated value)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">users.x (for default in memory realm add the user x with its password - the value)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">roles.x (for default in memory realm add the role x with its comma separated users - the value)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">connector.x (set the property x on the connector)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">realm=fullyqualifiedname,realm.prop=xxx (define a custom realm with its configuration)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">login=,login.prop=xxx (define a org.apache.tomee.embedded.LoginConfigBuilder == define a LoginConfig)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">securityConstraint=,securityConstraint.prop=xxx (define a org.apache.tomee.embedded.SecurityConstaintBuilder == define webapp security)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configurationCustomizer.alias=,configurationCustomizer.alias.class=class,configurationCustomizer.alias.prop=xxx (define a ConfigurationCustomizer)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>Here is a sample to add BASIC security on <code>/api/*</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-properties" data-lang="properties"># security configuration
securityConstraint =
securityConstraint.authConstraint = true
securityConstraint.authRole = **
securityConstraint.collection = api:/api/*
login =
login.realmName = app
login.authMethod = BASIC
realm = org.apache.catalina.realm.JAASRealm
realm.appName = app
properties.java.security.auth.login.config = configuration/login.jaas</code></pre>
</div>
</div>
<div class="paragraph">
<p>And here a configuration to exclude jackson packages from scanning and use log4j2 as main logger (needs it as dependency):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-properties" data-lang="properties">properties.openejb.log.factory = log4j2
properties.openejb.container.additional.include = com.fasterxml.jackson,org.apache.logging.log4j</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_application_runner">Application Runner</h2>
<div class="sectionbody">
<div class="paragraph">
<p>SInce TomEE 7.0.2, TomEE provide a light ApplicationComposer integration for TomEE Embedded (all features are not yet supported but the main ones are):
<code>org.apache.tomee.embedded.TomEEEmbeddedApplicationRunner</code>. It relies on the definition of an <code>@Application</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Application
@Classes(context = "app")
@ContainerProperties(@ContainerProperties.Property(name = "t", value = "set"))
@TomEEEmbeddedApplicationRunner.LifecycleTasks(MyTask.class) // can start a ftp/sftp/elasticsearch/mongo/... server before tomee
@TomEEEmbeddedApplicationRunner.Configurers(SetMyProperty.class)
public class TheApp {
@RandomPort("http")
private int port;
@RandomPort("http")
private URL base;
@org.apache.openejb.testing.Configuration
public Properties add() {
return new PropertiesBuilder().p("programmatic", "property").build();
}
@PostConstruct
public void appStarted() {
// ...
}
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Then just start it with:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">TomEEEmbeddedApplicationRunner.run(TheApp.class, "some arg1", "other arg");</code></pre>
</div>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
<code>@Classes(values)</code> and <code>@Jars</code> are supported too which can avoid a huge scanning if you run with a lot of not CDI dependencies which would boost the startup of your application.
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</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>
<li><a href="https://plus.google.com/communities/105208241852045684449"><i class="fa fa-google-plus"></i></a></li>
</ul>
</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="http://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
<li><a href="http://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
<li><a href="http://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-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>
</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>