Wenn ich eine singleton-Klasse für die Datenbank-Verbindung, kann ein Benutzer die Verbindung zu schließen, für alle?
Schrieb ich eine singleton-Klasse für die Beschaffung einer Datenbank-Verbindung.
Nun meine Frage ist diese: angenommen, es gibt 100 Benutzer auf die Anwendung zugreifen können. Wenn ein Benutzer die Verbindung schließt, für die anderen 99 Benutzer wird die Verbindung geschlossen werden, oder nicht?
Dies ist mein Beispiel-Programm, das verwendet eine singleton-Klasse, um eine Datenbank-Verbindung:
public class GetConnection
{
private GetConnection()
{
}
public Connection getConnection()
{
Context ctx = new InitialContext();
DataSource ds = ctx.lookup("jndifordbconc");
Connection con = ds.getConnection();
return con ;
}
public static GetConnection getInstancetoGetConnection ()
{
//which gives GetConnection class instance to call getConnection() on this .
}
}
Bitte guide mich.
Prüfen, verwenden Sie Connection Pool (en.wikipedia.org/wiki/Connection_pool). Zum Beispiel, DBCP (commons.apache.org/dbcp).
mehr als oft eine JNDI datasource ist standardmäßig ein connection-pool schon.
umgesetzt werden mag, dass es nicht ein singleton. Es ist etwa eine factory-Methode. Was wollen Sie erreichen?
Ich dachte ehrlich, diese Frage war ein Duplikat von eins, bis ich es gelesen habe ein bisschen enger. Schlug Sie einen Titel Bearbeiten, um besser zu reflektieren.
mehr als oft eine JNDI datasource ist standardmäßig ein connection-pool schon.
umgesetzt werden mag, dass es nicht ein singleton. Es ist etwa eine factory-Methode. Was wollen Sie erreichen?
Ich dachte ehrlich, diese Frage war ein Duplikat von eins, bis ich es gelesen habe ein bisschen enger. Schlug Sie einen Titel Bearbeiten, um besser zu reflektieren.
InformationsquelleAutor hanhu | 2011-07-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Solange Sie nicht wieder die gleichen
Connection
Instanz aufgetConnection()
nennen, dann gibt ' s nichts zu befürchten. Jeder Anrufer bekommt dann eine eigene Instanz. Wie weit bist du jetzt die Schaffung einer Marke neue Verbindung auf jedemgetConnection()
nennen und damit nicht wieder einige statische oder Instanz-variable. Also ist es sicher.Jedoch, dieser Ansatz ist ungeschickt. Es muss nicht sein, ein singleton. Helfer/utility-Klasse ist auch völlig in Ordnung. Oder wenn Sie wollen ein bisschen mehr Abstraktion, ein Verbindungs-manager zurückgegeben, die von einer abstrakten Fabrik. Ich würde nur ändern, um die Datenquelle nur einmal während die Klasse initialisiert wird, anstatt jedes mal in
getConnection()
. Es ist dieselbe Instanz immer sowieso. Halten Sie es Billig. Hier ist eine einfache kickoff Beispiel:werden wie folgt verwendet nach der normalen JDBC-idiom.
Siehe auch:
Ich glaube, du bist verwirrend statische Methoden mit statischen Feldern. Solange Sie nicht zuordnen, die Verbindung als ein statisches Feld der Klasse, es gibt kein problem.
Ich denke, was er meint, wenn eine Reihe von Klassen, die alle call -
Database.getConnection()
und nach einer Weile eine Klasse ruftconnection.close()
auf den Rückgabewert der vorherigen Anruf, nicht in der Nähe der Verbindung für alle?Ich glaube, du bist verwirrend statische Methoden mit statischen Feldern. Solange Sie nicht zuordnen, die Verbindung als ein statisches Feld der Klasse, es gibt kein problem.
Nun, ich denke, du verstehst das nicht meine Frage. Ich habe zwei Klassen
Foo
undBar
die jeder nutzen derDatabase
Klasse. Sie nennenDatabase.getConnection()
und schließen Sie es dann. Da Sie beide die gleiche Instanz des connection-Objekts, wennFoo
schließt, wird es auch geschlossen werden, umBar
, richtig?InformationsquelleAutor BalusC
Zu enge Verbindung
Zu rufen, um die Verbindung:
InformationsquelleAutor PauRibes
InformationsquelleAutor gayan rangana
Code unten ein Arbeits und getestet Singleton-Pattern für Java.
, Während sich die Verbindung in jeder Klasse verwenden Sie einfach folgende Zeile
Hoffe, dass es helfen kann 🙂
InformationsquelleAutor farhangdon