Conexão com banco Oracle via Data Source - erro

10 respostas
G

Olá galera do fórum, boa tarde a todos...

Seguinte ...

Estou tentando criar uma Connection Factory com o Oracle, porém estou recebendo uma Exception um tanto quanto estranha (pra mim).

Bom vamos lá....

Estou utilizando tomcat5.0, Oracle 9i, java 1.4.2, struts.

O que fiz para tentar uma conexao passo a passo:

1. Segui o site na referencia do Oracle.[url]http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html[/url]

vejam meus arquivos como ficaram:

server.xml
<Context path="/ga" reloadable="true" docBase="C:\work\ga" workDir="C:\work\ga\work" 
        		debug="5" crossContext="true">

  				<Logger className="org.apache.catalina.logger.FileLogger"
            		prefix="localhost_ga_log." suffix=".txt"
             			timestamp="true"/>

  				<Resource name="jdbc/OracleAmbientalDB"
              		auth="Container"
              	 	type="javax.sql.DataSource"/>

  				<ResourceParams name="jdbc/OracleAmbientalDB">
    				<parameter>
      					<name>factory</name>
      					<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
   					</parameter>


    				<parameter>
       					<name>driverClassName</name>
       					<value>oracle.jdbc.driver.OracleDriver</value>
    				</parameter>
    		
    				
    			
    				
    			
    				<parameter>
      					<name>maxWait</name>
      					<value>-1</value>
    				</parameter>


    				<parameter>
     					<name>username</name>
     					<value>ga</value>
    				</parameter>
    				<parameter>
     					<name>password</name>
     					<value>ga</value>
    				</parameter>
    
    				<parameter>
      					<name>url</name>
      					<value>jdbc:oracle:thin:@192.168.0.2:1521:desenv</value>
    				</parameter>
    
    				
        			<parameter>
              			<name>removeAbandoned</name>
              			<value>true</value>
            		</parameter>

    				<parameter>
              			<name>removeAbandonedTimeout</name>
              			<value>60</value>
            		</parameter>
	

					<parameter>
              			<name>logAbandoned</name>
              			<value>true</value>
            		</parameter>
				</ResourceParams>
			</Context>
web.xml
<resource-ref>
 	<description>Oracle Datasource</description>
	<res-ref-name>jdbc/OracleAmbientalDB</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
  </resource-ref>
Classe para testar o que fiz: ConnectionFactory.java
import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnectionFactory {
    
    private static Connection conn;
    
    public static Connection getConnection(){
        try {
            Context initContext = new InitialContext();
            Context envContext  = (Context)initContext.lookup("java:/comp/env"); // ESSA É LINHA 18!!!
            DataSource ds = (DataSource)envContext.lookup("jdbc/OracleAmbientalDB");
            conn = ds.getConnection();
        }catch (NamingException ne){
            ne.printStackTrace();
        }catch (SQLException se){
            se.printStackTrace();
        }

        return conn;
        
    }
    
    public static void main(String[] args) {
        getConnection();
    }
}

Ai quando executo a classe ConnectionFactory, é lançada a seguinte exception...

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:640)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:280)
	at javax.naming.InitialContext.lookup(InitialContext.java:347)
	at br.com.gaea.util.ConnectionFactory.getConnection(ConnectionFactory.java:18) - ////Esta marcada acima qual é !!
	at br.com.gaea.util.ConnectionFactory.main(ConnectionFactory.java:32)

Alguem pode me ajudar ...

Obrigado ...

Guilherme

10 Respostas

F
public static Connection getConnection(){
         try {
             Context initContext = new InitialContext();
             DataSource ds = (DataSource)envContext.lookup("jdbc/OracleAmbientalDB");
             conn = ds.getConnection();
         }catch (NamingException ne){
             ne.printStackTrace();
         }catch (SQLException se){
             se.printStackTrace();
         }
 
         return conn;
         
     }
G

frodrigues,

Obrigado pela ajuda :wink:… mas mesmo assim ainda não está funcionando …
:cry:
Guilherme

R

perai, você tá tentando pegar essas conexão rodando essa main aí ou esse código tá sendo chamado por um servlet rodando no application server ?

K

Aqui funciona assim:
http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html

Boa sorte! :thumbup:

F

Post 10/04/2007 16:58:06 Assunto: Re:Conexão com banco Oracle via Data Source - erro
perai, você tá tentando pegar essas conexão rodando essa main aí ou esse código tá sendo chamado por um servlet rodando no application server ?

Isto esta Correto…se vc estiver tentando acessar via MAIN NAOP VAI FUNCIONAR…
TESTE VIA UM SERVLET

PU ACTION DO STRUTS
…SEI LA…ALGUM FRAMEWORK Q VC DEVE USAR

R

pelo que to vendo do stack trace:

at br.com.gaea.util.ConnectionFactory.main(ConnectionFactory.java:32)

Você tá rodando a main direto, esse método getConnectino tem que ser chamado por algupem que esteja rodando no contexto que você configurou o datasource.

[]´s

G

Rafaelprp, frodrigues

Estou tentando direto do main … hehehhe …

Faço um servlet pra testar a conexão entao …???

valeu rapaziada !

F

Isto Mesmo…pois no Main…ele nao vai acessar seu aplication server…
testa num servlet

que vai funcionar…falow

R

Cara, se quiser pode dar uma olhada no site do spring framework q ele tem um frameworkzinho que cria um initialcontext e você pode colocar datasources, etc…
Gosto de utilizar ele pra fazer testes com o jUnit.

[]´s

G

frodrigues,

testei conforme o site acima, usando jstl mesmo … funcionou …
puts eh boaida isso … só tava testando em local errado !!! =]
obrigado !!!

=========================================

Rafaelprp

vou olhar sim … vou usar spring no projeto !!! =]

valeu pelas dicas cara.

Valeu Galera

Criado 10 de abril de 2007
Ultima resposta 10 de abr. de 2007
Respostas 10
Participantes 4