steve77 Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Hallo, ich suche ein gute Beispiel für das DataBaseConnectionPooling. Soll heissen, dass man einen Pool von Connection (Datenbankverbindung) hat, den man nutzen kann. Der Vorteil ist, dass man nicht ständig neue Verbindungen zu einer Datenbank aufbauen muss, sondern sich aus dem Pool bedienen kann, die benutzte Verbindugen wird (wenn sie nicht mehr gebraucht wird) in den Pool zurückgegeben! Ich habe dbPool_V4 ausprobiert. Hat jemand vielleicht ein abderes gutes Tool oder ein gutes Beispiel für mich, danke!!!! Gruß Stefan Zitieren
steve77 Geschrieben 8. Juli 2008 Autor Geschrieben 8. Juli 2008 Habe jetzt was schickes gefunden: DBCP - Overview Wie man einen Pool aufbaut weiss ich schon, aber die getConnection-Methode funktioniert nicht richtig. connectionPool = new ConnectionPool("local", 10, 30, 180000, url, user, password); Connection connection = connectionPool.getConnection(); //hier kommt dann eine SQLException Weiss jemand vielleicht rat? Zitieren
dr.dimitri Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 //hier kommt dann eine SQLException Und gerade wo's spannend wird hörst Du auf. Mal im Ernst: Warum glauben immer mehr Leute, dass die Fehlermeldungen so uninteressant sind? Ausserdem wär die verwendete DB noch wichtig. Dim Zitieren
steve77 Geschrieben 9. Juli 2008 Autor Geschrieben 9. Juli 2008 Ich benutze oracle10g las Datenbank. Die fehlermeldung sagt leider nicht viel aus: java.sql.Exception at snaq.db.ConnectionPool.getConnection(ConnectionPool.java:222) Also scheint irgendwas mit der getConnection nicht zu klappen!! Zitieren
dr.dimitri Geschrieben 9. Juli 2008 Geschrieben 9. Juli 2008 Ok. Ist der Oracle Client richtig installiert, die Datenbank die du ansprechen möchtest in der lokalen tnsnames.ora (sofern du kein ldap verwendest) eingetragen und ist die DB z.B. über sqlplus etc. ansprechbar? Des weiteren musst Du auch den Oracle JDBC Treiber eingebunden und geladen haben (bzw. dem Pool mitteilen, wie er den Treiber laden kann), der übrigends selbst auch ConnectionPooling unterstützt. Was steht denn bei dir in der URL? Dim Zitieren
steve77 Geschrieben 9. Juli 2008 Autor Geschrieben 9. Juli 2008 Die url sieht folgendermassen aus: jdbc:oracle:thin:@wxpsr1.test.de:1522:test Was meinst du damit, dass ich dem Pool mitteilen muss, wie er den treiber laden kann. Soweit ich dass verstanden haben benötige ich um einen ConnectionPool aufzubauen folgende Dinge: ConnectionPool pool = new ConnectionPool(<poolname>, <maxpool>, <maxconn>, <expiry>, <url>, <username>, <password>); diese Eelemente habe ich eingefügt, das Programm baut auch einen Pool auf ( habe ich durch debugt) aber wenn eine Connection geholt werden soll, kommt die besagte fehlermeldung! Zitieren
kein-tee Geschrieben 9. Juli 2008 Geschrieben 9. Juli 2008 fehlermeldung sagt leider nicht viel aus: java.sql.Exception at snaq.db.ConnectionPool.getConnection(ConnectionPool.java:222) Doch, sie sagt sehr viel aus, z.B. das du gar kein Commons DBCP nutzt sondern DBPool . Vielleicht hilft dir das hier weiter. Gruß PS: dr.dimitri hat im übrigen Recht, der Oracle JDBC Treiber kann Connection Pooling von Hause aus. Zitieren
steve77 Geschrieben 9. Juli 2008 Autor Geschrieben 9. Juli 2008 Hi, hab das mal durch debugt. Folgendes passiert: Er baut einen pool auf ( ich befürchte aber, dass dort keine Connections drin sind). Nun will er aus diesem pool eine verbindung holen. Folgende Methode wird aufgerufen: public Connection getConnection() throws SQLException { try { [B]Reusable o = super.checkOut();[/B] if (o != null) { CacheConnection cc = (CacheConnection)o; cc.setOpen(); return cc; } return null; } catch (Exception e) { [B]log(e, "Error getting connection");[/B] if (e instanceof SQLException) throw (SQLException)e; D.h. er macht sofort einen checkout. Definition von Checkout lautet: Checks out an item from the pool. If no free item is available, a new item is created unless the maximum number of items has been reached. If a free item is not valid it is removed from the pool and another is retrieved. Das heisst ja das die Connection nicht benutzt wird, sondern sofort wieder frei gegeben wird. Woran kann liegen?? Zitieren
kein-tee Geschrieben 9. Juli 2008 Geschrieben 9. Juli 2008 Das heisst ja das die Connection nicht benutzt wird, sondern sofort wieder frei gegeben wird. Woran kann liegen?? Was reizt dich zu dieser Aussage? Es heisst nur, dass sichergestellt wird, dass du eine valide Connection geliefert bekommst. Nicht mehr, nicht weniger. Frage an dich: Wie lädst du den Oracle JDBC Treiber? Gruß Zitieren
steve77 Geschrieben 9. Juli 2008 Autor Geschrieben 9. Juli 2008 Hmm, ja das ist eine gute frage. Ich habe das beispiel nachvollzogen, da steht nichts von einem treiber. ConnectionPool pool = new ConnectionPool(<poolname>, <maxpool>, <maxconn>, <expiry>, <url>, <username>, <password>); Wie mache ich denn am besten dem pool den treiber bekannt? Zitieren
kein-tee Geschrieben 9. Juli 2008 Geschrieben 9. Juli 2008 Wie mache ich denn am besten dem pool den treiber bekannt? Leg den Oracle JDBC Treiber in deinen Classpath und nutze folgenden Code, um den Treiber zu laden: try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Gruß Zitieren
steve77 Geschrieben 9. Juli 2008 Autor Geschrieben 9. Juli 2008 Hi, ja sorry, ein blöder fehler, ich hatte den treiber aufgrund des beispiels nicht eingebunden, denn dort war er nicht aufgeführt. Das habe ich jetzt aber nachgeholt und es klappt :-) :-) Vieln dank für deine hilfe Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.