2009-05-27 13 views

Antwort

4

Anstatt eigene zu entwickeln, warum nicht eine Bibliothek wie Commons DBCP verwenden, die weit verbreitet ist und gut getestet wurde.

+0

Auch Apache-Lizenzierung funktioniert Wunder für fast alle Arten von Projekten. –

0

Ist eine Open-Source-Lösung das, wonach Sie suchen?

Siehe Apache Database Connection Pool API

+0

Nein. Ich möchte selbst schreiben. – Tony

+0

Ich glaube nicht, dass eine bestimmte Datenstruktur im Designmuster des Objektpools verwendet werden kann: http://en.wikipedia.org/wiki/Object_pool Der Hintergrundspeicher eines Objektpools könnte so einfach wie ein Array sein - So verwalten Sie den Zugriff auf eine begrenzte Anzahl von Ressourcen durch eine nicht definierte Anzahl von Ressourcenbenutzern, die die Aspekte eines Objektpools definieren. – diciu

+0

@diciu - Erwähnte Link ist kaputt ... Können Sie es aktualisieren? – nanosoft

0

Sehen Sie diese Sun Developer Tutorial: Connection Pooling:

In Versionen vor JDBC 2.0 jede Datenbanksitzung erfordert eine neue Verbindung und Anmeldung, auch wenn die vorherige Verbindung und verwendet-Login die gleiche Tabelle und Benutzerkonto. Wenn Sie eine JDBC-Version vor 2.0 verwenden und die Leistung verbessern möchten, können Sie stattdessen JDBC-Verbindungen zwischenspeichern.

0

Nicht sicher, dass es klug ist, Ihre eigenen zu erstellen.

ich verwendet habe c3p0 Verbindungspooling (mit Hibernate) in vielen Projekten mit großem Erfolg

7

Es sollte mit Object Pool Design-Muster implementiert werden. Sie können darüber in Kircher, Michael; Prashant Jain; (2002-07-04). "Pooling Pattern". EuroPLoP 2002. Retrieved on 2007-06-09. oder in Object Pool Design Pattern lesen. Java-Implementierung für ObjectPool und JDBCConnectionPool Klassen finden Sie here.

Object Pool ist in der Regel ein Singletons mit zwei Sammlungen von Objekten (zB Datenbankverbindungen) innen:

  1. entriegelten - für freie Objekte, die dem Kunden auf Wunsch zur Verfügung gestellt werden kann
  2. gesperrt - für gesperrte Objekte, die jetzt
im Einsatz sind

Diese Sammlungen können als Lists oder HashTables oder etwas anderes implementiert werden, hängt von Ihren Bedürfnissen ab. Für einfache ObjectPool - LinkedList Struktur wird gut genug sein.

2

Sie müssen in der Regel:

  • eine Art Wrapper um die „rohen“ Connection-Objekte Dinge wie zu verwalten, wenn die Verbindung wurde zuletzt ausgegeben, Diagnoseinformationen, möglicherweise ein Cache Ihrer vorbereiteten Anweisungen für die Verbindung Sie definieren dies, um was Sie brauchen
  • eine Sammlung, um die Verbindung Wrappers in das gleichzeitige Hinzufügungen/Entnahmen unterstützt - jede ordnungsgemäß synchronisierte Liste würde tun, aber eine ConcurrentLinkedQueue wäre eine vernünftige Wahl
  • ein Weg Um Zuteilungen aus dem Pool zu verwalten, erwägen Sie die Verwendung von th e Semaphore Klasse
  • möglicherweise, Gruppierung verschiedener Pools zusammen in einige "Pool-Management-Klasse" (z. so können Sie einfach anrufen „getConnection (database, nur lesbar)“ und es geht dem entsprechenden Pool)

Auf dieses können Sie dann unabhängig von Protokollierung bauen/Überwachung Sie benötigen.

Es gibt auch Befürworter für Standard-Verbindungspool-Frameworks. Ich weiß, es gibt diejenigen, die nicht zustimmen, aber ich persönlich würde diesen Weg nicht gehen - ein Verbindungspool (a) ist wirklich nicht schwer zu schreiben, (b) bildet einen Schlüsselteil Ihres Systems, den Sie wahrscheinlich verstehen müssen und anpassen.