blob: 67ea925821f69803cf8bc15ed7bd5deef31eeda6 [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>Configuring DataSources in tomee.xml</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>The <em>_ element is used to configure a _javax.sql.DataSource</em>. It is also
used to configure other resources like Timers, Topics, Queues. We will
see some examples of using to configure a DataSource.</p>
</div>
<div class="paragraph">
<p>The element is designed after <code>@Resource</code> annotation and has similar
attributes.</p>
</div>
<div class="paragraph">
<p>For example, this annotation in your bean:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Resource(name = "myDerbyDatasource", type = javax.sql.DataSource.class)</code></pre>
</div>
</div>
<div class="paragraph">
<p>Would map to a Resource declared in your openejb.xml as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Resource id="myDerbyDatasource" type="javax.sql.DataSource"&gt;
. . . .
&lt;Resource&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Note that in the xml element, the <em>type</em> value of <em>javax.sql.DataSource</em>
can abbreviated to just <em>DataSource</em> as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Resource id="myDerbyDatasource" type="DataSource"&gt;
. . . .
&lt;Resource&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>It is also possible to specify the path to the driver jar file using a
classpath attribute like so:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Resource id="myDerbyDatasource" type="DataSource" classpath="/path/to/driver.jar"&gt;
. . . .
&lt;Resource&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>&#8230;&#8203;Or in a <a href="http://maven.apache.org/">Maven</a> environment like so:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Resource id="myDerbyDatasource" type="DataSource" classpath="mvn:org.apache.derby:derby:10.10.1.1"&gt;
. . . .
&lt;Resource&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>See <a href="containers-and-resources.html">Containers and Resources</a> for a
complete list of supported DataSource properties.</p>
</div>
<div class="paragraph">
<p>See <a href="datasource-password-encryption.html">DataSource Password
Encryption</a> for information on specifying non-plain-text database
passwords in your openejb.xml file.</p>
</div>
<div class="paragraph">
<p>See <a href="common-datasource-configurations.html">Common DataSource
Configurations</a> for a list of the commonly used databases and their
driver configurations.</p>
</div>
<div class="paragraph">
<p>See <a href="datasource-configuration-by-creator.html">DataSource
Configuration by Creator</a> for a list of the different properties
supported for each data source creator.</p>
</div>
<div class="paragraph">
<p>You may also need data partitioning per customer or depending on any
other business criteria. That&#8217;s also an available feature. See
<a href="dynamic-datasource.html">Dynamic Datasource</a> for more details.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_jndi_names_for_configured_datasources">JNDI names for configured DataSources</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_example_1">Example 1</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Resource id="Default JDBC Database" type="DataSource"&gt;
. . . . .
&lt;/Resource&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>The global jndi name would be <em>java:openejb/Resource/Default JDBC
Database</em></p>
</div>
</div>
<div class="sect2">
<h3 id="_example_2">Example 2</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Resource id="Derby Database" type="DataSource"&gt;
. . . . .
&lt;/Resource&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>The global jndi name would be <em>java:openejb/Resource/Derby Database</em></p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_obtaining_a_datasource">Obtaining a DataSource</h2>
<div class="sectionbody">
<div class="paragraph">
<p>DataSource references in your ejb should get automatically mapped to the
Resource you declare. The shortest and easiest rule is that <em>if your
reference name matches a Resource in your openejb.xml, that&#8217;s the one
you get</em>.  Essentially, the rules for mapping are as follows.</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Name Attribute Match - <code>@Resource</code> with a name attribute matching the
resource name gets that resource injected</p>
</li>
<li>
<p>Injected Name Match - variable name matching the resource name gets
that resource injected</p>
</li>
<li>
<p>No Match - nothing matches a resource name, so the first resource
available gets injected</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>There are various ways one could obtain a DataSource now. Lets take an
example of Derby.</p>
</div>
<div class="paragraph">
<p>With a Resource declaration in your openejb.xml like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;Resource id="myDerbyDatabase" type="DataSource"&gt;
. . . . .
&lt;/Resource&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>There are several possible ways to refer to it, as follows.</p>
</div>
<div class="paragraph">
<p><em>BY matching variable name to resource name</em></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Stateless
public class FooBean {
@Resource DataSource myDerbyDatabase;
}</code></pre>
</div>
</div>
<div class="paragraph">
<p><em>OR BY matching name</em></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Stateless
public class FooBean {
@Resource(name="myDerbyDatabase")
DataSource dataSource;
}</code></pre>
</div>
</div>
<div class="paragraph">
<p><em>OR BY JNDI lookup</em></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Resource(name="myDerbyDatabase", type=javax.sql.DataSource.class)
@Stateless
public class FooBean {
public void setSessionContext(SessionContext sessionContext) {
DataSource dataSource = (DataSource)
sessionContext.lookup("myDerbyDatabase");
}
public void someOtherMethod() throws Exception {
InitialContext initialContext = new InitialContext();
DataSource dataSource = (DataSource)
initialContext.lookup("java:comp/env/myDerbyDatabase");
}
}</code></pre>
</div>
</div>
<div class="paragraph">
<p><em>OR</em></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;resource-ref&gt;
&lt;res-ref-name&gt;myDerbyDatabase&lt;/res-ref-name&gt;
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
&lt;/resource-ref&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p><em>OR</em></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;resource-ref&gt;
&lt;res-ref-name&gt;jdbc/myDerbyDatabase&lt;/res-ref-name&gt;
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
&lt;/resource-ref&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p><em>OR</em></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;resource-ref&gt;
&lt;res-ref-name&gt;someOtherName&lt;/res-ref-name&gt;
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
&lt;mapped-name&gt;myDerbyDatabase&lt;/mapped-name&gt;
&lt;/resource-ref&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/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>