Declaraciones de recursos de aplicación Java EE
Puede configurar las aplicaciones Java™ EE (Java Enterprise Edition) para declarar dependencias sobre recursos externos y parámetros de configuración. Estos recursos se pueden inyectar en el código de la aplicación o puede que la aplicación acceda a ellos a través de JNDI (Java Naming and Directory Interface).
Las referencias de recursos permiten a una aplicación definir y utilizar nombres lógicos que puede enlazar a recursos cuando se despliega la aplicación.
Las aplicaciones Java EE pueden declarar los siguientes tipos de recursos: entradas de entorno simple, referencias de EJB (Enterprise JavaBeans), referencias de servicio web, referencias de fábrica de conexiones de gestor de recursos, referencias de entorno de recursos, referencias de destino de mensaje, referencias de unidades de persistencia y referencias de contexto de persistencia.
Entradas de entorno simple
Puede definir parámetros de configuración en las aplicaciones Java EE para personalizar la lógica empresarial utilizando entradas de entorno simple. Tal como se describe en la aplicación Java EE 6, los valores de entrada de entorno simple pueden ser uno de los tipos Java siguientes: String, Character, Byte, Short, Integer, Long, Boolean, Double, Float, Class y cualquier subclase de Enum.
El proveedor de la aplicación debe declarar todas las entradas de entorno simple a las que se accede desde el código de la aplicación. Las entradas de entorno simple se declaran utilizando anotaciones (javax.annotation.Resource) en el código de la aplicación o utilizando elementos env-entry en el descriptor de despliegue XML.
En el ejemplo siguiente de una aplicación, las anotaciones declaran entradas de entorno:
// Intervalo de reintento en
milisegundos
@Resource long retryInterval = 3000;
En el ejemplo anterior, el valor predeterminado del campo es 3000. Puede utilizar un env-entry-value, que haya definido en el descriptor de despliegue XML para cambiar este valor.
En el ejemplo siguiente, una aplicación declara una entrada de entorno simple del tipo Class, define la clase que se debe inyectar utilizando un elemento env-entry-value en el descriptor de despliegue XML.
@Resource(name=TraceFormatter) Class<?> traceFormatter;
<env-entry>
<env-entry-name>TraceFormatter</env-entry-name>
<env-entry-value>com.sample.trace.StdOutTraceFormatter</env-entry-value>
</env-entry>
En el ejemplo anterior, el valor del campo se establece en el objeto de clase com.sample.trace.StdOutTraceFormatter.
En el ejemplo siguiente, una aplicación que declara una entrada de entorno simple denominada validationMode como subclase de Enum en la clase com.sample.Order y configura el valor de Enum de CALLBACK para inyectar utilizando los elementos del descriptor de despliegue XML.
<env-entry>
<env-entry-name>JPAValidation</env-entry-name>
<env-entry-type>javax.persistence.ValidationMode</env-entry-type>
<env-entry-value>CALLBACK</env-entry-value>
<injection-target>
<injection-target-class>com.sample.Order</injection-target-class>
<injection-target-name>validationMode</injection-target-name>
</injection-target>
</env-entry>
En el ejemplo anterior, el campo validationMode se establece en el valor Enum de CALLBACK. Utilice el mismo procedimiento cuando utilice anotaciones y código XML para declarar entradas de entorno simple; por ejemplo:
@Resource (name=JPAValidation)
javax.persistence.ValidationMode validationMode;
<env-entry>
<env-entry-name>JPAValidation</env-entry-name>
<env-entry-value>CALLBACK</env-entry-value>
</env-entry>
Referencias de EJB (Enterprise JavaBeans)
Tal como se describe en la especificación Java EE 6, puede desarrollar las aplicaciones Java EE para que declaren a factorías de enterprise bean o instancias de enterprise bean utilizando nombres lógicos que se conocen como referencias de EJB.
Cuando una aplicación declara una referencia a un EJB, el EJB al que se hace referencia se resolverá con una de las técnicas siguientes.
- Especifique un enlace EJB en el archivo ibm-ejb-jar-bnd.xml o el archivo ibm-web-bnd.xml
- Especifique un elemento <ejb-link> en el archivo ejb-jar.xml o el archivo web.xml
- Especifique un atributo beanName en la anotación javax.ejb.EJB
- Especifique un elemento <lookup-name> en el archivo ejb-jar.xml o el archivo web.xml
- Especifique un atributo de búsqueda en la anotación javax.ejb.EJB
- Localice un enterprise bean que implemente la interfaz declarada como el tipo de la referencia EJB (que se conoce como AutoLink).
El contenedor de EJBintenta resolver la referencia de EJB utilizando las técnicas anteriores en el orden en que aparecen en la lista.
En el ejemplo siguiente, una aplicación declara una referencia de EJB utilizando una anotación, y proporciona un enlace para la resolución.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-ref name="Cart" binding-name="java:app/SampleEJB/SampleCart"/>
En el ejemplo siguiente, una aplicación declara una referencia de EJB utilizando una anotación y proporciona un elemento ejb-link para la resolución.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<ejb-link>SampleEJB/SampleCart</ejb-link>
</ejb-local-ref>
En el ejemplo siguiente, una aplicación declara una referencia de EJB utilizando una anotación y proporciona un atributo de búsqueda para la resolución, del bean de origen com.sample.SourceBean.
@EJB(name="Cart" lookup="java:app/SampleEJB/SampleCart")
Cart shoppingCart;
Como alternativa, la aplicación puede declarar la referencia de EJB utilizando el elemento <lookup-name> en el descriptor de despliegue XML, como en el ejemplo siguiente.
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<lookup-name>java:app/SampleEJB/SampleCart</lookup-name>
<injection-target>
<injection-target-class>com.sample.SourceBean</injection-target-class>
<injection-target-name>ShoppingCart</injection-target-name>
</injection-target>
</ejb-local-ref>
En el ejemplo siguiente, una aplicación declara una referencia de EJB utilizando una anotación y proporciona un atributo beanName para la resolución.
@EJB(name="Cart" beanName="SampleEJB/SampleCart")
Cart shoppingCart;
Referencias de entorno de recursos
Tal como se describe en la especificación Java EE 6, puede desarrollar aplicaciones para declarar referencias a objetos administrados que están asociados a un recurso, como una instancia de Connecter CCI InteractionSpec u otros tipos de objeto gestionado por el contenedor de EJB, incluidos javax.transaction.UserTransaction, javax.ejb.EJBContext, javax.ejb.TimerServcie, org.omg.CORBA.ORB, javax.validation.Validator, javax.validation.ValidatorFactory o javax.enterprise.inject.spi.BeanManager.
Cuando una aplicación declara una referencia a un objeto administrado, debe proporcionar un enlace al objeto administrado cuando se despliega la aplicación. Puede proporcionar el enlace utilizando la consola administrativa cuando despliegue la aplicación o puede añadir el enlace al archivo XML de enlace de WebSphere, ibm-ejb-jar-bnd.xml o a ibm-web-bnd.xml.
En el ejemplo siguiente, una aplicación declara una referencia de entorno de recursos y proporciona un enlace al recurso:
@Resource(name="jms/ResponseQueue")
Queue responseQueue;
<session name="StatelessSampleBean">
<resource-env-ref name="jms/ResponseQueue" binding-name="Jetstream/jms/ResponseQueue"/>
</session>
Como alternativa, la aplicación puede declarar la referencia de entorno de recursos utilizando el atributo de búsqueda, y no requiere un enlace, como en el ejemplo siguiente:
@Resource(name="jms/ResponseQueue", lookup="Jetstream/jms/ResponseQueue")
Queue responseQueue;
<resource-env-ref>
<resource-env-ref-name>jms/ResponseBean</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</resource-env-ref>
Cuando una aplicación declara una referencia a un tipo de objeto gestionado de contenedor, no se utiliza un enlace. El contenedor proporciona la instancia correcta del objeto referenciado. En el ejemplo siguiente, una aplicación declara una referencia de entorno de recursos a un objeto gestionado por contenedor:
@Resource
javax.validation.Validator validator;
Referencias de recursos a referencias de recursos
@Resource(name="java:global/env/jdbc/ds1ref",
lookup="java:global/env/jdbc/ds1",
authenticationType=Resource.AuthenticationType.APPLICATION,
shareable=false)
DataSource ds1ref;
@Resource(name="java:global/env/jdbc/ds1refref",
lookup="java:global/env/jdbc/ds1ref",
authenticationType=Resource.AuthenticationType.APPLICATION,
shareable=true)
DataSource ds1refref;
La búsqueda utiliza el anidamiento de referencias más interno, que en este caso es "java:global/env/jdbc/ds1ref".