Data source no JBoss 4.2.2 GA [RESOLVIDO]

8 respostas
H

Ola pessoal, estou criando uma aplicação web e na minha classe ConnectionFactory faço a conexao via data source...

o problema eh q no trecho de codigo que cria um objeto DataSource esta retornando null...

segue abaixo as devidas configurações pra q vcs possam analisar e se possivel me ajudar...

jboss-4.2.2.GA\server\projeto\deploy\db2-ds.xml
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/NOME</jndi-name>
    <use-java-context>true</use-java-context>
    <connection-url>jdbc:db2:MEUDB</connection-url>
    <driver-class>COM.ibm.db2.jdbc.app.DB2Driver</driver-class>
    <transaction-isolation>TRANSACTION_READ_UNCOMMITTED</transaction-isolation>
    <user-name>db2inst1</user-name>
    <password>cmsoftware</password>
    <min-pool-size>0</min-pool-size>
    <!-- sql to call when connection is created -->
    <new-connection-sql>select count(*) from mensagem</new-connection-sql>

    <!-- sql to call on an existing pooled connection when it is obtained from pool -->
    <check-valid-connection-sql>select count(*) from mensagem</check-valid-connection-sql>

      <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
    <metadata>
        <type-mapping>DB2</type-mapping>
    </metadata>
  </local-tx-datasource>  
</datasources>
jboss-4.2.2.GA\server\projeto\deploy\MEUProjetoEAR.ear\MEUProjetoWeb.war\WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
   <!-- =========== DATASOURCE ============= -->   
  <resource-ref>
  	<res-ref-name>jdbc/NOME</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
  </resource-ref>
  <!-- =========== DATASOURCE ============= --> 
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>
jboss-4.2.2.GA\server\projeto\deploy\MeuProjetoEAR.ear\MeuProjetoWeb.war\WEB-INF\jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
 <resource-ref>
   <res-ref-name>jdbc/NOME</res-ref-name>
   <jndi-name>java:/jdbc/NOME</jndi-name>
 </resource-ref>
</jboss-web>
ConnectionFactory.java
public class ConnectionFactory {

	// Log
	private static final Logger log = Logger.getLogger(ConnectionFactory.class);
	
	// JNDI
	public static final String JNDI_NOME = "java:comp/env/jdbc/NOME";
	
	public static Connection getDB2Connection() throws ConnectionFactoryException {
		return getDB2Connection(JNDI_NOME);
	}


	/**
	 * Fornece uma conexão obtida através de um Datasource
	 * @param jndiName
	 * @return Conexão com a base de dados
	 * @throws ConnectionFactoryException
	 */
	public static Connection getDB2Connection(String jndiName)
		throws ConnectionFactoryException {

		Context ctx;
		DataSource ds;
	
		try {
			 ctx = new InitialContext();
			 ds = (DataSource) ctx.lookup(jndiName);    // AQUI ESTA ME RETORNANDO NULL
		} catch (Exception e) {
			log.error(null, e);
			throw new ConnectionFactoryException(e.getMessage());
		}

		Connection conn;

		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			log.error(null, e);
			throw new ConnectionFactoryException("Erro de conexão com o Banco de Dados");
		}

		try {
			DatabaseMetaData dma = conn.getMetaData();
			log.debug("Conectado a " + dma.getURL() + " usando " + conn.hashCode());
		} catch (Exception e) {}

		return conn;

	}
}

adicionei o arquivo db2java.jar na pasta
\jboss-4.2.2.GA\server\projeto\lib

galera nao sei mais o que tentar...

agradeço a atençao...

8 Respostas

W

kra… tenta formatar a maquina !javascript:emoticon(’:lol:’);
javascript:emoticon(’:lol:’);

H

wendellgr:
kra… tenta formatar a maquina !javascript:emoticon(’:lol:’);
javascript:emoticon(’:lol:’);

