blob: 70c1794aa7c7c7550493b1ff1c1f65d9e8f41e7b [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>Using EnvEntries</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>La anotación <code>@Resource</code> se puede usar para inyectar varias cosas,
incluyendo fuentes de datos, temas, colas, etc. La mayoría
objetos suministrados por el contenedor.</p>
</div>
<div class="paragraph">
<p>Sin embargo, es posible proporcionar sus propios valores para inyectarlos mediante una etiqueta
<code>&lt;env-entry&gt;</code> en su descriptor de implementación <code>ejb-jar.xml</code> o` web.xml`.
Los tipos <code>&lt;env-entry&gt;</code> compatibles con Java EE 6 están limitados a los siguientes:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>java.lang.String</p>
</li>
<li>
<p>java.lang.Integer</p>
</li>
<li>
<p>java.lang.Short</p>
</li>
<li>
<p>java.lang.Float</p>
</li>
<li>
<p>java.lang.Double</p>
</li>
<li>
<p>java.lang.Byte</p>
</li>
<li>
<p>java.lang.Character</p>
</li>
<li>
<p>java.lang.Boolean</p>
</li>
<li>
<p>java.lang.Class</p>
</li>
<li>
<p>java.lang.Enum (any enum)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Consulte también el ejemplo <a href="../custom-injection">Custom Injection</a> para una
funcionalidad de TomEE y OpenEJB que le permitirá usar más que solo los anteriores
tipos, así como declarar elementos <code>&lt;env-entry&gt;</code> con un archivo de propiedades.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_usando_resource_para_propiedades_básicas">Usando @Resource para propiedades básicas</h2>
<div class="sectionbody">
<div class="paragraph">
<p>El uso de la anotación <code>@Resource</code> no se limita a los metodos establecedores (setters). Por
ejemplo, esta anotación podría haberse utilizado en el correspondiente <em>campo</em> así:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Resource
private int maxLineItems;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Un ejemplo más completo podría verse así:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.injection.enventry;
import javax.annotation.Resource;
import javax.ejb.Singleton;
import java.util.Date;
@Singleton
public class Configuration {
@Resource
private String color;
@Resource
private Shape shape;
@Resource
private Class strategy;
@Resource(name = "date")
private long date;
public String getColor() {
return color;
}
public Shape getShape() {
return shape;
}
public Class getStrategy() {
return strategy;
}
public Date getDate() {
return new Date(date);
}
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Aquí tenemos un bean <code>@Singleton</code> llamado <code>Configuration</code> que tiene la
siguientes propiedades (elementos <code>&lt;env-entry&gt;</code>)</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String color</p>
</li>
<li>
<p>Shape shape</p>
</li>
<li>
<p>Class strategy</p>
</li>
<li>
<p>long date</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="_suministro_de_valores_de_resource_para_elementos_en_ejb_jar_xml">Suministro de valores de @Resource para elementos en ejb-jar.xml</h3>
<div class="paragraph">
<p>Los valores de nuestras propiedades de color, forma, estrategia y fecha
se suministran a través de elementos <code>&lt;env-entry&gt;</code> en el archivo <code>ejb-jar.xml</code> o
Archivo <code>web.xml</code> así:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" metadata-complete="false"&gt;
&lt;enterprise-beans&gt;
&lt;session&gt;
&lt;ejb-name&gt;Configuration&lt;/ejb-name&gt;
&lt;env-entry&gt;
&lt;env-entry-name&gt;org.superbiz.injection.enventry.Configuration/color&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;java.lang.String&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;orange&lt;/env-entry-value&gt;
&lt;/env-entry&gt;
&lt;env-entry&gt;
&lt;env-entry-name&gt;org.superbiz.injection.enventry.Configuration/shape&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;org.superbiz.injection.enventry.Shape&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;TRIANGLE&lt;/env-entry-value&gt;
&lt;/env-entry&gt;
&lt;env-entry&gt;
&lt;env-entry-name&gt;org.superbiz.injection.enventry.Configuration/strategy&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;java.lang.Class&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;org.superbiz.injection.enventry.Widget&lt;/env-entry-value&gt;
&lt;/env-entry&gt;
&lt;env-entry&gt;
&lt;description&gt;The name was explicitly set in the annotation so the classname prefix isn't required&lt;/description&gt;
&lt;env-entry-name&gt;date&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;java.lang.Long&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;123456789&lt;/env-entry-value&gt;
&lt;/env-entry&gt;
&lt;/session&gt;
&lt;/enterprise-beans&gt;
&lt;/ejb-jar&gt;</code></pre>
</div>
</div>
<div class="sect3">
<h4 id="_usando_el_atributo_resource_code_name_code">Usando el atributo @Resource <code>name</code></h4>
<div class="paragraph">
<p>Tenga en cuenta que <code>date</code> fue referenciada por <code>nombre</code> como:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Resource(name = "date")
private long date;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Cuando se utiliza el <code>@Resource(name)</code>, no es necesario especificar el
nombre de clase del bean y puede hacerlo brevemente así:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java"> &lt;env-entry&gt;
&lt;description&gt;The name was explicitly set in the annotation so the classname prefix is not required&lt;/description&gt;
&lt;env-entry-name&gt;date&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;java.lang.Long&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;123456789&lt;/env-entry-value&gt;
&lt;/env-entry&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Por el contrario, <code>color</code> no fue referenciado por <code>nombre</code></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Resource
private String color;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Cuando algo no está referenciado por <code>nombre</code> en la anotación <code>@Resource</code>
se crea un nombre predeterminado. El formato es esencialmente este:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">bean.getClass() + "/" + field.getName()</code></pre>
</div>
</div>
<div class="paragraph">
<p>Entonces, el <code>nombre</code> predeterminado de la propiedad <code>color</code> anterior termina siendo
<code>org.superbiz.injection.enventry.Configuration/color</code>. Este es el nombre que
debemos usar cuando intentamos decalre un valor para él en xml.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java"> &lt;env-entry&gt;
&lt;env-entry-name&gt;org.superbiz.injection.enventry.Configuration/color&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;java.lang.String&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;orange&lt;/env-entry-value&gt;
&lt;/env-entry&gt;</code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="__resource_y_enum_enumeraciones">@Resource y Enum (enumeraciones)</h4>
<div class="paragraph">
<p>El campo <code>shape</code> es en realidad un tipo Java Enum personalizado</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.injection.enventry;
public enum Shape {
CIRCLE,
TRIANGLE,
SQUARE
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>A partir de Java EE 6, los tipos java.lang.Enum están permitidos como elementos <code>&lt;env-entry&gt;</code>.
La declaración de uno en xml se realiza utilizando el nombre de clase de la enumeración real
al igual que:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java"> &lt;env-entry&gt;
&lt;env-entry-name&gt;org.superbiz.injection.enventry.Configuration/shape&lt;/env-entry-name&gt;
&lt;env-entry-type&gt;org.superbiz.injection.enventry.Shape&lt;/env-entry-type&gt;
&lt;env-entry-value&gt;TRIANGLE&lt;/env-entry-value&gt;
&lt;/env-entry&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>¡No use <code>&lt;env-entry-type&gt; java.lang.Enum &lt;/env-entry-type&gt;</code> o no funcionará!</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_configurationtest">ConfigurationTest</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.injection.enventry;
import junit.framework.TestCase;
import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
import java.util.Date;
public class ConfigurationTest extends TestCase {
public void test() throws Exception {
final Context context = EJBContainer.createEJBContainer().getContext();
final Configuration configuration = (Configuration) context.lookup("java:global/injection-of-env-entry/Configuration");
assertEquals("orange", configuration.getColor());
assertEquals(Shape.TRIANGLE, configuration.getShape());
assertEquals(Widget.class, configuration.getStrategy());
assertEquals(new Date(123456789), configuration.getDate());
}
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ejecución">Ejecución</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="console">-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running org.superbiz.injection.enventry.ConfigurationTest
Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06
http://tomee.apache.org/
INFO - openejb.home = /Users/dblevins/examples/injection-of-env-entry
INFO - openejb.base = /Users/dblevins/examples/injection-of-env-entry
INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-env-entry/target/classes
INFO - Beginning load: /Users/dblevins/examples/injection-of-env-entry/target/classes
INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-env-entry
WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.
INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)
INFO - Auto-creating a container for bean Configuration: Container(type=SINGLETON, id=Default Singleton Container)
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.injection.enventry.ConfigurationTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Enterprise application "/Users/dblevins/examples/injection-of-env-entry" loaded.
INFO - Assembling app: /Users/dblevins/examples/injection-of-env-entry
INFO - Jndi(name="java:global/injection-of-env-entry/Configuration!org.superbiz.injection.enventry.Configuration")
INFO - Jndi(name="java:global/injection-of-env-entry/Configuration")
INFO - Jndi(name="java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest!org.superbiz.injection.enventry.ConfigurationTest")
INFO - Jndi(name="java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest")
INFO - Created Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)
INFO - Created Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)
INFO - Started Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)
INFO - Started Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)
INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-env-entry)
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.664 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_apis_used">APIs Used</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="../../../jakartaee-8.0/javadoc/javax/annotation/Resource.html">javax.annotation.Resource</a></p>
</li>
<li>
<p><a href="../../../jakartaee-8.0/javadoc/javax/ejb/Singleton.html">javax.ejb.Singleton</a></p>
</li>
<li>
<p><a href="../../../jakartaee-8.0/javadoc/javax/ejb/embeddable/EJBContainer.html">javax.ejb.embeddable.EJBContainer</a></p>
</li>
</ul>
</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>