Erro

Galera to trabalhando num sistema pra web e ta dando o seguinte erro:

java.lang.ClassCastException at gov.ipraj.contas.util.serviceLocator.ContaLocator.getDS(ContaLocator.java:46) at gov.ipraj.contas.util.persistencia.Persistencia.abrirConexao(Persistencia.java:47) at gov.ipraj.contas.util.persistencia.Persistencia.criarPs(Persistencia.java:108) at gov.ipraj.contas.util.persistencia.Persistencia.setValue(Persistencia.java:200) at gov.ipraj.contas.diarias.diaria.DiariaDAO.listar(DiariaDAO.java:119) at gov.ipraj.contas.diarias.diaria.DiariaRN.listar(DiariaRN.java:367)

e o metodo que ta acusando o erro é esse:

public static DataSource getDS(String pName) throws ContaFatalException { DataSource lDs = null; Object lObj = null; try { Context lContext = getContext(); lObj = lContext.lookup("java:comp/env/" + pName);; lDs = (DataSource) lObj; } catch(NamingException e) { throw new ContaFatalException("ContaLocator", "getDS", e); } return lDs; }

Aguardo uma ajuda de voces…

eu acho que o erro esta nesta linha

     lDs = (DataSource) lObj;

Acho que o teofilo está certo:
java.lang.ClassCastException

Erro de coerção. Tem certeza se pode mudar um Object para DataSource?

[quote=“JavaDrops”]Acho que o teofilo está certo:
java.lang.ClassCastException

Erro de coerção. Tem certeza se pode mudar um Object para DataSource?[/quote]

eu alterei o codigo, mas continua dando o mesmo erro…

[code] public static DataSource getDS(String pName)
throws ContaFatalException
{
DataSource lDs = null;

    try
    {
        Context lContext = getContext();
        lDs = (DataSource)lContext.lookup("java:comp/env/" + pName);
                     
    }
    catch(NamingException e)
    {
        throw new ContaFatalException("ContaLocator", "getDS", e);
    } 
    return lDs;
}[/code]

alguem pode me dar essa ajuda…

Então mizifio, o erro é o mesmo, você só mudou o jeito de chamar, mas está fazendo a mesma coisa:
lDs = (DataSource)lContext.lookup(“java:comp/env/” + pName);

A prigunta é:
O que retorna quando você faz isso:
lContext.lookup(“java:comp/env/” + pName)
pode ser considerado um DataSource?

Outra coisa, já experimentou colocar com \ ao invés de ?

[quote=“JavaDrops”]Então mizifio, o erro é o mesmo, você só mudou o jeito de chamar, mas está fazendo a mesma coisa:
lDs = (DataSource)lContext.lookup(“java:comp/env/” + pName);

A prigunta é:
O que retorna quando você faz isso:
lContext.lookup(“java:comp/env/” + pName)
pode ser considerado um DataSource?

Outra coisa, já experimentou colocar com \ ao invés de ?[/quote]

e ai man, blz? ele retorna o nome do dataSource pra identificar no momento da conexao com o banco… ele retorna exatamente isso: jdbc/CONC?SSIONARIAS

Rafael,

Eu tenho que te confessar que ainda não mexi com banco de dados no Java, então estou dando tiro no escuro (mas às vezes a mira tá certinha).

Olhando teu código, particularmente nesse trecho:

Context lContext = getContext(); lObj = lContext.lookup("java:comp/env/" + pName); lDs = (DataSource) lObj;
Eu não consegui identificar o que o getContext() faz (não achei na API da 1.4.2 esse método na interface/classe Context). Suponho que é um método que você criou e que, obviamente, retorna um objeto Context.

Então fui dar uma busca por um código parecido nos tutoriais da Sun e achei um da versão 1.5 (ou 5.0, tiger, ou qualquer outro nome que inventarem até a hora que você ler esse post) onde ao invés de getContext() eles usam assim:
Context lContext = new InitialContext(); // adaptado

A fonte: http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/getstart/datasource.html

Qualquer coisa tenta colocar a dúvida no forum específico de JDBC/SQL:
http://www.portaljava.com/home/modules.php?name=Forums&file=viewforum&f=6

[quote=“JavaDrops”]Rafael,

Eu tenho que te confessar que ainda não mexi com banco de dados no Java, então estou dando tiro no escuro (mas às vezes a mira tá certinha).

Olhando teu código, particularmente nesse trecho:

Context lContext = getContext(); lObj = lContext.lookup("java:comp/env/" + pName); lDs = (DataSource) lObj;
Eu não consegui identificar o que o getContext() faz (não achei na API da 1.4.2 esse método na interface/classe Context). Suponho que é um método que você criou e que, obviamente, retorna um objeto Context.

Então fui dar uma busca por um código parecido nos tutoriais da Sun e achei um da versão 1.5 (ou 5.0, tiger, ou qualquer outro nome que inventarem até a hora que você ler esse post) onde ao invés de getContext() eles usam assim:
Context lContext = new InitialContext(); // adaptado

A fonte: http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/getstart/datasource.html

Qualquer coisa tenta colocar a dúvida no forum específico de JDBC/SQL:
http://www.portaljava.com/home/modules.php?name=Forums&file=viewforum&f=6[/quote]

private static Context getContext() throws ContaFatalException { try { if(context == null) context = new InitialContext(); } catch(NamingException e) { throw new ContaFatalException("ContaLocator", "getContext", e); } return context; }

mas eu faço exatamento isso…

Aqui achei um problema semelhante, específico do JBoss:
http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=63&t=001186

Dá uma olhada no Google com essas palavras chaves:
java:comp/env ClassCastException