ow analista de BBB vc esta sem nada pra fazer??? eh isso???
ahuahuahua…

kra tah foda…

B

Seguinte,

Faz isso primeiro:

DataSource ds = (DataSource) ic.lookup(“java:jdbc/NOME”);
O Lookup está ok retorna algo ???

Senão der certo tenta o seguinte:

Troca no seu arquivo de configuração do ds troca o true pelo false
false

Isso faz com que vc abra o DS pra acesso remoto, e pelo Jndi também conseguirá fazer lookup sem o prefixo java:/
ic.lookup(“jdbc/NOME”);

H
balax:
Seguinte,

Faz isso primeiro:

DataSource ds = (DataSource) ic.lookup("java:jdbc/NOME");
O Lookup está ok retorna algo ???

Senão der certo tenta o seguinte:

Troca no seu arquivo de configuração do ds troca o true pelo false
false

Isso faz com que vc abra o DS pra acesso remoto, e pelo Jndi também conseguirá fazer lookup sem o prefixo java:/
ic.lookup("jdbc/NOME");

Ola balax... valew pela atençao...

kra testei a primeira alteraçao q vc falou e continuou retornando null... quanto a segunda... de setar para false... apresenta o seguinte erro...
javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: jdbc not bound]
pra tirar o peso da consciência eu criei uma alternativa pra q quando do ds estiver null usar um metodo que conecta via jdbc puro... e esta rodando blz... o problema esta nesta configuraçao do ds... creio eu... segue o metodo....
try {
			 if(ds == null)
			 {
				 conn = getConnection(); // chama metodo alternativo para testar conexao
			 }else { 
				 	 conn = ds.getConnection(); 
				   }
		} catch (SQLException e) {
			log.error(null, e);
			throw new ConnectionFactoryException("Erro de conexão com o Banco de Dados");
		}




//Se não conseguir criar uma conexao via data source executa aqui..
	public static Connection getConnection() throws ConnectionFactoryException,
			SQLException { //jdbc:db2://<host_name>:<port>/<dbname>
		try {
			Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");

			log.debug("Conectando ao Banco...");

			return DriverManager.getConnection("jdbc:db2:MEUBD", "usuario", "senha");
		} catch (ClassNotFoundException e) {
			log.error(null, e);
			throw new SQLException(e.getMessage());
		}
	}

criei esta alternativa pra dar sequencia nos meus trabalhos aqui... porem quando o sistema tiver q ih pra produçao vou ter q usar via data source mesmo...
se alguem mais tiver alguma sugestao pra q eu possa testar aqui...

abraço... valew...

B

Opa… vamos lá entao…
coloca no ds isso aqui dinovo:
false
e manda o lookup com tudo (java:comp/env/jdbc/NOME")

H

balax:
Opa… vamos lá entao…
coloca no ds isso aqui dinovo:
false
e manda o lookup com tudo (java:comp/env/jdbc/NOME")

pois eh balax… eu pensei nisso tbm…
testei das duas formas… e nao fununcio… :frowning:
apresenta o mesmo erro acima…

H

:frowning:

alguem ai pra ajudar???
pode ser 5 centavos 10 centavos… o que nao lhe fizer falta…

H

balax:
Opa… vamos lá entao…
coloca no ds isso aqui dinovo:
false
e manda o lookup com tudo (java:comp/env/jdbc/NOME")

ola balax…
meu velho consegui aqui…
setei a tag q vc citou como false e mandei o lookup soh com o nome jndi…

// JNDI
public static final String JNDI_NOME = “jdbc/NOME”;
… e funcionou de boa…

daquela forma q eu estava tentando fazer eu consultei de um outro projeto aqui da empresa…
soh q no caso eh usado ejb no projeto… e eu nao estou usando ejb…
vc saberia me explicar o motivo dessa alteração???

valews…

Criado 19 de março de 2008
Ultima resposta 25 de mar. de 2008
Respostas 8
Participantes 3