JBOSS 7 Erro ao fazer deploy da lib do DB2

Galera estou tendo o seguinte erro ao fazer o deploy de uma lib do DB2:

Fri Oct 26 16:31:05 GMT-200 2012
Failed to disable db2jcc.jar.

Unexpected HTTP response: 500

Request
{
    "address" => [("deployment" => "db2jcc.jar")],
    "operation" => "deploy"
}

Response

Internal Server Error
{
    "outcome" => "failed",
    "failure-description" => {"Failed services" => {"jboss.deployment.unit.\"db2jcc.jar\".STRUCTURE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"db2jcc.jar\".STRUCTURE: Failed to process phase STRUCTURE of deployment \"db2jcc.jar\""}},
    "rolled-back" => true
}

Alguém sabe o por que ? Lembrando que o DB2 possui 3 libs 2 referente a lincença e 1 o drive em si.

Vlw.

Olá.

Pelo que entendi, trata-se de um driver JDBC do DB2. Caso esteja errado, peço que desconsidere a minha mensagem.

No JBoss AS 7, o ideal é que o driver seja implantado como um módulo ($JBOSS_HOME/modules). Tem um jeito certo para se fazer isso, posso detalhar melhor caso estejamos falando da mesma coisa.

Considerando o erro que você passou, é provável que você tenha implantado o driver diretamente no diretório de deploy ($JBOSS_HOME/standalone/deployments), o que também é permitido. Nesse caso há algumas restrições, pois somente drivers compatíveis com o TIPO 4 do JDBC é que podem ser implantados assim. É possível fazer a implantação de drivers do Tipo 3 ou inferior dessa forma, mas para isso você deve criar algumas configurações na estrutura META-INF/services do jar principal, indicando as dependências e as características do driver.

Na documentação do JBoss tem um exemplo de utilização dessa maneira: https://docs.jboss.org/author/display/AS71/DataSource+configuration

Sinceramente, acho mais simples configurar um módulo e fazer a referência no arquivo de configuração (standalone.xml - caso esteja trabalhando em modo standalone).

Se for esse mesmo o problema, avise-me para que eu possa passar mais detalhes caso necessário.

[]s

Aproveitando… a partir da versão 7.1, é obrigatório que os datasources sejam referenciados por nomes JNDI iniciados com java:/ ou java:jboss/

Fala zanata, obrigado pela resposta.

É exatamente esse o problema, vou fazer conforme me orientou e posto o resultado.

Obrigado.

Abs.

Fiz os testes e consegui fazer o modulo me parece estar certo porém ao fazer o deploy da aplicação obtive o seguinte erro:

08:01:36,877 INFO  [org.jboss.as.controller] (Controller Boot Thread) Service status report
   New missing/unsatisfied dependencies:
      service jboss.jdbc-driver.db2 (missing)

