blob: a5191afe18bd42c946abcf350590069db7137b6e [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>Application Composer Advanced</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p><a href="getting-started.html">Getting Started</a> page gives you already a lot
of inputs but you caneven go further.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__descriptors">@Descriptors</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can reuse existing file descriptors using <code>@Descriptors</code>. The name
is the file name and the path either a classpath path or a file path:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">// runner if needed etc...
@Descriptors(@Descriptor(name = "persistence.xml", path = "META-INF/persistence.xml"))
public class MyTest {
//...
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Note: this can be put in a <code>@Module</code> method as well.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_services">Services</h2>
<div class="sectionbody">
<div class="paragraph">
<p>If you want to test a JAXRS or JAXWS service you need to activate these
services.</p>
</div>
<div class="paragraph">
<p>To do so just add the needed dependency and use <code>@EnableServices</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">// runner if needed etc...
@EnableService("jaxrs") // jaxws supported as well
public class MyTest {
//...
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_random_port">Random port</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Services like JAXRS and JAXWS relies on HTTP. Often it is nice to have a
random port to be able to deploy multiple tests/projects on the same CI
platform at the same time.</p>
</div>
<div class="paragraph">
<p>To shortcut all the needed logic you can use <code>@RandomPort</code>. It is simply
an injection giving you either the port (<code>int</code>) or the root context
(<code>URL</code>):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">// runner, services if needed etc...
public class MyTest {
@RandomPort("http")
private int port;
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Note: you can generate this way multiple ports. The value is the name of
the service it will apply on (being said http is an alias for httpejbd
which is our embedded http layer).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_nice_logs">Nice logs</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>@SimpleLog</code> annotation allows you to have one liner logs</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__jaxrsprovider">@JaxrsProvider</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>@JaxrsProvider</code> allows you to specify on a <code>@Module</code> method the list of
JAXRS provider you want to use.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_dependencies_without_hacky_code">Dependencies without hacky code</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>@Jars</code> allows you to add dependencies (scanned) to your application
automatically (like CDI libraries):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Module
@Classes(cdi = true, value = { C1.class, C2.class, E1.class })
@Jars("deltaspike-")
public WebApp app() {
return new WebApp();
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__default">@Default</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>@Default</code> automatically adds in the application <code>target/classes</code> as
binaries and <code>src/main/webapp</code> as resources for maven projects.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__cdiextensions">@CdiExtensions</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This annotation allows you to control which extensions are activated
during the test.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__appresource">@AppResource</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This annotation allows injection of few particular test resources like:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>the test <code>AppModule</code> (application meta)</p>
</li>
<li>
<p>the test <code>Context</code> (JNDI)</p>
</li>
<li>
<p>the test <code>ApplicationComposers</code> (underlying runner)</p>
</li>
<li>
<p><code>ContextProvider</code>: allow to mock JAXRS contexts</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__mockinjector">@MockInjector</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Allows to mock EJB injections. It decorates a dedicated method returning
an instance (or Class) implementing <code>FallbackPropertyInjector</code>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__webresource">@WebResource</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Allow for web application to add folders containing web resources.</p>
</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/documentation.html" 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>