Como dijéramos en el anterior post >, indagaremos en los CLI deployment archives como una alternativa a definir las fuentes de datos, resource adapters y colas de mensajes dentro de un EAR (lo cual JBoss 7 ya no soporta) para dar cohesión a una app hecha de múltiples componentes.
CLI
CLI significa Command Line Interface >> y es una consola de comandos a la cual se accede en $JBOSS_7/bin/jboss-cli.sh (y no jboss-admin.sh, como dice el link). El servidor tiene que estar corriendo y podemos conectarnos – por defecto a localhost:9999 – con connect y ver los comandos disponibles con help –commands
[disconnected /] connect [standalone@localhost:9999 /] help --commands Commands available in the current context: batch cd clear command connect connection-factory data-source deploy deployment-info echo-dmr help history jms-queue jms-topic ls pwd quit read-attribute read-operation undeploy version xa-data-source To read a description of a specific command execute 'command_name --help'.
Existen comandos y operaciones. Los primeros son, por así decirlo, simplificaciones user-friendly de los segundos. Con las operaciones se puede hacer casi todo…
Archivos de deploy CLI
La idea es generar un archivo de tipo CLI >> (que es una forma de JAR) que incluye todas las librerías requeridas para el proyecto, así como dos archivos con instrucciones de deploy (deploy.scr) y undeploy (undeploy.scr).
Para ésto, creamos una carpeta en donde dejamos nuestro WAR, el RAR de la cola de mensajes (el cual trae adentro las instrucciones de configuración, como vimos previamente >>) – éste debe ir empaquetado y no como carpeta, el JAR conector a la base de datos y los dos mentados archivos de instrucciones
\- |--META-INF |--MANIFEST.MF |--miApp.war |--activemq-rar-5.6.0.rar |--jtds-1.2.6.jar |--deploy.scr |--undeploy.scr
Luego nos situamos en esta carpeta y ejecutamos
jar cf test.cli *
para empaquetarlo.
(La carpeta META-INF/ no debemos proveerla, sino que se crea al empaquetar con el comando jar, y de hecho dudo de que se esté utilizando)
Nota respecto al JTDS
Nótese que como el conector de Microsoft SQL Server jtds-1.2.6.jar no respeta la convención JDBC 4, si intentamos instalarlo tan sólo deployándolo se cae con
Failed to execute archive script: {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => "JBAS014654: Composite operation was rolled back","Operation step-3" => {"JBAS014771: Services with missing/unavailable dependencies" => ["jboss.driver-demander.java:jboss/datasources/miDS is missing [jboss.jdbc-driver.applications/jtds-1_2_6_jar]"]}}} [standalone@localhost:9999 /] data-source add --help
por lo que, dado que aparentemente no es trivial hacer la configuración de un módulo vía CLI, le aplicaremos el siguiente hack >> que consiste en crear un archivo META-INF/services/java.sql.Driver en el JAR, cuyo contenido es una única línea con el nombre de la implementación de esa interfaz
net.sourceforge.jtds.jdbc.Driver
Ésto se hace creando en cualquier parte una carpeta META-INF/services, poniéndole adentro el susodicho archivo, dejándola al lado del JAR y ejecutando el siguiente update para que la carpeta sea empaquetada dentro del JAR
jar -uf jtds-1.2.6.jar META-INF/services/java.sql.Driver
deploy
Entonces, volviendo a lo nuestro, el archivo deploy.scr va a ser algo así
/subsystem=resource-adapters/resource-adapter=activemq-rar-5.6.0.rar:add(archive=activemq-rar-5.6.0.rar) deploy jtds-1.2.6.jar data-source add --name=miDS --connection-url=jdbc:jtds:sqlserver://server:1433/miDB;loginTimeout=30 --jndi-name=java:jboss/datasources/mi --driver-name=jtds-1.2.6.jar --driver-class=net.sourceforge.jtds.jdbc.Driver deploy miApp.war
Leyéndolo línea a línea lo que instruímos es a
- Deployar el RAR como Resource Adapter – no sirve usar el comando deploy en este caso porque no lo reconoce como RAR como cuando lo dejamos en la carpeta deployers/ sino que hay que especificárselo >>.
- Deployar el conector a MSSQL.
- Crear el data-source de nuestra app usando el conector ya creado.
- Deployar el WAR de la aplicación, finalmente.
Con ésto, desde la consola CLI ya podemos ejecutar
[standalone@localhost:9999 /] deploy ~/ruta/a/archivo/test.cli
y debiera tener un output como éste
#1 /subsystem=resource-adapters/resource-adapter=activemq-rar-5.6.0.rar:add(archive=activemq-rar-5.6.0.rar) #2 deploy jtds-1.2.6.jar #3 data-source add --name=miDS --connection-url=jdbc:jtds:sqlserver://server:1433/miDB;loginTimeout=30 --jndi-name=java:jboss/datasources/miDS --driver-name=jtds-1.2.6.jar --driver-class=net.sourceforge.jtds.jdbc.Driver #4 deploy miApp.war
pero los resource-adapters no funcan, ver >>