08:01:36,890 ERROR [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.0.Final "Lightning" started (with errors) in 1992ms - Started 93 of 151 services (3 services failed or missing dependencies, 55 services are passive or on-demand)


zanata no print que postei se reparar a conexão com o DB2 está em verde indicando que o dataSource está pronto para uso, no AS7 há algum lugar que eu possa fazer um testConnection ? Ou algo assim ? Ou ele ja faz no momento que subi o server ?

Olá

Voce pode fazer um test connection utilizando o CLI

[code]# $JBOSS_HOME/bin/jboss-cli.sh -c

/subsystem=datasources/datasource=java:jboss/datasources/DB2:test-connection-in-pool[/code]

Abs

não tenho essa opção: # $JBOSS_HOME/bin/jboss-cli.sh -c

No windows é igual ? Estou usando a versão free no windows.

Olá.

No Windows é a mesma coisa, basta usar o jboss-cli.bat

Antes, diga pra gente como você montou o pacote do módulo, pois a falha aponta uma dependência não atendida.

Por exemplo, utilizando um módulo de exemplo que existe na instalação padrão (h2database), olha só como fica a estrutura:

$JBOSS_HOME/modules
  |
  +--com
        |
        +--h2database
              |
              +--h2
                    |
                    +--main
                          | 
                          +-- h2-1.3.161.jar
                          +-- module.xml
                          +-- (caso haja mais recursos do driver, insira aqui também)

No arquivo module.xml, é necessário inserir as informações dos arquivos que inseriu no diretório “main” e as dependências (veja que o item dependências faz referência a outros módulos):

<module xmlns="urn:jboss:module:1.1" name="com.h2database.h2">

    <resources>
        <resource-root path="h2-1.3.161.jar"/>
        <!-- Insert resources here -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>

É bem provável que para o driver do DB2 seja necessário definir as dependências para “javax.api” e “javax.transaction.api” também.

Faça um novo teste. Ok? Se complicar, envia a estrutura que criou (explicativo).

[]s

Fiz via admin. Resultado:

[standalone@localhost:9999 /] /subsystem=datasources/data-source=java\:jboss\/da
tasources\/DB2:test-connection-in-pool
{"outcome" => "success"}
[standalone@localhost:9999 /]

Isso quer dizer que consegui conexão com o banco ? E quanto ao erro no console do eclipse o erro do tópico você sabe o que pode ser ?

abs.

A estrutura está correta conforme imagem em anexo.

|  
  +--com  
        |  
        +--h2database  
              |  
		  +--ibm  
			  |  
			  +--db2  
				|  
				+--main  
                    |   
					+-- db2jcc.jar
					+-- db2jcc_license_cisuz.jar
					+-- db2jcc_license_cu.jar								  
					+-- module.xml  

Module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.ibm.db2">
  <resources>
    <resource-root path="db2jcc4.jar"/>
	<resource-root path="db2jcc_license_cu.jar"/>
	<resource-root path="db2jcc_license_cisuz.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
    <module name="sun/io"/>
  </dependencies>
</module>


André, aparentemente está tudo OK. O pool de conexões subiu e você está conseguindo estabelecer uma conexão com o BD.

Sobre o aviso que está sendo emitido no console, provavelmente deve ser porque os arquivos do driver não foram removidos do diretório “$JBOSS_HOME/standalone/deployments”. Verifique se não ficou nada por lá.

  • db2jcc4.jar
  • db2jcc_license_cu.jar
  • db2jcc_license_cisuz.jar

Caso ainda estejam no diretório, pode removê-los.

[]s

Infelizmente não há nada lá a não ser o war da minha aplicação. Removi os jar’s qua havia feito o deploy via console admin do AS7.

abs.

André. Encontrei outras pessoas com esse mesmo problema na Internet.

Estou encaminhando o link da thread (que parece estar resolvida) e vou transcrever/traduzir um trecho da mensagem apenas para que fique registrado aqui, caso outros passem pelo mesmo problema:

https://community.jboss.org/thread/202025

Editar o arquivo $JBOSS_HOME/modules/sun/jdk/main/module.xml e inserir o seguinte trecho na tag exports/include-set

&lt;exports&gt;
	&lt;include-set&gt;
		&lt;path name="META-INF/services"/&gt;
		&lt;path name="sun/io"/&gt; &lt;!-- manually added to provide character converter access for db2 driver --&gt;
	&lt;/include-set&gt;
&lt;/exports&gt;

Vamos ver se com isso o problema deixa de existir.

  • Outra recomentação é a de não deixar espaços em branco no início do arquivo “module.xml”

Fiz o teste e o erro continua.

13:25:49,277 INFO [org.jboss.as.controller] (Controller Boot Thread) Service status report
New missing/unsatisfied dependencies:
service jboss.jdbc-driver.db2 (missing)

13:25:49,284 ERROR [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.0.Final “Lightning” started (with errors) in 2004ms - Started 93 of 151 services (3 services failed or missing dependencies, 55 services are passive or on-demand)

É. Não sei direito o que está acontecendo.

Faz um favor pra gente. Copia a seção “datasources” do seu arquivo $JBOSS_HOME/stantalone/configuration/standalone.xml e cola aqui. Peço que na cópia feita, altere os dados confidenciais (usuários, senhas e ips).

Só falta isso para ser analisado.

Obrigado.

Reparando em algumas coisas notei que com o comando abaixo o resultado não foi o esperado. Eu esperava que aparecesse dois drivers o nativo h2 e o que criei db2 certo ?

[standalone@localhost:9999 /] /subsystem=datasources:installed-drivers-list
{
    "outcome" => "success",
    "result" => [{
        "driver-name" => "h2",
        "deployment-name" => undefined,
        "driver-module-name" => "com.h2database.h2",
        "module-slot" => "main",
        "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource",
        "driver-class-name" => "org.h2.Driver",
        "driver-major-version" => 1,
        "driver-minor-version" => 2,
        "jdbc-compliant" => true
    }]
}

standalone.xml

<?xml version='1.0' encoding='UTF-8'?>

<server name="PCT517250" xmlns="urn:jboss:domain:1.0">
    <extensions>
        <extension module="org.jboss.as.clustering.infinispan"/>
        <extension module="org.jboss.as.connector"/>
        <extension module="org.jboss.as.deployment-scanner"/>
        <extension module="org.jboss.as.ee"/>
        <extension module="org.jboss.as.ejb3"/>
        <extension module="org.jboss.as.jaxrs"/>
        <extension module="org.jboss.as.jmx"/>
        <extension module="org.jboss.as.jpa"/>
        <extension module="org.jboss.as.logging"/>
        <extension module="org.jboss.as.naming"/>
        <extension module="org.jboss.as.osgi"/>
        <extension module="org.jboss.as.remoting"/>
        <extension module="org.jboss.as.sar"/>
        <extension module="org.jboss.as.security"/>
        <extension module="org.jboss.as.threads"/>
        <extension module="org.jboss.as.transactions"/>
        <extension module="org.jboss.as.web"/>
        <extension module="org.jboss.as.weld"/>
    </extensions>
    <management>
        <security-realms>
            <security-realm name="PropertiesMgmtSecurityRealm">
                <authentication>
                    <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
                </authentication>
            </security-realm>
        </security-realms>
        <management-interfaces>
            <native-interface interface="management" port="9999"/>
            <http-interface interface="management" port="9990"/>
        </management-interfaces>
    </management>
    <profile>
        <subsystem xmlns="urn:jboss:domain:logging:1.0">
            <console-handler name="CONSOLE" autoflush="true">
                <level name="INFO"/>
                <formatter>
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
            </console-handler>
            <periodic-rotating-file-handler name="FILE" autoflush="true">
                <level name="INFO"/>
                <formatter>
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
                <file relative-to="jboss.server.log.dir" path="server.log"/>
                <suffix value=".yyyy-MM-dd"/>
            </periodic-rotating-file-handler>
            <logger category="com.arjuna">
                <level name="WARN"/>
            </logger>
            <logger category="org.apache.tomcat.util.modeler">
                <level name="WARN"/>
            </logger>
            <logger category="sun.rmi">
                <level name="WARN"/>
            </logger>
            <root-logger>
                <level name="INFO"/>
                <handlers>
                    <handler name="CONSOLE"/>
                    <handler name="FILE"/>
                </handlers>
            </root-logger>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:datasources:1.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="H2DS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
                    <connection-url>
                        jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
                    </connection-url>
                    <driver>
                        h2
                    </driver>
                    <pool>
                        <prefill>
                            false
                        </prefill>
                        <use-strict-min>
                            false
                        </use-strict-min>
                        <flush-strategy>
                            FailingConnectionOnly
                        </flush-strategy>
                    </pool>
                    <security>
                        <user-name>
                            sa
                        </user-name>
                        <password>
                            sa
                        </password>
                    </security>
                    <validation>
                        <validate-on-match>
                            false
                        </validate-on-match>
                        <background-validation>
                            false
                        </background-validation>
                        <useFastFail>
                            false
                        </useFastFail>
                    </validation>
                </datasource>
                <datasource jndi-name="java:jboss/datasources/DB2" pool-name="DB2POOL" enabled="true" jta="true" use-java-context="true" use-ccm="true">
                    <connection-url>
                        jdbc:db2://xx.xx.x.x:xxx/XXXXXXX;DB_CLOSE_DELAY=-1
                    </connection-url>
                    <driver>
                        db2
                    </driver>
                    <pool>
                        <prefill>
                            false
                        </prefill>
                        <use-strict-min>
                            false
                        </use-strict-min>
                        <flush-strategy>
                            FailingConnectionOnly
                        </flush-strategy>
                    </pool>
                    <security>
                        <user-name>
                            XXXXX
                        </user-name>
                        <password>
                            XXXXX
                        </password>
                    </security>
                    <validation>
                        <validate-on-match>
                            false
                        </validate-on-match>
                        <background-validation>
                            false
                        </background-validation>
                        <useFastFail>
                            false
                        </useFastFail>
                    </validation>
                </datasource>
                <drivers>
                    <driver name="db2" module="com.ibm.db2">
                        <xa-datasource-class>
                            com.ibm.db2.jcc.DB2Driver
                        </xa-datasource-class>
                    </driver>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>
                            org.h2.jdbcx.JdbcDataSource
                        </xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:deployment-scanner:1.0">
            <deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:ee:1.0"/>
        <subsystem xmlns="urn:jboss:domain:ejb3:1.0"/>
        <subsystem xmlns="urn:jboss:domain:infinispan:1.0" default-cache-container="hibernate">
            <cache-container name="hibernate" default-cache="local-query">
                <local-cache name="entity">
                    <eviction strategy="LRU" max-entries="10000"/>
                    <expiration max-idle="100000"/>
                </local-cache>
                <local-cache name="local-query">
                    <eviction strategy="LRU" max-entries="10000"/>
                    <expiration max-idle="100000"/>
                </local-cache>
                <local-cache name="timestamps">
                    <eviction strategy="NONE"/>
                </local-cache>
            </cache-container>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>
        <subsystem xmlns="urn:jboss:domain:jca:1.0">
            <archive-validation enabled="false"/>
            <bean-validation enabled="false"/>
            <default-workmanager>
                <short-running-threads blocking="true" allow-core-timeout="false">
                    <core-threads count="10" per-cpu="20"/>
                    <queue-length count="10" per-cpu="20"/>
                    <max-threads count="10" per-cpu="20"/>
                    <keepalive-time time="10" unit="SECONDS"/>
                </short-running-threads>
                <long-running-threads blocking="true" allow-core-timeout="false">
                    <core-threads count="10" per-cpu="20"/>
                    <queue-length count="10" per-cpu="20"/>
                    <max-threads count="10" per-cpu="20"/>
                    <keepalive-time time="10" unit="SECONDS"/>
                </long-running-threads>
            </default-workmanager>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jmx:1.0">
            <jmx-connector server-binding="jmx-connector-server" registry-binding="jmx-connector-registry"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jpa:1.0">
            <jpa default-datasource=""/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:naming:1.0"/>
        <subsystem xmlns="urn:jboss:domain:osgi:1.0" activation="lazy">
            <configuration pid="org.apache.felix.webconsole.internal.servlet.OsgiManager">
                <property name="manager.root">
                    jboss-osgi
                </property>
            </configuration>
            <properties>
                <property name="org.jboss.osgi.system.modules">
                    org.apache.commons.logging,
                                    org.apache.log4j,
                                    org.jboss.as.osgi,
                                    org.slf4j,
                </property>
                <property name="org.osgi.framework.system.packages.extra">
                    org.apache.commons.logging;version=1.1.1,
                                    org.apache.log4j;version=1.2,
                                    org.jboss.as.osgi.service;version=7.0,
                                    org.jboss.osgi.deployment.interceptor;version=1.0,
                                    org.jboss.osgi.spi.capability;version=1.0,
                                    org.jboss.osgi.spi.util;version=1.0,
                                    org.jboss.osgi.testing;version=1.0,
                                    org.jboss.osgi.vfs;version=1.0,
                                    org.slf4j;version=1.5.10,
                </property>
                <property name="org.osgi.framework.startlevel.beginning">
                    1
                </property>
            </properties>
            <modules>
                <module identifier="javaee.api"/>
                <module identifier="org.jboss.logging"/>
                <module identifier="org.apache.aries.util"/>
                <module identifier="org.jboss.osgi.webconsole"/>
                <module identifier="org.osgi.compendium"/>
                <module identifier="org.apache.felix.log" startlevel="1"/>
                <module identifier="org.jboss.osgi.logging" startlevel="1"/>
                <module identifier="org.apache.felix.configadmin" startlevel="1"/>
                <module identifier="org.jboss.as.osgi.configadmin" startlevel="1"/>
                <module identifier="org.apache.aries.jmx" startlevel="2"/>
                <module identifier="org.apache.felix.eventadmin" startlevel="2"/>
                <module identifier="org.apache.felix.metatype" startlevel="2"/>
                <module identifier="org.apache.felix.scr" startlevel="2"/>
                <module identifier="org.apache.felix.webconsole" startlevel="2"/>
                <module identifier="org.jboss.osgi.jmx" startlevel="2"/>
                <module identifier="org.jboss.osgi.http" startlevel="2"/>
                <module identifier="org.jboss.osgi.blueprint" startlevel="3"/>
                <module identifier="org.jboss.osgi.webapp" startlevel="3"/>
                <module identifier="org.jboss.osgi.xerces" startlevel="3"/>
            </modules>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:remoting:1.0"/>
        <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"/>
        <subsystem xmlns="urn:jboss:domain:sar:1.0"/>
        <subsystem xmlns="urn:jboss:domain:security:1.0">
            <security-domains>
                <security-domain name="other" cache-type="default">
                    <authentication>
                        <login-module code="UsersRoles" flag="required"/>
                    </authentication>
                </security-domain>
            </security-domains>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:threads:1.0"/>
        <subsystem xmlns="urn:jboss:domain:transactions:1.0">
            <core-environment>
                <process-id>
                    <uuid/>
                </process-id>
            </core-environment>
            <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
            <coordinator-environment default-timeout="300"/>
            <object-store/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:web:1.0" default-virtual-server="default-host">
            <connector name="http" protocol="HTTP/1.1" socket-binding="http" scheme="http"/>
            <virtual-server name="default-host" enable-welcome-root="true">
                <alias name="localhost"/>
                <alias name="example.com"/>
            </virtual-server>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:weld:1.0"/>
    </profile>
    <interfaces>
        <interface name="management">
            <inet-address value="127.0.0.1"/>
        </interface>
        <interface name="public">
            <inet-address value="127.0.0.1"/>
        </interface>
    </interfaces>
    <socket-binding-group name="standard-sockets" default-interface="public">
        <socket-binding name="http" port="8080"/>
        <socket-binding name="https" port="8443"/>
        <socket-binding name="jmx-connector-registry" port="1090"/>
        <socket-binding name="jmx-connector-server" port="1091"/>
        <socket-binding name="jndi" port="1099"/>
        <socket-binding name="osgi-http" port="8090"/>
        <socket-binding name="remoting" port="4447"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
    </socket-binding-group>
</server>

André. De acordo com o “convencional”, está OK.

Dei uma olhada em um post em que o autor mostra algumas peculiaridades que estão bem diferentes da configuração que fez. O autor usa o DB2 como exemplo.

http://www.everyday-java.com/2011/11/jboss-as-7-creating-xa-datasources.html

Olha só como ficou a configuração do driver no caso dele.

	&lt;driver name="db2" module="com.ibm.db2.jdbc"&gt;
		&lt;driver-class&gt;
			com.ibm.db2.jcc.DB2Driver
		&lt;/driver-class&gt;
		&lt;xa-datasource-class&gt;
			com.ibm.db2.jcc.DB2XADataSource
		&lt;/xa-datasource-class&gt;
	&lt;/driver&gt;

[]s

Foi resolvido?

Infelizmente não zanata. Resolvemos usar o JBOSS 6

abs