blob: e5aa25c5d8425805aa6458de43e2b532037fa3a4 [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'>
<h1>TomEE and Arquillian</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Check out the <a href="arquillian-getting-started.html">Getting started</a> page
if you are not at all familiar with Arquillian.</p>
</div>
<div class="paragraph">
<p>All the Arquillian Adapters for TomEE support the following
configuration options in the <strong>src/test/resources/arquillian.xml</strong>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;container qualifier="tomee" default="true"&gt;
&lt;configuration&gt;
&lt;property name="httpPort"&gt;-1&lt;/property&gt;
&lt;property name="stopPort"&gt;-1&lt;/property&gt;
&lt;!--Optional Container Properties--&gt;
&lt;property name="properties"&gt;
aproperty=something
&lt;/property&gt;
&lt;!--Optional Remote Adapter Deployer Properties
&lt;property name="deployerProperties"&gt;
aproperty=something
&lt;/property&gt;
--&gt;
&lt;/configuration&gt;
&lt;/container&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>The above can also be set as system properties rather than via the
<strong>src/test/resources/arquillian.xml</strong> file.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
&lt;configuration&gt;
&lt;systemPropertyVariables&gt;
&lt;tomee.httpPort&gt;-1&lt;/tomee.httpPort&gt;
&lt;tomee.stopPort&gt;-1&lt;/tomee.stopPort&gt;
&lt;/systemPropertyVariables&gt;
&lt;/configuration&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>When a port is set to -1, a random port will be chosen. This is key to
avoiding port conflicts on CI systems or for just plain clean testing.</p>
</div>
<div class="paragraph">
<p>The TomEE Arquillian adapters will export the actual port chosen back as
a system property using the same name. The test case can use the
property to retrieve the port and contact the server.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">URL url = new URL("http://localhost:" + System.getProperty("tomee.httpPort");
// use the URL to connect to the server</code></pre>
</div>
</div>
<div class="paragraph">
<p>If that property returns null</p>
</div>
<div class="paragraph">
<p>When you are actually using a test on the client side, you can use
instead</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import org.jboss.arquillian.test.api.ArquillianResource;
...
@ArquillianResource private URL url;</code></pre>
</div>
</div>
<div class="paragraph">
<p>The URL will get injected by Arquillian. Be careful, that injection only
works if your are on the client side (it does not make sense in the
server side). So, if for a specific need to need it, just use the system
property.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_tomee_embedded_adapter">TomEE Embedded Adapter</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The TomEE Embedded Adapter will boot TomEE right inside the test case
itself resulting in one JVM running both the application and the test
case. This is generally much faster than the TomEE Remote Adapter and
great for development. That said, it is strongly recommended to also run
all tests in a Continuous Integration system using the TomEE Remote
Adapter.</p>
</div>
<div class="paragraph">
<p>To use the TomEE Embedded Arquillian Adapter, simply add these Maven
dependencies to your Maven pom.xml:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;arquillian-tomee-embedded&lt;/artifactId&gt;
&lt;version&gt;1.7.1&lt;/version&gt; &lt;!--Current version--&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;tomee-embedded&lt;/artifactId&gt;
&lt;version&gt;1.7.1&lt;/version&gt;
&lt;/dependency&gt;
&lt;!--Required for WebServices and RESTful WebServices--&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;tomee-webservices&lt;/artifactId&gt;
&lt;version&gt;1.7.1&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;tomee-jaxrs&lt;/artifactId&gt;
&lt;version&gt;1.7.1&lt;/version&gt;
&lt;/dependency&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>As mentioned above the Embedded Adapter has the following properties
which can be specified in the <strong>src/test/resources/arquillian.xml</strong> file:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>httpPort</code></p>
</li>
<li>
<p><code>stopPort</code></p>
</li>
<li>
<p><code>properties</code> (System properties for container)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Or alternatively as System properties, possibly shared with other TomEE
Arquillian Adapters:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>tomee.httpPort</code></p>
</li>
<li>
<p><code>tomee.stopPort</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Or more specifically as a System properties only applicable to the
Embedded Adapter:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>tomee.embedded.httpPort</code></p>
</li>
<li>
<p><code>tomee.embedded.stopPort</code></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_tomee_remote_adapter">TomEE Remote Adapter</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The TomEE Remote Adapter will unzip and setup a TomEE or TomEE Plus
distribution. Once setup, the server will execute in a separate process.
This will be slower, but with the added benefit it is 100% match with
the production system environment.</p>
</div>
<div class="paragraph">
<p>On a local machine clients can get the remote server port using the
following System property:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">final String port = System.getProperty("server.http.port");</code></pre>
</div>
</div>
<div class="paragraph">
<p>The following shows a typical configuration for testing against TomEE
(webprofile version). The same can be done against TomEE+ by changing
<code>&lt;tomee.classifier&gt;webprofile&lt;/tomee.classifier&gt;</code> to
<code>&lt;tomee.classifier&gt;plus&lt;/tomee.classifier&gt;</code></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;properties&gt;
&lt;tomee.version&gt;1.7.1&lt;/tomee.version&gt;
&lt;tomee.classifier&gt;webprofile&lt;/tomee.classifier&gt;
&lt;/properties&gt;
&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
&lt;configuration&gt;
&lt;systemPropertyVariables&gt;
&lt;tomee.classifier&gt;${tomee.classifier}&lt;/tomee.classifier&gt;
&lt;tomee.version&gt;${tomee.version}&lt;/tomee.version&gt;
&lt;/systemPropertyVariables&gt;
&lt;/configuration&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;arquillian-tomee-remote&lt;/artifactId&gt;
&lt;version&gt;${tomee.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;apache-tomee&lt;/artifactId&gt;
&lt;version&gt;${tomee.version}&lt;/version&gt;
&lt;classifier&gt;${tomee.classifier}&lt;/classifier&gt;
&lt;type&gt;zip&lt;/type&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>The Remote Adapter has the following properties which can be specified
in the <strong>src/test/resources/arquillian.xml</strong> file:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>httpPort</code></p>
</li>
<li>
<p><code>stopPort</code></p>
</li>
<li>
<p><code>version</code></p>
</li>
<li>
<p><code>classifier</code> (Must be either <code>webprofile</code> or <code>plus</code>)</p>
</li>
<li>
<p><code>properties</code> (System properties for container)</p>
</li>
<li>
<p><code>deployerProperties</code> (Sent to Deployer)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Or alternatively as System properties, possibly shared with other TomEE
Arquillian Adapters:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>tomee.httpPort</code></p>
</li>
<li>
<p><code>tomee.stopPort</code></p>
</li>
<li>
<p><code>tomee.version</code></p>
</li>
<li>
<p><code>tomee.classifier</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Or more specifically as a System properties only applicable to the
Remote Adapter:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>tomee.remote.httpPort</code></p>
</li>
<li>
<p><code>tomee.remote.stopPort</code></p>
</li>
<li>
<p><code>tomee.remote.version</code></p>
</li>
<li>
<p><code>tomee.remote.classifier</code></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_maven_profiles">Maven Profiles</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Setting up both adapters is quite easy via Maven profiles. Here the
default adapter is the Embedded Adapter, the Remote Adapter will run
with <code>-Ptomee-webprofile-remote</code> specified as a <code>mvn</code> command argument.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;profiles&gt;
&lt;profile&gt;
&lt;id&gt;tomee-embedded&lt;/id&gt;
&lt;activation&gt;
&lt;activeByDefault&gt;true&lt;/activeByDefault&gt;
&lt;/activation&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;arquillian-tomee-embedded&lt;/artifactId&gt;
&lt;version&gt;1.0.0&lt;/version&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;
&lt;/profile&gt;
&lt;profile&gt;
&lt;id&gt;tomee-webprofile-remote&lt;/id&gt;
&lt;properties&gt;
&lt;tomee.version&gt;1.0.0&lt;/tomee.version&gt;
&lt;tomee.classifier&gt;webprofile&lt;/tomee.classifier&gt;
&lt;/properties&gt;
&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
&lt;configuration&gt;
&lt;systemPropertyVariables&gt;
&lt;tomee.classifier&gt;${tomee.classifier}&lt;/tomee.classifier&gt;
&lt;tomee.version&gt;${tomee.version}&lt;/tomee.version&gt;
&lt;/systemPropertyVariables&gt;
&lt;/configuration&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;arquillian-tomee-remote&lt;/artifactId&gt;
&lt;version&gt;${tomee.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;apache-tomee&lt;/artifactId&gt;
&lt;version&gt;${tomee.version}&lt;/version&gt;
&lt;classifier&gt;${tomee.classifier}&lt;/classifier&gt;
&lt;type&gt;zip&lt;/type&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;
&lt;/profile&gt;
&lt;profile&gt;
&lt;id&gt;tomee-plus-remote&lt;/id&gt;
&lt;properties&gt;
&lt;tomee.version&gt;1.0.0&lt;/tomee.version&gt;
&lt;tomee.classifier&gt;plus&lt;/tomee.classifier&gt;
&lt;/properties&gt;
&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
&lt;configuration&gt;
&lt;systemPropertyVariables&gt;
&lt;tomee.classifier&gt;${tomee.classifier}&lt;/tomee.classifier&gt;
&lt;tomee.version&gt;${tomee.version}&lt;/tomee.version&gt;
&lt;/systemPropertyVariables&gt;
&lt;/configuration&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;arquillian-tomee-remote&lt;/artifactId&gt;
&lt;version&gt;${tomee.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
&lt;artifactId&gt;apache-tomee&lt;/artifactId&gt;
&lt;version&gt;${tomee.version}&lt;/version&gt;
&lt;classifier&gt;${tomee.classifier}&lt;/classifier&gt;
&lt;type&gt;zip&lt;/type&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;
&lt;/profile&gt;
&lt;/profiles&gt;</code></pre>
</div>
</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>