Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

DatabaseConnectionPooling

Empfohlene Antworten

Veröffentlicht

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

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?

//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

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!!

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

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!

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.

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??

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ß

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?

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ß

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.