Un recurso es un
objeto de un programa que proporciona conexiones a los sistemas tales como
servidores de base de datos y sistemas de mensajería. Los componentes de Java
EE pueden acceder a una gran variedad de recursos, incluyendo base de datos,
sesiones de correo, los objetos Java Message Service y direcciones URL. La
plataforma Java EE 7 proporciona mecanismos que permiten acceder a todos estos
recursos de una manera similar. Este capítulo examina varios tipos de recursos
y explica como crearlos.
Aquí se tratan los
siguientes temas:
- Resources and JNDI
Naming
- DataSources Objects and
Connection Pools
- Creating Resources Administratively
Resources and JNDI Naming
En una aplicación
distribuida, los componentes necesitan tener acceso a otros componentes y
recursos, como bases de datos. Por ejemplo, un servlet podría invocar métodos
remotos de un enterprise beans que recupera información de una base de datos.
En la plataforma Java EE, la interfaz de Java Naming and Directory (JNDI),
servicio de nombres, permite a los componentes localizar a otros componentes y
recursos.
Un recurso es un objeto de un programa que
proporciona conexiones a los sistemas, tales como base de datos y sistemas de
mensajería. (Un recurso de conectividad de base de datos de Java se refiere a
veces como una fuente de datos.) Cada objeto de recurso es identificado con un
nombre único, llamado nombre JNDI. Por ejemplo, el nombre JNDI del recurso JDBC
preconfigurado para la base de datos Java DB que se entrega con el servidor
GlassFish es "java:comp/DefaultDataSource".
Un administrador
crea recursos en un espacio de nombres JNDI. En el servidor GlassFish, puede
utilizar la consola de administración o el comando asadmin para crear recursos. Las aplicaciones utilizan
anotaciones para inyectar los recursos. Si una aplicación usa la inyección de
recursos, el servidor GlassFish invoca la API JNDI, la aplicación no esta
obligada a hacerlo. Sin embargo, también es posible para una aplicación
localizar recursos haciendo llamadas directamente a la API JNDI.
Un objeto de recurso
y su nombre JNDI están unidos por la denominación y el servicio de directorio.
Para crear un nuevo recurso, un nuevo nombre/objeto
de enlace se introduce en el espacio de nombres JNDI. Se inyectan recursos
mediante la anotación "@Resource" en una aplicación.
Puede utilizar un
descriptor de (deployment)despliegue para anular la asignación de recursos que
se especifique en una anotación. El uso de un descriptor de despliegue le
permite cambiar de una aplicación mediante un nuevo empaquetamiento que más que
por tanto volver a compilar los archivos de origen y reenvasado. Sin embargo,
para la mayoría de las aplicaciones, un descriptor de despliegue no es
necesario.
DataSource Objects and Connection
Pools
Para
almacenar, organizar y recuperar datos, la mayoría de las aplicaciones utilizan
una base de datos relacional. Los componentes Java EE 7 pueden acceder a base
de datos relacionales a través de la API JDBC. Para obtener información sobre
esta API consulte: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136101.html
En la API JDBC,
bases de datos son accedidas mediante el uso de objetos DataSource. Un DataSource
tiene un conjunto de propiedades que identifican y describen el origen de datos
del mundo real que representa. Estas propiedades incluyen información tal como
la ubicación del servidor de base de datos, el nombre de la base de datos, el
protocolo de red a utilizar para comunicarse con el servidor, y así
sucesivamente. En el servidor GlassFish, una fuente de datos es llamado un
recurso JDBC.
Las aplicaciones
acceden a una fuente de datos mediante una conexión, y un objeto DataSource puede ser pensado como una fábrica
para las conexiones a una fuente de datos en particular, que la instancia de DataSource representa. En una implementación
básica DataSource llama al metodo getConnection que devuelve un objeto de
conexión que es una conexión física con la fuente de datos.
Un objeto DataSource puede ser registrado en un servicio
de nombres JNDI. Si es así, una aplicación puede utilizar el API JNDI para
acceder a ese objeto DataSource, que
luego se puede utilizar para conectar con el origen de datos que representa. El
objeto de conexión que el metodos getConnection
retorna es un identificador de un objeto PooledConnection
en lugar de ser una conexión física. Una aplicación utiliza el objeto de
conexión de la misma manera que utiliza una conexión. La agrupación de
conexiones no tiene efecto en el código de aplicación, excepto que una conexión
agrupada, al igual que todas las conexiones, siempre debe estar cerrada de
forma explícita. Cuando una aplicación cierra una conexión que es agrupada, la
conexión es devuelta al grupo de conexiones reutilizables. La próxima vez que
se llame a getConnection un
identificador de una de estas conexiones agrupadas debería ser retornado si es
que esta disponible. Debido que la agrupación de conexiones evita la creación
de una nueva conexión física cada vez que así lo solicita, las aplicaciones
pueden correr mucho más rápido.
Una agrupación de
conexiones JDBC es un grupo de conexiones reutilizables para una base de datos
particular. Como la creación de cada nueva conexión física es mucho tiempo, el
servidor gestiona un conjunto de conexiones disponibles para mejorar el rendimiento.
Cuando se solicita una conexión, una aplicación obtiene una desde el grupo de
conexiones, cuando una aplicación cierra una conexión, la conexión es retornada
al grupo (pool).
Las aplicaciones que
utilizan la API de persistencia especifican el objeto DataSource que están utilizando en el elemento "jta-data-source" del archvo "persistence.xml".
<jta-data-source>jdbc/MyOrderDB</jta-data-source>
Este suele ser la
única referencia a un objeto JDBC para una unidad de persistencia. El código de
la aplicación no se refiere a ningún objeto JDBC.
Creating Resources
Administratively
Antes de implementar
o correr aplicaciones, puedes necesitar crear recursos para ellas. Una
aplicación puede incluir un archivo "glassfish-resources.xml"
que se puede utilizar para definir los recursos para las aplicaciones y otros.
Puede usar el comando asadmin,
especificando como argumento un archivo llamado glasfish-resources.xml, para
crear los recursos administrativamente, como se muestra:
asadmin create-resources glassfish-resources.xml
El archivo
glassfish-resources.xml se puede crear en cualquier proyecto usando Netbeans
IDE, o a mano. Algunos de los ejemplos JMS utilizan este enfoque para la
creación de recursos. Un archivo para crear los recursos necesarios para
ejemplo JMS simple producer que puede ser encontrado en el directorio
jms/simple/producer/src/main/setup.
También puede
utilizar el comando asadmin create-jms-resource para crear los recursos
necesarios para este ejemplo. Cuando estés listo para usar los recursos,
Debería utilizar el comando list-jms-resources para mostrar sus nombres, y el
comando asadmin delete-jms-resource para eliminarlos, independientemente de la
forma en que ha creado los recursos.
No hay comentarios:
Publicar un comentario