allgemeine Architekturfrage

Status
Nicht offen für weitere Antworten.

mischer

Aktives Mitglied
Hi,

ich bin gerade dabei eine Software zu entwerfen, bin aber mit meiner Architektur überhaupt noch nicht zufrieden.
Ein Problem ist folgendes:
Ich habe für die Datenbankanbindung eine eigene Klasse namens DBConn. Von dieser Klasse erzeuge ich in meiner Hauptklasse eine
Code:
public static DBConn db = new DBConn();
und greife dann später aus allen Klassen in der Art
Code:
 <Instanz der Hauptklasse>.db.machwas();
zu.
Das funktioniert zwar logischerweise, aber es ist absolut idiotisch, zumal es die Unterklassen nicht wiederverwendbar macht, da diese ja den Instanznamen der Main hart codiert haben.

Wie stellt man das richtig an?

Vielen Dank für eure Mühe!
MfG
mischer
 
G

Guest

Gast
Singleton?
Code:
DBCon db = DBCon.getInstance(); // Wo auch immer im Programm
 
G

Guest

Gast
Code:
public class DBCon ... {

  private static DBCon instance = null;
  ...

  public static DBCon getInstance() {
    synchronized(instance) {
      if(instance == null) {
        instance = new DBCon();
        Runtime.getRuntime().addShutdownHook(
          new Thread() {
            public void run() {
              instance.release(); // Verbindung zur DB abbauen etc.
            }
          }
        );
      }
    }
    return instance;
  }
...
 

mischer

Aktives Mitglied
Danke für die schnelle Antwort!

So einfach kann das manchmal sein - Singleton.

Aha addShutdownHook klingt ja interessant. Ich hätte es einfach bei Programmende mit
Code:
DBConn.getInstance().close();
gemacht, aber das werd ich mal probieren.

Danke nochmal!

MfG
mischer
 
G

Guest

Gast
Beachte aber, dass es bei Multithreading zu Problemen kommen kann,
wenn du nur eine Connection verwendest. (z.B. nur 1 ResultSets gleichzeitig offen)
Ausserdem immer alles bombensicher machen, damit ResultSets, PreparedStatements etc.
freigegeben werden. (finally-Block)
z.B.
gefährlich
Code:
try {
  PreparedStatement p = ...
  ...
  p.close(); // Wenn vor dieser Zeile eine Exception kommt, wird das Statement nicht freigegeben!!!
}
catch(SQLException e) {
  ...
}
OK
Code:
PreparedStatement p = null;
try {
  p = ...
  ...
}
catch(SQLException e) {
  ...
}
finally { // Wird auf jeden Fall ausgeführt, egal wo es knallt
  if(p != null) { 
    try { 
      p.close(); 
    } 
    catch(SQLException e) { 
      logger.error(e); // Für die Fehlerursachenforschungsabteilungeierköpfe ;)
    }
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
R Allgemeine Frage zu RMI bei MVC Allgemeine Java-Themen 2
M Allgemeine Frage: Wie lernt man Java / Programmieren von Grund auf? Allgemeine Java-Themen 7
A Methoden Allgemeine Java Frage Allgemeine Java-Themen 3
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
I Allgemeine Herangehensweise bei Übernahme Allgemeine Java-Themen 19
J Erste Schritte Applet allgemeine Funkion Allgemeine Java-Themen 8
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
S allgemeine Datenbankschnittstelle für Webservice Allgemeine Java-Themen 72
M allgemeine frage zur plattformunabhängigkeit Allgemeine Java-Themen 2
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
J Ganz allgemeine Frage Allgemeine Java-Themen 3
E Architekturfrage Vorgehensweise MVC Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben