Avatar billede 2c Nybegynder
03. november 2003 - 12:14 Der er 12 kommentarer og
1 løsning

connection pool

Jeg har samme problem som "dannv" har her:
http://www.eksperten.dk/spm/417615

d.v.s. at jeg har en størrer web applikation, som tilgår en database mange gange, og jeg vil gerne benytte en connection pool.

Jeg kan ikke finde ud af at udfylde server.xml rigtigt.

Jeg bruger en mysql database der ligger på localhost.
databasen jeg vil tilgå hedder 2c2c.
username: x1
password: x2
driver: com.mysql.jdbc.Driver

Driveren ligger både i WEB-INF\lib og i common\lib
Avatar billede arne_v Ekspert
03. november 2003 - 12:19 #1
Forudsat at du bruger Tomcat:

            <Resource auth="Container" name="jdbc/MyPool" type="javax.sql.DataSource" />
            <ResourceParams name="jdbc/MyPool">
                <parameter>
                      <name>factory</name>
                      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
                </parameter>
                <parameter>
                      <name>maxActive</name>
                      <value>100</value>
                </parameter>
                <parameter>
                      <name>maxIdle</name>
                      <value>30</value>
                </parameter>
                <parameter>
                      <name>maxWait</name>
                      <value>10000</value>
                </parameter>
                <parameter>
                      <name>username</name>
                      <value>x1</value>
                </parameter>
                <parameter>
                      <name>password</name>
                      <value>x2</value>
                </parameter>
                <parameter>
                      <name>driverClassName</name>
                      <value>com.mysql.jdbc.Driver</value>
                </parameter>
                <parameter>
                      <name>url</name>
                      <value>jdbc:mysql://localhost:3306/2c2c</value>
                </parameter>
            </ResourceParams>
         
Eller ... ?
Avatar billede 2c Nybegynder
03. november 2003 - 12:33 #2
Ja, jeg bruger tomcat. Jeg har også det samme i server.xml, så det er ikke der mit problem er alligevel.

Jeg har i web.xml tilføjet:

<resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/MyPool</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

Og jeg prøver at conecte til databasen på følgende måde:

try
      {
            Context init = new InitialContext();
            Context ctx = (Context) init.lookup("java:comp/env");
            DataSource ds = (DataSource) ctx.lookup("jdbc/MyPool");
            Connection con = ds.getConnection();
            if(con != null)  {
            foo = "Got Connection "+con.toString();
            Statement stmt = con.createStatement();
            ResultSet rst =
                stmt.executeQuery(
                  "select * from users");
            if(rst.next()) {
              foo=rst.getString(2);
              bar=rst.getString(3);
            }
            con.close();
        }
    }
      catch(Exception e) {ec= e.toString();}

Jeg får følgende exeption:

org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null', cause: No suitable driver

Jeg ved ikke om jeg gør det på den helt forkerte måde ? men noget hjælp til hvad jeg gør galt ville være dejligt :-)
Avatar billede arne_v Ekspert
03. november 2003 - 12:43 #3
Det er den rigtige måde.

Men den kan ikke finde driveren.
Avatar billede arne_v Ekspert
03. november 2003 - 12:45 #4
Har du verificeret med jar tvf at driver klassen faktisk er i jar filen ?
Avatar billede arne_v Ekspert
03. november 2003 - 12:48 #5
Der kun 2 mulige grunde til at den kan give den fejl:
  1) classloaderen kan ikke finde com.mysql.jdbc.Driver
  2) den får ikke læst connection URL rigtigt (og leder derfor efter
    den forkerte driver)

[URL 'null' antyder lidt at det kunne være #2]
Avatar billede 2c Nybegynder
03. november 2003 - 12:50 #6
Hvad er jar tvf ?

Jeg er ret sikker på den er deri. Før jeg ville lave en connection pool lavede jeg en connection hver gang med driveren på denne måde:

Class.forName("com.mysql.jdbc.Driver").newInstance();
String dbUrl = "jdbc:mysql://localhost:3306/2c2c";
Connection con = DriverManager.getConnection(dbUrl,"x1", "x2");
Statement stmt = con.createStatement();
String query = "SELECT *  FROM users"
........
Avatar billede 2c Nybegynder
03. november 2003 - 12:51 #7
Jeg er nødt til at smutte til time. jeg er tilbage om 1½ - 2timer.
Avatar billede arne_v Ekspert
03. november 2003 - 12:54 #8
jar tvf foobar.jar

lister indholdet af en jar fil (i en DOS box).
Avatar billede 2c Nybegynder
03. november 2003 - 14:39 #9
Nu har jeg også prøvet med jar tvf, og driveren er i filen.

Jeg tror min fejl er i noget af det jeg har skrevet i server.xml eller web.xml.

Rundt om det du har skrevet jeg skal skrive i server.xml har jeg skrevet :

<Context docBase="2C" path="/2C" reloadable="true">
.......
</Context>

Det jeg har lavet ligger under webapps/2c

Kan det være det der er forkert ?
Avatar billede 2c Nybegynder
03. november 2003 - 14:44 #10
Arghh, jeg fandt ud af det. Jeg havde skrevet c med stort et sted, og med lille et andet.

Men jeg takker mange gange for hjælpen.
Avatar billede Slettet bruger
11. november 2004 - 16:42 #11
Arne, kan du ikke smide et link til din artikel med connection pool, jeg kan ikke finde den :-(
Avatar billede arne_v Ekspert
11. november 2004 - 16:46 #12
Avatar billede Slettet bruger
11. november 2004 - 16:52 #13
Tak Arne, jeg vil kigge på det i aften
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