Tipps für die Verwendung von commons-pool in der Produktion
Basierend auf einer Antwort, die ich bekam hier, fing ich an zu geben, commons-pool einen ernsten Blick. Meine Letzte Erfahrung mit es war etwa 2003, wahrscheinlich in der version 1.1 oder 1.2. Seine wichtigsten Nutzer, DBCP, wird von vielen als fehlerhaft und zu vermeiden.
Hat jemand verwendet-commons-pool in der Produktion zu schreiben-pool von Ihrer eigenen? Was ist der beste pool-Typ zu verwenden? Ich Plane zu speichern client TCP-sockets in es.
Ist da ein allgemeiner pool, die es ersetzt?
- Das ist der erste von dem ich gehört habe DBCP als fehlerhaft... haben Sie etwas konkretes?
- meistens ist es verlorene verbindungen ohne Grund
- Das ist interessant: static.springsource.com/projects/tc-server/6.0/admin/... ... erwähnt die Unzulänglichkeit der DBCP. Nicht viel helfen, aber, da es closed source.
- AFAIK die Qualität von DBCP war der Hauptgrund zu schreiben, c3p0 und proxool
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, ich und der pool hält TCP-verbindungen, wie Sie beabsichtigen, es zu. Es ist verdrahtet, über den Frühling, so vorausgesetzt, Sie verstehen Spring-Konfiguration:
Die ConnectionFactory erstreckt BasePoolableObjectFactory und ist ein kleiner wrapper um eine SocketFactory.
@Erster Kommentar:
Die ConnectionFactory-Konstruktor nimmt einen server und einen port. In den überschriebenen makeObject(), schafft es Steckdosen, die eine Verbindung zu diesem server und den port ein. Es gibt Connection-Objekte, wickeln Sie den erstellten socket mit einigen convenience-Methoden für die Kommunikation über den socket.
Wird die Verbindung getestet, eine Art 'ping' oder 'echo' zur Verfügung gestellt, die das Protokoll verwendet, um Kommunikation über den socket. Sollte das nicht verfügbar gewesen, Validierung/Test der Verbindung ist nicht wirklich möglich, außer für Fragen der Steckdose, ob es geschlossen wurde. In diesem Fall, eine Verbindung in der pool hätte für ungültig erklärt, wenn Sie warf eine Ausnahme, und jedes Verfahren unter Verwendung der Verbindungen sollten bereit sein, für diese Art von Fehler, und versuchen Sie den gleichen Vorgang mit einer anderen Verbindung.
Sollten Sie überprüfen, dass die instantation mehr kostet, oder das abrufen aus dem pool. Denn die einzige gültige situation zu nutzen, der pool ist das erste.
Haben Sie schaute in Netty oder Apache MINA? Sie beide verfolgen Ihre TCP-verbindungen und macht die Umsetzung unabhängig von Kommunikationsprotokoll diejenigen TCP-sockets verwenden leichter.
Zunächst nicht verwenden commons-pool-1.3, hat es einige große Probleme mit multi-threaded-Anwendungen.
Zweiten, Java 5 concurency-Paket hat ordentliche pool-Implementierungen (siehe Beispiel hier)
Check-out MultiThreadedHttpConnectionManager - es ist ein Apache-Commons-HttpClient-Verbindungs-pool-manager, die wahrscheinlich passen Sie Ihre benötigen, direkt aus der box.