Veröffentlicht 8. Juli 200817 j 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
8. Juli 200817 j 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?
8. Juli 200817 j //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
9. Juli 200817 j 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!!
9. Juli 200817 j 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
9. Juli 200817 j 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!
9. Juli 200817 j 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.
9. Juli 200817 j 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??
9. Juli 200817 j 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ß
9. Juli 200817 j 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?
9. Juli 200817 j 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ß
9. Juli 200817 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.