Avatar billede moller2567 Nybegynder
20. oktober 2002 - 22:57 Der er 9 kommentarer og
1 løsning

Connection pool

Jeg prøver, som andre har forsøgt, at benytte en pool fra: http://www.webdevelopersjournal.com/columns/connection_pool.html.

Jeg kan ikke lige få det til at spille sammen med en JSP side. Er der nogen, der har et simpelt eksempel på en JSP side, der henter data via denne connection pool ?
Avatar billede soelvpil Nybegynder
20. oktober 2002 - 23:09 #1
Du siger du ikke kan få det til at "spille".

Hvad sker der, får du en fejlbesked, eller ingen resultater eller hvad?

Den hyppigste fejl der opstår i starten er en ClassNotFoundException, den skyldes at du mangler en JDBC-driver til databasen, eller at denne ligger forkert.

Hvis du fortæller lidt om havd du har gjort, og hvad der sker, er det lettere at hjælpe.
Avatar billede moller2567 Nybegynder
20. oktober 2002 - 23:28 #2
Jeg benytter en MYSQL database, og jeg kan få kontakt til den ved bare at lave en forbindelse, og lukke den igen når jeg har sendt min forespørgsel. Så min JDBC driver mm fungerer. Men det ville være smartere at benytte en connection pool til at holde styr på forbindelserne. Jeg har set, at der er en del, der benytter ovennævnte connection pool, og tænkte, at der var nogen der havde et hurtigt og simpelt eksempel liggende til denne Connection Pool.

Det jeg gerne ville have var en simlel JSP side, der benytter connection poolen til f.eks en forespørgsel i en tabel
Avatar billede disky Nybegynder
21. oktober 2002 - 07:42 #3
Du tager fra deres servlet eksempel og bruger det i en JSP side:

<%

        DBConnectionManager connMgr = DBConnectionManager.getInstance();
        Connection con = connMgr.getConnection("idb");
        if (con == null) {
            out.println("Can't get connection");
            return;
        }
        ResultSet rs = null;
        Statement stmt = null;
        try {
            stmt = con.createStatement();
            rs = stmt.executeQuery("SELECT navn FROM EMPLOYEE");
            while (rs.next()) {
%>
Navn = <%=res.getString("navn")%>
<%
                }
            }
            stmt.close();
            rs.close();
        }
        catch (SQLException e) {
            e.printStackTrace(out);
        }
        connMgr.freeConnection("idb", con);
   
%>


du skal så også have en config fil, som er defineret ud fra det her:, den skal hedde 'db.properties ' og være i classpath set fra serveren, så spiller det bare.


drivers  A space separated list of JDBC driver class names
logfile  The absolute path for a log file

Another set of properties are used for each pool. The property name starts with the name of the connection pool:

<poolname>.url  The JDBC URL for the database
<poolname>.maxconn  The max number of connections in the pool. 0 means no limit.
<poolname>.user  The user name for the pool
<poolname>.password  The corresponding password
Avatar billede moller2567 Nybegynder
22. oktober 2002 - 00:39 #4
Den var der næsten disky. Jeg kan godt få servletten fra eksemplet til at fungere. Men når jeg laver en JSP-fil, så går det galt ! Jeg tilføjer det kode du angiver herover, og importerer så java.sql.* samt DBConnectionManager (hvorfor kan jeg forresten ikke tilføje denne som en bønne i stedet ?)

Når jeg kører det får jeg følgende fejl:

"frontpage.jsp": Error #: 300 : method printStackTrace(javax.servlet.jsp.JspWriter) not found in class java.sql.SQLException at line 55

og det nytter ikke noget at importere at importere denne klasse. Dette skyldes vel at linien "e.printStackTrace(out);" i din Catch kun kan benyttes i en servlet ?

Min JSP-fil ser nu ud som følgende:

<%@ page import="minpakke.*, java.sql.*" %>
<html>
<head>
<title>
frontpage
</title>
</head>
<%--
<jsp:useBean id="bean0" scope="session" class="internetbutik.DBConnectionManager" />
<jsp:setProperty name="bean0" property="*" />
--%>
<body>
<h1>
JBuilder Generated JSP
</h1>
<%
  DBConnectionManager connMgr = DBConnectionManager.getInstance();
  Connection con = connMgr.getConnection("idb");
  if (con == null) {
      out.println("Can't get connection");
      return;
  }
  ResultSet rs = null;
  Statement stmt = null;
  try {
      stmt = con.createStatement();
      rs = stmt.executeQuery("SELECT navn FROM producttype");
      %>
      <table>
      <%
      while (rs.next()) {

        int typeno = rs.getInt("typeno");

        String typename = rs.getString("typename");
        if (typename == null) typename = "";

        %>
        <tr>
          <td><%=typeno%></font></td>
          <td><%=typename%></font></td>
        </tr>
        <%
      }
      %>
      </table>
      <%
      stmt.close();
      rs.close();
  }
  catch (SQLException e) {
      e.printStackTrace(out);
  }
  connMgr.freeConnection("idb", con);

%>
</body>
</html>

og så lige et sidste spørgsmål: Er der en tommelfingerregel for det maksimale antal connections i poolen ?
Avatar billede disky Nybegynder
22. oktober 2002 - 06:57 #5
ret:
e.printStackTrace(out);

til:
e.printStackTrace(System.out);

eller
e.printStackTrace();

Problemmet er (out) kun virker i en servlet :)
Avatar billede moller2567 Nybegynder
22. oktober 2002 - 07:34 #6
Hej Disky

Jeg har fået løst problemet, bare indsat følgende i stedet for

      %>
      <b>SQL fejl <%=e.getMessage()%></b>
      <%
//      e.printStackTrace(out);

eller er der nogen fordel ved at bruge printStackTrace i stedet ?

Havde du forresten nogen ide om hvorfor jeg ikke kunne indsætte DBConnectionManageren som en bønne, som jeg havde forsøgt (men udkommenteret i ovenstående) ?
Avatar billede disky Nybegynder
22. oktober 2002 - 09:09 #7
Med hvilket scope instantierer du den bønne ?

e.printStackTrace(System.out) giver en dump af stacken hvilket jeg personligt bedre kan lide end bare error texten.

p.s. Tak for point :)
Avatar billede moller2567 Nybegynder
22. oktober 2002 - 09:23 #8
Scope="session" og bønnen er lagt ind på siden vha. følgende tekst:

<jsp:useBean id="bean0" scope="session" class="internetbutik.DBConnectionManager" />
<jsp:setProperty name="bean0" property="*" />

p.s. og jeg takker for hjælpen :)
Avatar billede disky Nybegynder
22. oktober 2002 - 10:34 #9
Det der måske kan drille er at connection poolen er en singleton klasse og derfor tilter lidt over at blvie instantieret på den måde.
Avatar billede moller2567 Nybegynder
22. oktober 2002 - 10:59 #10
OK, jeg må bare importere pakken.

Endnu en gang tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester