Publicar en Variables de Contexto Objetos del Arbol JNDI

Mediante el componente ContextVariableFromJndiLookup podemos publicar en variables de contexto, los objetos que se encuentran publicados en el árbol JNDI como por ejemplo: el nombre de la aplicación, DataSources, etc.

Al ser publicado en una variable de contexto, pueden ser utilizados en expresiones EL o ser inyectados como dependencia mediante la anotación @In.

Es util, por ejemplo, cuando tenemos una fuente de datos (DataSource) que inyectamos en varios EJBs, mediante la anotación @Resource. Si cambiamos la ruta JNDI de la fuente de datos, podemos cambiarla de una vez en todos los EJBs, si se inyecta la variable creada.

Para crear estas variables de contexto, tenemos que definirlas en el fichero components.xml. Veamos un ejemplo:

<?xml version="1.0" encoding="ISO-8859-1"?>
<components xmlns="http://jboss.com/products/seam/components"
    ...>
 
	<component name="defaultDataSource" class="org.umu.atica.seam.components.ContextVariableFromJndiLookup" installed="true">
		<property name="jndiPath">jdbc/Unica DataSource</property>
		<property name="classType">javax.sql.DataSource</property>
	</component>
 
	<component name="applicationName" class="org.umu.atica.seam.components.ContextVariableFromJndiLookup" installed="true">
		<property name="jndiPath">java:app/AppName</property>
		<property name="classType">java.lang.String</property>
	</component>
 
</components>

Para la definición de la variable de contexto, utilizamos la etiqueta <component> de JBoss Seam, que permite definir componentes a partir de clases Java. Las propiedades de la la etiqueta <component> son:

  • name: el nombre que le damos a la variable de contexto que queremos crear.
  • class: la clase base que define al componente.
  • installed: para indicar que se instale el componente, mediante un valor booleano.

Dentro de la etiqueta <component>, podemos definir etiquetas <property>, para asignar los valores necesarios para la obtención del objeto. La definición es la siguiente:

  • jndiPath: la ruta JNDI del objeto a publicar.
  • classType: El tipo del objeto a recuperar.

Por defecto, el ámbito de la variable de contexto es EVENT, que es análogo a ámbito Request de HTTP.

Como vemos en el ejemplo anterior:

  • La variable de contexto defaultDataSource esta publicada en la ruta JNDI jdbc/Unica DataSource y el tipo devuelto que encapsula al objeto es la interface javax.sql.DataSource.
  • La variable de contexto applicationName esta publicada en la ruta JNDI java:app/AppName y el tipo devuelto que encapsula al objeto es la clase java.lang.String.

La propiedad classType sirve para validar el objeto publicado en el árbol JNDI al arrancar la aplicación. Si el objeto devuelto, no es una instancia de la clase o interface definido en classType, se mostrara un mensaje de warning en la consola de la aplicación, y cuando se recupere el objeto, devolvera el valor null.

Veamos un ejemplo de como inyectar la variable de contexto creada, mediante la anotación @In:

package my.prueba.inyeccion;
 
@Name("miPrueba")
public class MiPrueba {
 
    @In
    private DataSource defaultDataSource;
 
    @In("defaultDataSource")
    private DataSource dataSource;
 
    ...
 
}

JUAN MIGUEL BERNAL GONZALEZ 2014/11/26 18:15

  • fdw2.0/fundeweb2.0/gt/gt-publicar-contexto-objetos-jndi/publicar_en_variables_de_contexto_objetos_del_arbol_jndi.txt
  • Última modificación: 07/11/2017 10:46
  • (editor externo)