blob: 9c0dff6b73328a98f6703572f1c34612dbbf49ce [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>OpenEJB Embedded Configuration</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h1 id="_defaults_overrides_and_order" class="sect0">Defaults, Overrides and Order</h1>
<div class="paragraph">
<p>When booting up OpenEJB for testing via the <code>LocalInitialContextFactory</code>
or the newer <code>EJBContainer.createEJBContainer()</code> API part of EJB 3.1
there is quite a bit of flexibility to how things are configured.</p>
</div>
<div class="paragraph">
<p>OpenEJB will function fine with no configuration at all and will happily
create things as needed and select defaults for everything. So in a real
sense configuration is all about overriding those defaults. There are
several places to put your overrides and an a specific order how they
are applied. Here they are in order of preference; 1 = highest, 5 =
lowest.</p>
</div>
<div class="paragraph">
<p><strong>InitialContext</strong></p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>InitialContext properties</p>
</li>
<li>
<p>jndi.properties from the classpath</p>
</li>
<li>
<p>System properties</p>
</li>
<li>
<p>openejb.xml declarations/properties</p>
</li>
<li>
<p>service-jar.xml declarations/properties (internal concept) }</p>
</li>
</ol>
</div>
<div class="paragraph">
<p><strong>EJBContainer API</strong></p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>EJBContainer.createEJBContainer(Map) entries</p>
</li>
<li>
<p>System properties</p>
</li>
<li>
<p>openejb.xml declarations/properties</p>
</li>
<li>
<p>service-jar.xml declarations/properties (internal concept)</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>It opens up some interesting possibilities in how you configure your
environment. You could do 100% of your configuration in your test case
via InitialContext propertes, or you could do say 80% in a
jndi.properties file or openejb.xml file and 20% in your test case via
InitialContext properties. You can put 100% of your configuration in a
<code>jndi.properties</code> or <code>openejb.xml</code> file and override them via
<code>InitialContext</code> properties.</p>
</div>
<div class="paragraph">
<p>You can manage the properties how you wish and there is no need for
redundant definitions if you do not want them.</p>
</div>
<h1 id="_what_is_configurable" class="sect0">What is configurable?</h1>
<div class="paragraph">
<p>Everything you can configure via an openejb.xml (minus the element) can
be configured/overridden via properties. See
<a href="configuring-containers-in-tests.html">Configuring Containers in
Tests</a> and <a href="configuring-datasources-in-tests.html">Configuring
DataSources in Tests</a>.</p>
</div>
<div class="paragraph">
<p>Everything in your logging.properties can be configured/overridden via
properties. See <a href="configuring-logging-in-tests.html">Configuring
Logging in Tests</a>.</p>
</div>
<div class="paragraph">
<p>The properties of persistence units declared in a persistence.xml can be
configured/overridden via properties. See
<a href="configuring-persistenceunits-in-tests.html">Configuring
PersistenceUnits in Tests</a>.</p>
</div>
<div class="paragraph">
<p>OpenEJB has many flags that can also be set as properties. See
<a href="properties-listing.html">OpenEJB Properties</a> for details on those.</p>
</div>
<h1 id="_example_of_using_initialcontext_properties" class="sect0">Example of using InitialContext properties</h1>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">Properties p = new Properties();
// set the initial context factory
p.put("java.naming.factory.initial ", "org.apache.openejb.client.LocalInitialContextFactory");
// change some logging
p.put("log4j.category.OpenEJB.options ", " debug");
p.put("log4j.category.OpenEJB.startup ", " debug");
p.put("log4j.category.OpenEJB.startup.config ", " debug");
// create some resources
p.put("movieDatabase", "new://Resource?type=DataSource");
p.put("movieDatabase.JdbcDriver ", " org.hsqldb.jdbcDriver");
p.put("movieDatabase.JdbcUrl ", " jdbc:hsqldb:mem:moviedb");
// override properties on your "movie-unit" persistence unit
p.put("movie-unit.hibernate.dialect ", "org.hibernate.dialect.HSQLDialect");
// set some openejb flags
p.put("openejb.jndiname.format ", " {ejbName}/{interfaceClass}");
p.put("openejb.descriptors.output ", " true");
p.put("openejb.validation.output.level ", " verbose");
InitialContext initialContext = new InitialContext(p);</code></pre>
</div>
</div>
<h1 id="_example_of_using_jndi_properties" class="sect0">Example of using jndi.properties</h1>
<div class="paragraph">
<p>Here&#8217;s an example of the same properties being specified via a
<code>jndi.properties file</code>. This file just needs to be placed in the
classpath, not in a subdirectory of a path in the classpath such as
META-INF, but at the root of any of the paths in the classpath.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-properties" data-lang="properties"># set the initial context factory
java.naming.factory.initial = org.apache.openejb.client.LocalInitialContextFactory
# change some logging
log4j.category.OpenEJB.options = debug
log4j.category.OpenEJB.startup = debug
log4j.category.OpenEJB.startup.config = debug
# create some resources
movieDatabase = new://Resource?type=DataSource
movieDatabase.JdbcDriver = org.hsqldb.jdbcDriver
movieDatabase.JdbcUrl = jdbc:hsqldb:mem:moviedb
# override properties on your "movie-unit" persistence unit
movie-unit.hibernate.dialect = org.hibernate.dialect.HSQLDialect
# set some openejb flags
openejb.jndiname.format = {ejbName}/{interfaceClass}
openejb.descriptors.output = true
openejb.validation.output.level = verbose</code></pre>
</div>
</div>
<div class="paragraph">
<p>Then OpenEJB can be booted via the <code>InitialContext</code> as normal.
Properties can still be used to override any of the above properties:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">Properties p = new Properties();
p.put("openejb.validation.output.level ", " medium");
InitialContext initialContext = new InitialContext(p);</code></pre>
</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>