Zum Inhalt springen

DatabaseConnectionPooling


steve77

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...