Ir al contenido principal

Creación de Datasource en JBoss 7

Retomo mi blog, luego de un corto periodo de vacaciones. 
Durante un repaso desarrollando una aplicación empresarial para un curso de JEE, usando JBoss 7 como servidor de aplicaciones, debí enfrentarme a realizar un datasource para asociarlo al persistence_unit de mi proyecto EJB. Haciéndolo me hice consciente de cómo varía con respecto a las previas versiones de JBoss, me decidí entonces crear este artículo documentando 2 medios, uno que para mí es "el fácil" y el otro, "el difícil".


1. La forma fácil
  • Registrar el driver.

Simplemente se debe ubicar la librería en standalone/deployments
Ubicar el driver de la fuente de datos en standalone/deployments

  • Arrancar el servidor.

En la consola se puede observar que el driver ha sido cargado:

14:38:59,757 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "ojdbc6.jar" 
14:39:00,012 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-14) Deploying JDBC-compliant driver class oracle.jdbc.OracleDriver (version 11.2) 
14:39:00,039 INFO  [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployed "ojdbc6.jar"

  • Crear el datasource desde la consola de administración, por defecto localhost:9990/console/


Ubicar el botón "Nuevo Datasource"

  • Darle nombre al datasource


Dar un nombre al datasource y a JNDI

  • Seleccionar el nuevo Driver

El driver aparece en el listado

  • Ingresar los datos de conexión y finalizar.

Diligenciar los datos de conexión
Iba a nombrarla "manual", pero en ninguno de los 2 casos el datasource se genera "automáticamente", simplemente la nombré difícil debido a que requiere pasos más tediosos. 


  • Crear un nuevo módulo para el driver que usará el datasource.
JBoss 7 hace gala de su diseño modular para aislar ciertos servicios de la aplicación que se está desplegando. El caso del datasource no es una excepción, este será soportado por un módulo. Para este ejemplo creé el módulo para soportar un datasource basado en Postgresql.
Para crear un módulo se debe crear una estructura de carpetas, bajo la carpeta module, donde lo más importante es que incluya una con el nombre main. 
En mi caso creé la estructura org/postgresql/main

Crear la estructura de carpetas para el módulo

  • Incluir libería y archivo de configuración.

Dentro de dicha estructura, en la carpeta main, ubicar el driver jdbc de la fuente de datos y crear un nuevo archivo con el nombre module.xml.

module.xml y librería

  • Registrar el módulo.

El archivo module.xml contiene la información acerca del módulo que soportará el datasource. El archivo debe contener las siguientes líneas, donde es importante resaltar la ruta relativa donde se encuentra el .jar del driver jdbc y el nombre del módulo que lo contiene:
<module xmlns="urn:jboss:module:1.0" name="org.postgresql">
<resources>
<resource-root path="postgresql-9.3-1100.jdbc3.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>

  • Registrar el Datasource

Ya con el módulo creado, es necesario registrar el datasource. Esto se hace en el archivo de configuración de JBoss, en mi caso standalone.xml, el cual se encuentra ubicado en standalone/configuration/. Se incluye entonces la referencia del driver y la definición específica dentro de los tags <driver><datasources>.
<datasources>
<datasource jndi-name="[cadena jndi, generalmente java:jboss/fuente]" pool-name="postgresDS" enabled="true" jta="false" use-java-context="true">
<connection-url>jdbc:postgresql://[server]:5432/[database]</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql</driver>
<pool>
<min-pool-size>2</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>[usuario]</user-name>
<password>[password]</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<useFastFail>false</useFastFail>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
</statement>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql"/>
</drivers>
</datasources>

3. Referenciar en el persistence_unit.

Para lograrlo, simplemente se relaciona la cadena jndi utilizada en el archivo META-INF/persistente.xml (descriptor para JPA) y se detalla el tag persistence_unit:
<persistence-unit name="persistenceunit" transaction-type="JTA">
<jta-data-source>java:jboss/fuente</jta-data-source>
</persistence-unit>
Al reiniciar el server, el datasource está registrado y funcional.

Note que al finalizar cualquiera de las dos formas, el archivo standalone.xml es modificado y mientras la primera registra el datasource a partir del driver en el contexto, la segunda lo registra a partir de la definición de un módulo.

Comentarios

Entradas populares de este blog

Proceso para la creación de la Arquitectura

Hoy quiero contarles acerca de un modelo que he adoptado para la construcción y entrega de la Arquitectura de Software, el cual lo he relacionado con éxito al interior de la compañía para la cual trabajo y que considero, bien puede adaptarse a cualquier tipo de especialidad de la Arquitectura Empresarial. Cuando era desarrollador escuchaba hablar constantemente acerca de varias metodologías de desarrollo. Durante mucho tiempo apliqué RUP, XP y metodologías AGILES, usé PSP y TSP como procesos de desarrollo. Pero durante todo ese tiempo nunca oí hablar de metodologías orientadas a la generación de la Arquitectura de Software, aún luego de comenzar a estudiar y al día de hoy he tenido muy pocas referencias. Quiero aclarar que existen varios modelos y  frameworks bastante conocidos para la Arquitectura Empresarial que son confrontados a profundidad en unas entregas muy completas de Microsoft, estas pueden estudiarse en este link . Pues bien, el método al que me refiero es ACDM, ...

Expandir espacio en disco duro en Virtual Box y con Partition Logic

Cuando nos quedamos sin espacio en nuestra máquina virtual, tenemos problemas para seguir usándola adecuadamente. Los siguientes son  los pasos que seguí para aumentar el espacio en disco duro, para la unidad principal de una máquina virtual de Windows XP instalada en mi Mac Book.  Probé una herramienta llamada Partition Logic   y, debido a que no la conocía, decidí documentarlo. Tenía asignadas 5GB a la unidad donde está instalado el sistema operativo, y se veía así: Mi máquina, con 5GB de tamaño en disco duro. 1. Redimensionar la unidad vdi. el siguiente es el comando que realiza toda la magia en VirtualBox: VBoxManage modifyhd "ruta/unidad.vdi" --resize [tamaño] En mi caso aumenté el tamaño a 20GB. VBoxManage modifyhd "/Users/oscar/VirtualBox VMs/WindowsXP/WindowsXPClone.vdi" --resize 20000 Como anotación,  debí clonar la unidad, pues había creado el disco de tamaño fijo en Virtual Box y no me permitía aumentarlo (generaba error...

Atributos de Calidad

¿Qué son los Atributos de Calidad? Los Arquitectos debemos participar en el entendimiento de las necesidades de los usuarios. Sí, esa es nuestra principal responsabilidad.  En mi experiencia he debido iniciar con leer términos de referencia para aplicar a licitaciones públicas y privadas y luego acompañar al equipo de análisis en el levantamiento de requerimientos. Los usuarios finales, a excepción de algunos muy técnicos, hablarán en el lenguaje del negocio, de otros sistemas que conocen, de lo que hace la competencia, de lo que otro proveedor les contó, de lo que alguno de sus más influyentes operarios conoce o del patrón de trabajo que ejecutan a diario. Muy pocas veces nos dirán exactamente lo que quieren y por eso debemos estar presentes; debemos ayudar a traducir esos relatos prosaicos de necesidades a requerimientos técnicos.  Los requerimientos técnicos se dividen principalmente en 2: los funcionales (functional requirements) y los no funcionales (Non-functi...