Announcement

Collapse
No announcement yet.

Wo schließt ihr DB Connection in einer Gui Anwendung?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wo schließt ihr DB Connection in einer Gui Anwendung?

    Hallo,

    ich bin in Sachen JAVA neu unterwegs, bislang hatte ich in anderen Programmiersprachen programmiert. Mit der neuen FX-Technologie für GUI Anwendungen wird jetzt Java endlich auch für mich interessant. Also versuche ich mal von C / Net auf Java umzusteigen.
    Mal eine grundsätzliche Frage, sicher eine übliche Einsteiger-Frage:

    Ich möchte eine komplexere Datenbankanwendungen programmieren die mit diversen Tabellen arbeitet. Ich dachte an das eingebaute Derby, ist das stabil und sicher genug oder hat diese Standalone-Datenbank noch Macken? Oder muss es doch MYSQL sein?

    Aber jetzt die Hauptfrage: Es macht sicher keinen Sinn in jedem Dialog die Datenbank-Connection zu öffnen oder zu schließen, oder? Ich denke es ist doch vermutlich besser wenn diese einmal am Start aufgebaut und am Ende wieder geschlossen wird, oder? Wo macht ihr das schließen genau in einer Gui-Anwendung?

    Und wo speichert ihr den Connector, damit alle Dialog diesen nutzen können? Oder gebt ihr den immer allen Konstruktoren neuer Klassen mit?

    All diese Sachen findet man leider in den schönen Java Büchern und Beispielen nicht, da wird meist Connection aufgebaut und gleich wieder geschlossen, was in der Praxis ja wohl weniger sinnvoll ist. Gibt es da keine schönes Praxisbeispiele (Adressbuch etc.) wo man sich mal grundsätzliche Struktur eines Java Datenbankprogrammes als Anregung anschauen kann?

    Mfg
    Pet2001

  • #2
    Normalerweise hat man in (Server-)Anwendung einen sogenannten Connection Pool. DB-Connections die man nicht mehr benötigt werden an den Connection Pool zurück gegeben und bei bedarf von dort geholt.
    Für eine Client-Anwendung stört es m. E. nicht wenn man die DB-Verbindung immer offen hat (bzw. einen Connection-Pool mit der Pool-Größe 1).

    Comment


    • #3
      Du koenntest den Code in eine Singletonklasse auslagern. Dort die Connection/Session anlegen, von dort die Connection bei Bedarf holen und auch da beenden
      Christian

      Comment


      • #4
        Originally posted by Christian Marquardt View Post
        Du koenntest den Code in eine Singletonklasse auslagern. Dort die Connection/Session anlegen, von dort die Connection bei Bedarf holen und auch da beenden


        Oh ja, das scheint eine gute Möglichkeit! Aber wo darin soll die Datenbank Connection geschlossen werden, in der finalize() Methode?

        Comment


        • #5
          Du hast doch in einer GUI -Anwendung einen definierten Ausstieg über Window Close des JFRAME oder Dispose des JFRAME... Dort würde ich das tun
          Christian

          Comment


          • #6
            Originally posted by Christian Marquardt View Post
            Du hast doch in einer GUI -Anwendung einen definierten Ausstieg über Window Close des JFRAME oder Dispose des JFRAME... Dort würde ich das tun
            Nun ich will JavaFX nutzen, da gibt es die stage. Wie das schließen dort abläuft weiß ich noch nicht genau.

            Comment


            • #7
              http://www.java2s.com/Code/Java/Java...closeevent.htm
              Christian

              Comment


              • #8
                Ich würde sagen das kommt auch drauf an wieviele Clients am Ende parallel laufen sollen. Die Schwachstelle bei Datenbanken sind die gleichzeitig offenen Connections. Zu viele vertragen DBs in der Regel nicht sehr gut. Wenn Du von dem Programm nur ein paar Instanzen hast kannst Du die Verwaltung der Connections ruhig wie oben beschrieben selbst im Programm machen. Wenn Du allerdings viele Instanzen dieses Programms haben wirst, dann würde ich drüber nachdenken mir einen Application Server zu bauen. Das ist praktisch ein Teil zwischen Deinem UI und der Anwendung der sich um die Logik und die DB kümmert. Das ist allerdings schon ein bisschen mehr Aufwand als alles im Programm selbst zu machen. Wenn Du die (DB)Logik vernünftig kapselst kannst Du Dir auch später relativ einfach einen Application Server dazu bauen. Ich wollte das der Vollständigkeit wegen nur erwähnt haben

                Comment


                • #9
                  Nein es wird vermutlich nur eine Standalone Anwendung. Es werden wohl maximal 2 oder 3 Programme parallel die Datenbank nutzen. Nur verschiedene Fenster greifen halt in einem Thread gleichzeitig auf verschiedene Tabellen zu, aber dazu sollte ja eine Connection reichen. Ich wollte nur nicht in jedem Fenster der Anwendung eine Connection öffnen.

                  Comment


                  • #10
                    Auf jeden Fall das oben erwähnte Application Pooling benutzen. Das erkennt ein bischen nach Bedarf wieviele Connections man gleichzeitig braucht. Sofern ich weiß ist das sogar threadsafe.

                    Comment

                    Working...
                    X