DataSource

10 respostas
M

Olá pessoal.

Estou precisando que a conexão da aplicação Java seja através de um Datasource com Banco de dados Oracle, porém não sei quais são os passos a serem adotados.

O Datasource deve ser criado primeiro no Servidor OAS (Oracle Application Server) e o data-source.xml configurado depois? Ou apenas o data-source.xml da aplicação é o suficiente?

Vejam que está me faltando a receita de bolo (os passos). Alguém já trabalhou desta maneira com o Oracle?

Obs.: Não utilizo EJB nem Struts. Apenas uma classe de conexão que terá que utilizar este recurso de datasource para o banco de dados Oracle

Obrigado.

10 Respostas

J

Declare o DataSource em data-source.xml ou atraves da interface de administração do OC4J, e depois pegue ele com JNDI na sua aplicação…

M

Onde tenho que distribuir este arquivo data-source.xml? Qual diretório da aplicação em que este arquivo deve ficar?

Tenho uma máquina de teste instalado o Oracle 10g (banco) e o JDeveloper (IDE de desenvolvimento). Onde devo distribuir o data-source.xml para que eu possa testar?

Abaixo segue o data-source.xml que criei:

<data-source
class="oracle.jdbc.pool.OracleConnectionPoolDataSource"
name="ORCLDS"
location="jdbc/OrclDS"
xa-location="jdbc/xa/OrclXADS"
ejb-location="jdbc/PooledOrclDS"
url="jdbc:oracle:thin:@localhost:1521:orcl"
connection-driver="oracle.jdbc.driver.OracleDriver"
username="scott"
password="tiger"
inactivity-timeout=“30”
/>

J

Não sei exatamente se ele funciona colocando o data-source.xml no diretorio da aplicação, mas tenta colocar em META-INF…

Eu uso diretamente o data-source.xml do servidor que fica em home/config

M

Desta máquina de teste, sem rede (standalone), em que está instalado o Oracle 10g e JDeveloper consigo realizar este teste de conexão?

O JDeveloper utiliza o OC4J para suas execuções. Sendo assim onde está este diretório home/config?

Você coloca o data-source.xml no Servidor e na sua classe de conexão você pega a conexão com o banco via JNDI, certo? Como o exemplo abaixo?

javax.naming.InitialContext ic = new javax.naming.InitialContext();

javax.sql.DataSource dataSource = (javax.sql.DataSource) ic.lookup(jdbc/OrckDS);

java.sql.Connection conexao = dataSource.getConnection();

Obrigado pela ajuda é porque estou com dificuldades para enterder este recurso de DataSource.

J

No JDeveloper fica em:

JDEV_HOME\j2ee\home\config\

nessa pasta tem um arquivo data-sources.xml, edita ele e coloca seu datasource lá, depois é só pegar como você fez aí…

M

Então, jairelton. Fiz assim:

  1. Coloquei o data-source.xml dentro do diretório C:\jdev1012\j2ee\home\config com o contéudo listado no post anterior;

  2. Criei uma classe executável (método main) como abaixo:

import java.util.MissingResourceException;

import java.sql.<em>;

import javax.naming.</em>;
public class Principal

{

public static void main(String[] args) throws NamingException, MissingResourceException

{

try

{

javax.naming.InitialContext ic = new javax.naming.InitialContext();

javax.sql.DataSource dataSource = (javax.sql.DataSource) ic.lookup(jdbc/OrckDS);

java.sql.Connection conexao = dataSource.getConnection();
PreparedStatement sql = conexao.prepareStatement("SELECT SYSDATE FROM DUAL");
              ResultSet rs = sql.executeQuery();
              rs.next();
              Date data = rs.getDate(1);
                   
              System.out.println("######################################");
              System.out.println("A hora do Banco é: " +data);
              System.out.println("######################################");
      }
      catch(SQLException e)
      {
              System.out.println("Deu erro");
      }
}

}

Ao executar estou levando o erro abaixo:

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 Principal.main(Principal.java:12)

Ficou faltando configurar mais alguma coisa???

J

Você tem que especificar as configurações de conexão com o servidor:

Properties config = new Properties&#40;&#41;; config.put&#40;Context.INITIAL_CONTEXT_FACTORY, &quot;com.evermind.server.ApplicationClientInitialContextFactory&quot;&#41;; config.put&#40;Context.PROVIDER_URL, &quot;ormi&#58;//localhost/app&quot;&#41;; config.put&#40;Context.SECURITY_PRINCIPAL, &quot;SCOTT&quot;&#41;; config.put&#40;Context.SECURITY_CREDENTIALS, &quot;TIGER&quot;&#41;; javax.naming.InitialContext ic = new javax.naming.InitialContext&#40;config&#41;;

M

Jair Elton, desculpa-me a falta de conhecimento. Mas onde coloco estes parâmetros???

J
import java.util.MissingResourceException;
import java.sql.*;
import javax.naming.*;

public class Principal&#123;
   public static void main&#40;String&#91;&#93; args&#41; throws NamingException, MissingResourceException&#123;
      try&#123;
         Properties config = new Properties&#40;&#41;;
         config.put&#40;Context.INITIAL_CONTEXT_FACTORY, &quot;com.evermind.server.ApplicationClientInitialContextFactory&quot;&#41;;
         config.put&#40;Context.PROVIDER_URL, &quot;ormi&#58;//localhost/app&quot;&#41;;
         config.put&#40;Context.SECURITY_PRINCIPAL, &quot;SCOTT&quot;&#41;;
         config.put&#40;Context.SECURITY_CREDENTIALS, &quot;TIGER&quot;&#41;;
         InitialContext ic = new InitialContext&#40;config&#41;;
         DataSource dataSource = &#40;DataSource&#41; ic.lookup&#40;&quot;jdbc/OrckDS&quot;&#41;;
         Connection conexao = dataSource.getConnection&#40;&#41;;
 
         PreparedStatement sql = conexao.prepareStatement&#40;&quot;SELECT SYSDATE FROM DUAL&quot;&#41;;
         ResultSet rs = sql.executeQuery&#40;&#41;;
         rs.next&#40;&#41;;
         Date data = rs.getDate&#40;1&#41;;

         System.out.println&#40;&quot;######################################&quot;&#41;;
         System.out.println&#40;&quot;A hora do Banco é&#58; &quot; +data&#41;;
         System.out.println&#40;&quot;######################################&quot;&#41;;
      &#125;catch&#40;SQLException e&#41;&#123;
         System.out.println&#40;&quot;Deu erro&quot;&#41;;
      &#125;
   &#125;
&#125;
M

Jair Elton,
estive pesquisando um pouco mais antes de postar novamente a respeito deste assunto de DataSource no Oracle.

Preciso entender agora como é que eu identifico estes parâmetros na minha máquina local. Os parâmetros são:

  • Context.PROVIDER_URL - Concerteza é localhost, mas qual é a porta e como sei qual é no nome da aplicação uma vez que apenas criei uma classe chamada Principal (contém um método main) dentro de um projeto chamado Prj_Teste que está dentro de uma WorkSpace chamada WS_TESTE.

  • Context.SECURITY_PRINCIPAL - Onde localizo esta informação dentro do JDeveloper?

  • Context.SECURITY_CREDENTIALS - Onde localizo esta informação dentro do JDeveloper?

Isto porque continua danto erro na execução da classe Principal.

Obrigado.

Criado 19 de setembro de 2006
Ultima resposta 22 de set. de 2006
Respostas 10
Participantes 2