30. Juli 2010  
  Suche:
 
  Basics
  Code-Galerie
  Forum
  FAQ
  Tipps & Tricks
  Literatur
  Knowledge Base
  Workshops
  JSP-Hosting
  JSP-Engines
  Jobbörse
  Links
  JSP-Sites
  Newsletter
  JSP-Test
  Impressum
  Username:
  
  Passwort:
  
  

  Jetzt registrieren
  Warum registrieren?

  Valid HTML 4.01!
  Valid CSS!

Datenbankverbindungen verwalten (Connection Pools)

von shark,  18.05.2001 14:38:28  (12 votes)  [vote]
Bevor auf eine Datenbank zugegriffen werden kann muss eine Applikation eine DB Verbindung (Connection) zu der Datenbank herstellen. Die DB Verbindung ist der Kommunikationskanal zwischen der Applikation und der Datenbank.
Eine Datenbankverbindung ist ausserdem mit einem Datenbankbenutzer (DB Account) verknüpft.

In einer Standalone Anwendung wird eine Datenbank Verbindung einmal erzeugt und während dem Lebenszyklus der Anwendung offen gehalten. In einer Server Applikation, die mit vielen Request von verschiedenen Benutzern arbeitet, ist das Verwalten der DB Verbindungen komplexer als bei Standalone Anwendungen.

Es kostet Zeit DB Verbindungen zu erzeugen (1-3 Sekunden pro neuer Verbindung), DB Verbindungen müssen aufgrund des Transkationsverhaltens eindeutig zu einem Benutzer sein und DB Verbindungen sollten nicht über einen langen Zeitraum hinweg von einzelnen Benutzern blockiert werden.

Ein Weg um DB Verbindungen zu verwalten ist, eine Verbindung pro Servlet/JSP zu benutzen. Eine DB Verbindung kann beim initialisieren erzeugt und in einer Instanzvariablen gehalten werden. Bei diesem Ansatz ist allerdings zu beachten, dass Multithreading Probleme auftreten können, weil die DB Verbindung in einer Instanzvariablen gehalten wird.

Eine weitere Alternative ist das Konzept "one Connection per resource", das bedeutet DB Verbindungen in Session Variablen zu verwalten. Der Vorteil dabei ist, dass keine Multithreading Probleme auftreten, die DB Verbindung allerdings die meiste Zeit inaktiv ist.

Die beste Alternative ist die Verwendung eines Connection Pools. Ein Connection Pool enthält eine definierte Anzahl von DB Verbindungen (Connection Objects) die von Servlets und JSP- Seiten verwendet werden können. Für jeden Request wird eine Connection ausgecheckt, benutzt und wieder eingecheckt. Mit dem Pool Konzept erreicht man eine optimale Ausnutzung der Connection Resourcen.

Im JDBC 2.0 Standard gibt es bereits einen Connection Pool in Form von Java Klassen/Interfaces. Informationen zu dem JDBC 2.0 Connection Pool findet man in der JDBC  2.0 Spezifikation, die über den Link: http://java.sun.com/products/jdbc/ heruntergeladen werden kann.

Der Vorteil des JDBC 2.0 Connection Pools ist, dass die Benutzung des Pools transparent für den Anwendungsentwickler ist. Das DataSource Objekt, welches die Grundlage für die Ermittlung einer DB Verbindung ist, wird als JNDI Resource registriert. Der folgende Code Auszug zeigt wie man die Referenz eines DataSource Objektes ermittelt:

// Namens Kontext erzeugen
Context oContext = new InitialContext();

// Data Source Objekt erzeugen
DataSource oDataSource = (DataSource) oContext.lookup("jdbc/userDB");

// Connection Objekt aus dem Pool auschecken
Connection oConnection = oContext.getConnection();

// Connection Objekt in Pool einchecken
oConnection.close();

Auf Basis von JDBC 1.0 gibt es mittlerweile auch Implementierungen für Connection Pools. Eine gute Alternative zu dem JDBC 2.0 Connection Pool ist der "DBConnectionBroker" der über den Link: http://www.javaexchange.com heruntergeladen werden kann. Es ist empfehlenswert Wrapper zu schreiben, die den JDBC 1.0 Connection Pool die Schnittstelle des JDBC 2.0 Connection Pools übertragen. Es ist dadurch später leicht möglich einen JDBC 1.0 Connection Pool gegen eine neuere Implementierung auszutauschen.
[Druckansicht]    [Beitrag versenden]
<< zurück  Kommentieren

Kommentare zu diesem Eintrag
Re: Datenbankverbindungen verwalten (Connection Pools)
mbretscher, 22.05.2003 11:28:06

die Rechtevergabe der Datenbank wird
über Connection Pool ignoriert.

Re: Datenbankverbindungen verwalten (Connection Pools)
matbtt, 23.06.2003 16:42:04

Da ist ein Fehler unterlaufen. Es muss oDatasource.getConnection() heißen.

Context oContext = new InitialContext();
DataSource oDataSource = (DataSource) oContext.lookup("jdbc/userDB");
Connection oConnection = oDatasource.getConnection();


Re: Datenbankverbindungen verwalten (Connection Pools)
RickYoung, 25.06.2003 12:17:04

hi,

wenn ich nun meine DB-Abfragen in Java Beans verlagert habe und von der JSP-Seite nur die Methoden aufrufe, was muß ich bei der Definition von oContext etc. berücksichtigen ?

Da ich mehrere Beans parallel laufen haben, z.B. UserBean, CartBean, MessageBean etc. möchte ich natürlich, daß alle auf denselben Pool zugreifen.

Wird der Pool in jeder Bean separat installiert ?

gruß,
rick


<< zurück


Hinweis: Auf dieser Seite liegen Links zu anderen Seiten im Internet. Für alle diese Links gilt: Wir betonen ausdrücklich, daß wir keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten haben. Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten aller gelinkten Seiten auf dieser Homepage und machen uns ihre Inhalte nicht zueigen. Diese Erklärung gilt für alle auf unserer Homepage angebrachten Links

Redaktion/Betreiber von JSP-Develop übernehmen keinerlei Gewährleistung und Verantwortung für die Richtig- und/oder Vollständigkeit von den auf den Webseiten JSP-Develop veröffentlichten Source Codes. Die Verantwortung der Verwendung/Anwendung sowie etwaige Modifikation der hier veröffentlichten Sourcen obliegt einzig dem Benutzer der Webseite, welche die veröffentlichten Sourcen in einer Applikation/Anwendung einsetzt. Durch das Kopieren und/oder Benutzen der Sourcen in einer Applikation/Anwendung bzw. etwaigen Abschriften wird dieser Rechtshinweis anerkannt.

Java, JSP, JavaServer Pages, J2EE, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries. IBM, WebSphere are trademarks or registered trademarks of International Business Machines Corporation. Other trademarks and registered trademarks are the property of their respective owners.