Startseite
Stellenmarkt
Downloads
Kontakt
  Community Center:   Forum  |  Gruppen  |  Chat  |

Zurück   Forum Fachinformatiker.de > Programmierung > Java



Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02.02.2010, 15:51   #1
Reg.-Benutzer
 
Benutzerbild von alexC++
 
Reg.-Datum: 23.01.2007
Ort: Kaiserslautern
Standard Singleton-Pattern für Datenbankverbindung

Hallo,

habe mal probiert ein Singleton-Pattern für eine Datenbankverbindung zu bauen.
Habe zwar schon mal in Java programmiert, ist aber schon über 2 Jahre her, also bitte Nachsicht mit mir üben

Schauts euch mal an und gibt eure Meinung dazu ab!

Code:
public class DatabaseConnection {
	
	private static Connection instance = getConnection();
	
	private DatabaseConnection() {}
	
	public static Connection getInstance() {

             return instance;

        }
	
	/**
	 * 
	 * @return Connection
	 */
	private static Connection getConnection()  {
		// JDBC-Treiber für die Verbindung
		// zur mySQL-Datenbank laden
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
		} catch (InstantiationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		// Verbindungsoptionen
		String sUser = "root";
		String sPassword = "";
		String sUrl = "jdbc:mysql://localhost:3306/lerndvd";
		
		// Verbindung aufbauen
		Connection con = null;
		try {
			con = DriverManager.getConnection(sUrl, sUser, sPassword);			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}	
}
Ich wollte die Exceptions eigentlich in den Methoden-Kopf mit "throws" platzieren.
Gibt es da eine gewisse Anzahl die gültig ist?
Er hat nämlich gemeckert.

Gruß
Alex
__________________
alexC++ ist offline   Mit Zitat antworten
Alt 02.02.2010, 16:09   #2
Reg.-Benutzer
 
Benutzerbild von kingofbrain
 
Reg.-Datum: 23.09.2001
Ort: Landsberg a. Lech
Standard

Das sieht in meinen Augen gut aus. Gemeckert hat der Compiler vielleicht beim Aufruf von getConnection(), weil dort kein try/catch Block ist. An der Anzahl der Exceptions in der throws Deklaration sollte es nicht scheitern.

Schöne Grüße,

Peter
__________________
DON'T PANIC.
kingofbrain ist offline   Mit Zitat antworten
Alt 02.02.2010, 16:11   #3
Reg.-Benutzer
 
Reg.-Datum: 29.01.2009
Standard

Ich hatte in Multi-Threaded-Umgebungen immer Probleme mit einem einfachen Singleton-Pattern.
Deshalb hab ich das immer mit zwei synchronized gemacht.
Code:
	private static Connection instance = null;	
	public static Connection getInstance() {
		synchronized(DatabaseConnection.class) {
			if(instance == null) {
				synchronized(DatabaseConnection.class) {
					if(instance == null){
						instance = getConnection();
					}// 2nd if null
				}// 2nd synchro
			}// 1st if null
		}// 1st synchro
		return instance;
	}
Die Begründung bekomm ich nicht mehr 100%ig zusammen, aber google ist da aussagekräftig.
__________________
CU/Andi

"Nullum magnum ingenium sine mixtura dementiae fuit." - Seneca, De tranquillitate animi

"Language shapes the way we think and determines what we can think about." - B.L.Whorf

"Wir sind allein, völlig allein auf diesem Planeten. Von all den Lebensformen um uns herum hat sich außer dem Hund keine auf ein Bündnis mit uns eingelassen." - Maurice Maeterlinck

Bauch, Beine, Po
VaNaTiC ist offline   Mit Zitat antworten
Alt 02.02.2010, 16:37   #4
Reg.-Benutzer
 
Benutzerbild von alexC++
 
Reg.-Datum: 23.01.2007
Ort: Kaiserslautern
Standard

Schau dir mal den link hier an
Singleton Pattern in Java

da stehen all die probleme drinne.
habe jetzt das objekt beim ersten zugriff auf die klasse durch
die JVM erzeugt. das würde alle bekannten probleme lösen.
auch die bei der synchronisierung.


gruß
__________________
alexC++ ist offline   Mit Zitat antworten
Alt 02.02.2010, 16:48   #5
Reg.-Benutzer
 
Benutzerbild von kingofbrain
 
Reg.-Datum: 23.09.2001
Ort: Landsberg a. Lech
Standard

Das mit der fehlenden Synchronisierung war auch mein erster Gedanke, bis ich gesehen habe, dass das ja schon ganz am Anfang passiert und nicht erst beim ersten Zugriff auf die Instanz. Ich denke deshalb auch, dass Multithreading hier kein Problem sein sollte.

Peter
__________________
DON'T PANIC.
kingofbrain ist offline   Mit Zitat antworten
Alt 02.02.2010, 19:33   #6
Reg.-Benutzer
 
Reg.-Datum: 29.01.2009
Standard

Hmm, klingt eigentlich trivial und einleuchtend. Nur ich kann ich nicht mehr erinnern warum ich das nicht so gemacht hab.

Deinen Link hab ich mir mal angeguckt. Nur das vorletzte (problematische) DoubleChecked...-Beispiel hinkt, da nicht 2mal synchronized, sondern nur zweimal if ( null ). Und das war eben zu wenig.
__________________
CU/Andi

"Nullum magnum ingenium sine mixtura dementiae fuit." - Seneca, De tranquillitate animi

"Language shapes the way we think and determines what we can think about." - B.L.Whorf

"Wir sind allein, völlig allein auf diesem Planeten. Von all den Lebensformen um uns herum hat sich außer dem Hund keine auf ein Bündnis mit uns eingelassen." - Maurice Maeterlinck

Bauch, Beine, Po
VaNaTiC ist offline   Mit Zitat antworten
Alt 03.02.2010, 07:41   #7
Reg.-Benutzer
 
Reg.-Datum: 02.02.2007
Daumen runter Zonk

Zitat:
Zitat von VaNaTiC Beitrag anzeigen
[...]
Deinen Link hab ich mir mal angeguckt. Nur das vorletzte (problematische) DoubleChecked...-Beispiel hinkt, da nicht 2mal synchronized, sondern nur zweimal if ( null ). Und das war eben zu wenig.
Dein Beispiel ist genauso problematisch, Siehe IBM: Double-checked locking and the Singleton pattern

Gruß
kein-tee ist offline   Mit Zitat antworten
Antwort

Lesezeichen
Zurück   Forum Fachinformatiker.de > Programmierung > Java

Themen-Optionen
Ansicht


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[C#] Singleton Pattern in einem Interface vorgeben Sturm .NET 4 24.06.2009 10:28
Datenbankverbindung VS 2005 becks290188 .NET 1 17.03.2008 09:11
Datenbankverbindung mit OLE DB coyotegirl1981 C++: Compiler, IDEs, APIs 2 08.11.2007 17:20
EJB Pattern Pinhead Java 2 31.07.2003 18:26
Design Pattern / Entwurfsmuster Mirko Java 1 15.01.2002 15:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:18 Uhr.