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!
[RESOLVIDO] Consumir conexão com BD gerenciada pelo Glassfish
5 Respostas
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
Pela sua mensagem de erro estou supondo que você registrou o seu pool com o nome Connection, não?
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!
@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 