[RESOLVIDO] Consumir conexão com BD gerenciada pelo Glassfish

5 respostas
P

Seguinte, criei um Pool de Conexões no Glassfish, porém agora não sei como consumir a mesma.
Como deixei pra ter sempre uma conexão aberta, a mesma está lá, porém não sei como recuperá-la.
Alguém poderia me dar uma dica? ou um link que possa ter um tutorial, pois falta de procurar não foi…
Obrigado!

5 Respostas

E
P

Cara estou fazendo exatamente igual ao tutorial mas ainda ta dando problema…
javax.servlet.ServletException: javax.naming.NameNotFoundException: No object bound to name java:comp/env/jdbc/Connection

sabe o que pode ser ? a unica diferenca q meu banco eh postgres

E

Pela sua mensagem de erro estou supondo que você registrou o seu pool com o nome Connection, não?

P

WEB.XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Go</servlet-name>
        <servlet-class>Go</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Go</servlet-name>
        <url-pattern>/Go</url-pattern>
    </servlet-mapping>

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

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

SUN-WEB.XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">

    <resource-ref>
        <res-ref-name>aResourceName</res-ref-name>
        <jndi-name>jdbc/myJDBCResourceName</jndi-name>
    </resource-ref>
    
    <context-root>/CnnPool</context-root>
    <class-loader delegate="true"/>
    <jsp-config>
        <property name="keepgenerated" value="true">
            <description>Keep a copy of the generated servlet class' java code.</description>
        </property>
    </jsp-config>
</sun-web-app>

Go.JAVA (SERVLET)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 *
 * @author pedro.franco
 */
public class Go extends HttpServlet {

    DataSource pool = null;
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    ResultSetMetaData rsm = null;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            conn = pool.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT * FROM dados");
            rsm = rs.getMetaData();
        // Do Stuff With the Result Set
        } catch (Exception e) {
            throw new ServletException(e.getMessage());
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException sqle) {
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    @Override
    public void init() throws ServletException {
        Context env = null;
        try {
            env = (Context) new InitialContext().lookup("java:comp/env");
            pool = (DataSource) env.lookup("jdbc/myJDBCResourceName");
            if (pool == null) {
                throw new ServletException("'unknown DataSource");
            }
        } catch (NamingException ne) {
            throw new ServletException(ne.getMessage());
        }
    }
}

Da uma olhada cara, esta tdo certo, mas nao funciona de jeito nenhum... o que sera que esta faltando ?
(No erro de antes eu havia mudado os nomes por isso tava diferente, esse agora está identico)

Abraço!

P

@Override public void init() throws ServletException { Context env = null; try { //env = (Context) new InitialContext().lookup("java:comp/env"); RETIRAR ESTE PRIMEIRO LOOKUP env = (Context) new InitialContext(); pool = (DataSource) env.lookup("jdbc/myJDBCResourceName"); if (pool == null) { throw new ServletException("'unknown DataSource"); } } catch (NamingException ne) { throw new ServletException(ne.getMessage()); } } }

AGORA VAI FUNCIONAR!

vlw :smiley:

Criado 24 de fevereiro de 2010
Ultima resposta 24 de fev. de 2010
Respostas 5
Participantes 2