Connexion MySQL à usage unique :(
Bonjour à tous, voici mon problème insoluble ...
Je l'ai testé sur différentes configuration et j'obtient toujours la même chose ... (Tomcat5 et 5.5 sur Ubuntu, Fedora, Windows et un serveur MySQL dernier modèle et le connecteur JDBC qui va avec ... ).
Pour faire simple mes connexion à la base sont gérées dans un Pool.
J'ai une servlet nommée CreateTempo qui se connecte et affiche le contenu d'une table et "close" la connexion.
J'ai enfin une page jsp qui forward vers la servlet.
Je démarre mon Tomcat, je lance ma page tempo.jsp
Le premier coup, j'ai ma liste ...
Je relance la page une seconde fois et là ... rien,
java.sql.SQLException: Connection is closed.
J'ai largement assez de connexion au niveau du pool, les timeout sont suffisamment longs etc etc etc...
Voici les codes si ça peut aider ...
CreateTempo.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Statement;
import frx.JdbcServletPA;
public class CreateTempo extends JdbcServletPA{
private static final long serialVersionUID = 1L;
private PrintWriter out;
public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException {
out = res.getWriter();
Statement stmt = null;
try {
stmt = conPA.createStatement();
String query="SELECT id_,c1,c2 FROM p0_0";
ResultSet rs=stmt.executeQuery(query);
while(rs.next()){
out.println(rs.getString("id_")+" - "+rs.getString("c1")+" - "+rs.getString("c2"));
}
stmt.close();
conPA.close();
//System.out.println("Close Connexion Base PA Tempo");
} catch (SQLException e) {
e.printStackTrace();
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
stmt = null;
}
if (conPA != null) {
try {
conPA.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
conPA = null;
}
}
}
} |
JdbcServletPA.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| package fx;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.sql.DataSource;
import java.sql.Connection;
/* Classe contenant les methodes utilises par les pages jsp */
public class JdbcServletPA extends HttpServlet{
private static final long serialVersionUID = 1L;
protected Connection conPA;
protected DataSource dsA;
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
Context initCtx = null;
try {
initCtx = new InitialContext();
dsA = (DataSource) initCtx.lookup("java:comp/env/jdbc/PoolPA");
} catch (NamingException e) {
e.printStackTrace();
}
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conPA = dsA.getConnection();
System.out.println("Open Connexion Base PA Servlet");
} catch (SQLException e) {
e.printStackTrace();
if (conPA != null) {
try {
conPA.close();
} catch (SQLException e1) {
//
e1.printStackTrace();
}
conPA = null;
}
}
}
public void destroy() {
try {
if(conPA!=null){
if(!conPA.isClosed()){
conPA.close();
System.out.println("Close Connexion Base PA Servlet Destroy");
}
}
} catch (SQLException e) {
e.printStackTrace();
if (conPA != null) {
try {
conPA.close();
} catch (SQLException e1) {
//
e1.printStackTrace();
}
conPA = null;
}
}
}
} |
Si vous avez besoin d'autres infos ...
Merci.