Avatar billede simonvalter Praktikant
22. december 2003 - 20:52 Der er 24 kommentarer og
1 løsning

tomcat db connection pool

Jeg forsøger at sætte en connection pool på til mysql i tomcat.
det er ikke noget jeg har noget jeg har rodet med før så det er lidt svært ;/
jeg har prøvet at følge den her guide
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html

jeg har vedlagt en længere beskrivelse her af mit setup/fejl m.m.
http://gbit.dk/tomcat.txt


der gives point hvis det lykkedes mig at få det til at virke. Hvis i har brug for flere oplysninger så sig til og hvis det er nødvendigt kan jeg give access til en shell så i kan se nærmere på det.
Avatar billede arne_v Ekspert
22. december 2003 - 21:02 #1
Jeg mener at det er:
  <res-ref-name>jdbc/TestDB</res-ref-name>
Avatar billede arne_v Ekspert
22. december 2003 - 21:04 #2
Har du genstartet Tomcat efter at have rettet i server.xml ?
Avatar billede simonvalter Praktikant
22. december 2003 - 21:05 #3
jep
Avatar billede arne_v Ekspert
22. december 2003 - 21:05 #4
Jeg har brugt:

        Context init = new InitialContext();
        Context ctx = (Context) init.lookup("java:comp/env");
        DataSource ds = (DataSource) ctx.lookup("jdbc/TestDB");

men det burde ikke gøre nogen forskel.
Avatar billede simonvalter Praktikant
22. december 2003 - 21:08 #5
nu har jeg rettet web.xml til
<res-ref-name>jdbc/TestDB</res-ref-name>

fejlen er stadig
javax.naming.NameNotFoundException: Name java:comp is not bound in this Context
Avatar billede simonvalter Praktikant
22. december 2003 - 21:13 #6
jeg har også rettet
<Resource name="jdbc/TestDB">

<ResourceParams name="jdbc/TestDB">
så det står som her.
Avatar billede arne_v Ekspert
22. december 2003 - 21:13 #7
Prøv og ret til:

<Resource name="jdbc/TestDB" type="javax.sql.DataSource" scope="Shareable"/>
    <ResourceParams name="jdbc/TestDB">
Avatar billede arne_v Ekspert
22. december 2003 - 21:15 #8
too late
Avatar billede simonvalter Praktikant
22. december 2003 - 21:16 #9
jeg kan se hvor jdbc/TestDB passer ind .. men hvad fortæller man den når man siger java:comp/env
Avatar billede arne_v Ekspert
22. december 2003 - 21:18 #10
standard JNDI namespace
Avatar billede arne_v Ekspert
22. december 2003 - 21:22 #11
er context tagget korrekt defineret under host tagget ?
Avatar billede simonvalter Praktikant
22. december 2003 - 21:24 #12
ja det vil jeg mene .. jeg har lavet det igennem tomcat admin og det står under localhost.
Avatar billede medions Nybegynder
22. december 2003 - 21:29 #13
loadet har du MSN eller ICQ, for jeg har lige nogle spørgsmål vedr. FreeBSD.

Hvis du har, så send det lige til rune@medions.dk

//>Rune
Avatar billede arne_v Ekspert
22. december 2003 - 21:30 #14
Og du har kopieret MySQL JDBC driver har filen til common lib ?
Avatar billede arne_v Ekspert
22. december 2003 - 21:30 #15
jar filen

:-)
Avatar billede simonvalter Praktikant
22. december 2003 - 21:32 #16
jep den ligger der

/usr/local/jakarta-tomcat4.1/common/lib/mysql-connector-java-3.0.9-stable-bin.jar
Avatar billede simonvalter Praktikant
22. december 2003 - 21:34 #17
og jeg compiler med
javac -classpath /usr/local/jakarta-tomcat4.1/common/lib/jdbc2_0-stdext.jar -d . DBTest.java
Avatar billede arne_v Ekspert
22. december 2003 - 21:41 #18
Det er ikke et compile problem.
Avatar billede arne_v Ekspert
22. december 2003 - 21:50 #19
Jeg har lige testet hos mig og det virker med:

      <Context docBase="pooltest" path="/pooltest" reloadable="true">
            <Resource auth="Container" name="jdbc/TestMySQL" type="javax.sql.DataSource" />
            <ResourceParams name="jdbc/TestMySQL">
                <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></value>
                </parameter>
                <parameter>
                      <name>password</name>
                      <value></value>
                </parameter>
                <parameter>
                      <name>driverClassName</name>
                      <value>com.mysql.jdbc.Driver</value>
                </parameter>
                <parameter>
                      <name>url</name>
                      <value>jdbc:mysql://localhost/Test</value>
                </parameter>
            </ResourceParams>
          </Context>

    <resource-ref>
        <res-ref-name>jdbc/TestMySQL</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
  </resource-ref>

        Context init = new InitialContext();
        Context ctx = (Context) init.lookup("java:comp/env");
        DataSource ds = (DataSource) ctx.lookup("jdbc/TestMySQL");
        Connection con = ds.getConnection();
Avatar billede arne_v Ekspert
22. december 2003 - 21:57 #20
Jeg har selv skrevet koden i server.xml, det er en ældre Tomcat og en
endnu ældre MySQL JDBC driver men det ligner dit utroligt meget.
Avatar billede simonvalter Praktikant
22. december 2003 - 22:57 #21
så virker det :)

jeg kan stadig ikke se hvad der er forskel på min måde .. dvs den kode som manageren lavede og din .. for den skiftede jeg ud så fik jeg en ny fejl
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory, cause:
java.sql.SQLException: Server configuration denies access to data source

det lignede et host problem til databasen og selv om jeg connecter fra localhost
og
havde
GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'test' WITH GRANT OPTION;

så virkede det da jeg helgarderede mig med
test@gbit test@127.0.0.1 test@gbit.dk

har ikke fundet ud af hvilken host det var den skulle bruge men det er ikke så vigtigt ;)

arne lig et svar
og mange tak
Avatar billede arne_v Ekspert
22. december 2003 - 23:00 #22
svar
Avatar billede arne_v Ekspert
22. december 2003 - 23:04 #23
Jeg har fundet den !

useNaming="false"

http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/context.html

citat:

useNaming   

Set to true (the default) to have Catalina enable a JNDI InitialContext for this web application that is compatible with Java2 Enterprise Edition (J2EE) platform conventions.

useNaming="false" disabler JNDI, så no surprise at JNDI lookup ikke
virker !

Og hvad det management tool har tænkt på ved jeg ikke.
Avatar billede simonvalter Praktikant
22. december 2003 - 23:07 #24
perfekt så fik vi også det på plads.. tror jeg dropper management toolet, så får jeg nok også bedre fat i hvad det er der sker.
Avatar billede arne_v Ekspert
22. december 2003 - 23:09 #25
Jeg har aldrig brugt det.

Jeg synes at det er naturligt at man manuelt redigerer sine
server configurations filer.
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