Utilizando Múltiplas Versões de Drivers JDBC no JBoss AS 7.1.3 (JBoss EAP 6.0.1)

Postado em

E ai galera blz?

Em algumas situações precisamos utilizar várias versões de drivers JDBC do mesmo fabricante. Imagine uma empresa em que existem por exemplo 3 versões do Sistema de Gestao de Contratos que estão sendo executadas no JBoss AS 7 e cada uma delas utilize uma versão específica do Driver JDBC do MySQL:

  • Sistema de Gestao de Contratos Versão 1.0 – mysql-connector-java-5.1.19
  • Sistema de Gestao de Contratos Versão 2.0 – mysql-connector-java-5.1.23
  • Sistema de Gestao de Contratos Versão 3.0 – mysql-connector-java-5.1.24

A melhor abordagem na minha opnião é criar módulos globais (global module) e adicionar slots com diferentes versões de drivers.

Baixe os pacotes mysql-connector-java-5.1.19.zipmysql-connector-java-5.1.23.zip  e mysql-connector-java-5.1.24.zip no site do fabricante.

drivers-pack

Crie a estrutura de diretório para armazenar os arquivos dos módulos:

 mkdir -p jboss-eap-6.0/modules/com/mysql/main
 mkdir -p jboss-eap-6.0/modules/com/mysql/5.1.19
 mkdir -p jboss-eap-6.0/modules/com/mysql/5.1.23

Copie os arquivos .JAR para os diretórios dos módulos conforme abaixo:

 cp /tmp/mysql-connector-java-5.1.24-bin.jar jboss-eap-6.0/modules/com/mysql/main/
 cp /tmp/mysql-connector-java-5.1.19-bin.jar jboss-eap-6.0/modules/com/mysql/5.1.19/
 cp /tmp/mysql-connector-java-5.1.23-bin.jar jboss-eap-6.0/modules/com/mysql/5.1.23/

Perceba que o arquivo mysql-connector-java-5.1.24-bin.jar foi copiado para o “main” pois ele será a nossa versão principal. O próximo passo é cria o arquivo module.xml para cada versão:

Versão 5.1.19

Crie o arquivo jboss-eap-6.0/modules/com/mysql/5.1.19/module.xml e adicione o seguinte conteúdo:

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="com.mysql" slot="5.1.19">

 <dependencies>
   <module name="javax.api"/>
   <module name="javax.transaction.api"/>
 </dependencies>

 <resources>
   <resource-root path="mysql-connector-java-5.1.19-bin.jar"/>
 </resources>

</module>

Versão 5.1.23

Crie o arquivo jboss-eap-6.0/modules/com/mysql/5.1.23/module.xml e adicione o seguinte conteúdo:

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="com.mysql" slot="5.1.23">

 <dependencies>
   <module name="javax.api"/>
   <module name="javax.transaction.api"/>
 </dependencies>

 <resources>
   <resource-root path="mysql-connector-java-5.1.23-bin.jar"/>
 </resources>

</module>

Versão 5.1.24 “main”

Crie o arquivo jboss-eap-6.0/modules/com/mysql/main/module.xml e adicione o seguinte conteúdo:

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="com.mysql" slot="main">

 <dependencies>
   <module name="javax.api"/>
   <module name="javax.transaction.api"/>
 </dependencies>

 <resources>
   <resource-root path="mysql-connector-java-5.1.24-bin.jar"/>
 </resources>

</module>

No arquivo standalone.xml ou domain.xml (profile) adicone as seguintes propriedades no  <subsystem xmlns=”urn:jboss:domain:ee:1.1″>:

<global-modules>
  <module name="com.mysql" slot="5.1.19"/>
  <module name="com.mysql" slot="5.1.23" />
</global-modules>

No datasource faça a referência do slot desejado como por exemplo:

<drivers>
  <driver name="mysql" module="com.mysql:5.1.23"/>
</drivers>
<datasource jndi-name="java:/MySQLDS" pool-name="MySQLDS-Pool" enabled="true" use-java-context="true">
  <connection-url>jdbc:mysql://localhost:3306/jbossdb</connection-url>
  <driver>mysql</driver>
  ....

Faça o deploy da aplicação testdriver e verifique o driver que está sendo utilizado no momento pela aplicação:

1drivers-pack12drivers-pack2Eu não consegui alterar o módulo on-the-fly  utilizando o CLI ( talvez tenha esqueçido algo =/ ):

/subsystem=datasources/jdbc-driver=mysql:write-attribute(name=driver-module-name,value=com.mysql:5.1.19)
 {
  "outcome" => "failed",
  "failure-description" => "JBAS014639: Attribute driver-module-name is not writable",
  "rolled-back" => true
 }

Então editei manualmente e testei:

<drivers>
  <driver name="mysql" module="com.mysql:5.1.19"/>
</drivers>

drivers-pack3

Para utilizar o módulo principal deixe o driver configurado da seguinte maneira:

<drivers>
   <driver name="mysql" module="com.mysql"/>
</drivers>

drivers-pack4

Por hoje é só!

Grande Abraço

Mauricio Magnani Jr

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s