[FECHADO] Como recuperar uma conexão (objeto Connection) de uma datasource criado no Glassfish?

2 respostas
B

Bom dia Pessoal!

Alguém sabe como faço para recuperar um objeto Connection de uma Datasource criada no glassfish v2?

Encontrei na net um procedimento que utiliza o método lookup da classe InitialContext, mas estou obtendo uma javax.naming.NameNotFoundException ao executar o método lookup (initialContext.lookup(“java:comp/env/jdbc/SisbenDS”).

Quando faço uma conexão direto via JDBC, consigo obter uma conexão sem problemas, mas através desse procedimento que utiliza o método lookup o sistema lança a exceção do NameNotFound. Será que estou esquecendo de alguma coisa? alguém poderia me dar uma luz? :idea:

Erro:

javax.naming.NameNotFoundException: SisbenDS not found
        at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
        at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)

web.xml

<web-app ... >

  ...

    <resource-ref>
        <res-ref-name>jdbc/SisbenDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>

 ...

</web-app>

sun-resources.xml

<resources>
    <!--Desenvolvimento  -->
   
    <jdbc-resource enabled="true" jndi-name="SisbenDS" object-type="user" pool-name="jtds_sqlPool_sisben"/>
    <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="net.sourceforge.jtds.jdbcx.JtdsDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="jtds_sqlPool_sisben" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
        <property name="serverName" value="ssp111"/>
        <property name="portNumber" value="1433"/>
        <property name="databaseName" value="dbsisben_des"/>
        <property name="User" value="****"/>
        <property name="Password" value="**"/>
        <property name="URL" value="jdbc:jtds:sqlserver://ssp111:1433/dbsisben_des"/>
        <property name="driverClass" value="net.sourceforge.jtds.jdbc.Driver"/>
        <property name="schema" value="dbo"/>
    </jdbc-connection-pool>   
</resources>

Método do Servlet que lança a exceção:

public javax.sql.DataSource getDataSource() {
        InitialContext initialContext;
        try {
            initialContext = new InitialContext();

            DataSource datasource = (DataSource) initialContext.lookup("java:comp/env/jdbc/SisbenDS");
            return datasource;
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return null;
    }

Agradeço antecipadamente qualquer ajuda.

Abraço
Wellington

2 Respostas

B

Uau… Continuo tentando e sem sucesso… Editei o tópico para tentar deixar a dúvida mais clara…

B

Boa tarde pessoal!

Depois de quase 2 dias inteiros quebrando a cabeça, eis que surge a solução:

Usar apenas o nome do DataSource no lookup:
DataSource datasource = (DataSource) initialContext.lookup(“SisbenDS”);

Fica aí a solução para caso algum dia alguém enfrente algo parecido.

Abraços
Wellington M. Anastácio

Criado 30 de abril de 2009
Ultima resposta 30 de abr. de 2009
Respostas 2
Participantes 1