Swing Anwendung mit DB

Status
Nicht offen für weitere Antworten.

Capasso

Bekanntes Mitglied
Hallo,

ich möchte eine Anwednung programmieren die ihre Daten aus einer Datenbank bezieht.
Die Datenbank soll mit der Anwendung ausgelierfert werden.

Aber ich bin mir nicht sicher welche Vorgehensweise die Beste ist.

Ich möchte das Projekt nach MVC aufteilen.

Nun stehe ich vor folgenden der Frage:
Wie handhabe ich das mit der Datenbankanbindung und Persitenz?
Selber machen, Framework (wenn ja welches und warum) oder ganz was anderes.

Gruß
Cap
Ps.: Ein link zu einem Tutorial wäre dann auch nicht schelcht
 

foobar

Top Contributor
Da gibt es viele Möglichkeiten. Wenn du eine neue Anwendunng entwickelst lohnt sich auf jeden Fall ein ORM-Tool wie Hibernate. Als DB kann ich dir Apache Derby empfehlen.
Du kannst das ganze aber auch mit iBatis, Spring Jdbc oder reinem Sql implementieren. Von purem Sql kann ich dir nur abraten, Spring JDBC ist da schon eine sehr große Hilfe.
DAO-Pattern ist in jedem Fall ein Muß: http://de.wikipedia.org/wiki/Data_Access_Object
 

Capasso

Bekanntes Mitglied
hast du zufällig nen gutes Tutorial zu Hibernate oder Spring und DAO. (am besten Deutsch :D )
 
M

maki

Gast
Die üblichen (und primitiven) CRUD Operationen werden schon vom EntityManager bereitgestellt, dafür hat man früher DAOs genommen.

Für Funktionen auf einer höheren Abstraktionensebene kann man sich sog. Repositories schreiben, ist auch besser imho:
1. sonst endet in den DAOs einerseits wieder Businesslogik
2. oder man greift auf diese primitiven DAOs Operationen direkt aus hogh-level Abstraktionen zu, wie zB. Domänenobjekte oder gar EJBs zu, auch nicht schön.
 

L-ectron-X

Gesperrter Benutzer
maki hat gesagt.:
Die üblichen (und primitiven) CRUD Operationen werden schon vom EntityManager bereitgestellt, dafür hat man früher DAOs genommen.
Ich hab ganz selten mit Datenbanken zu tun. Daher sagt mir EntityManager erst mal gar nichts. ???:L
Kannst du mal etwas mehr darüber verraten?
 

tfa

Top Contributor
Ich verwende die JPA-Implemtierung Hibernate (genauer gesagt ein HibernateTemplate über Spring) und habe trotzdem DAOs. Nichts spricht dagegen, hier eine Abstraktionsebene zu kapseln. Zwar delegieren die meisten Methoden nur an das Template, aber einige unübliche, nicht-primitive Operationen sind trotzdem vorhanden. Die kommen dann in konkrete DAO-Implementierungen pro Fachklasse, der Rest steht in einem GenericDAO.
Außerdem wird das Transaktionsmanagement (unter anderem) in den DAOs geregelt.
 

foobar

Top Contributor
Für Funktionen auf einer höheren Abstraktionensebene kann man sich sog. Repositories schreiben, ist auch besser imho:
Wie sieht das dann aus?

Mit dem EntityManager habe ich noch nie gearbeitet, daher nutze ich immer DAOs.
 
M

maki

Gast
Wie gesagt, der EntityManager bietet das schon, da werden DAOs im Hintergrund soz. erzeugt und vom Nutzer versteckt (abstrahiert).

Für Funktionen die über die Standard CRUD Operationen hinausgehen, sollte man sich sog. Repositories schreiben.

Anders als DAOs sind Repositories high-level Abstraktionen, da werden Methoden angeboten die von Domänenobjekten direkt genutzt werden, also mit fachlichem Bezug.

Diese Methoden in DAOs zu packen hat oft dazu geführt, dass in den DAOs Businesslogik enthalten ist... oder man hat an einer Stelle für komplexere Operationen mehrere DAOs benutzt, oft gesehen in EJBs 2.1, auch nicht schön, da DAOs eher primitiver Natur sind, passt nicht wirklich zur OO.
 
M

maki

Gast
L-ectron-X hat gesagt.:
maki hat gesagt.:
Die üblichen (und primitiven) CRUD Operationen werden schon vom EntityManager bereitgestellt, dafür hat man früher DAOs genommen.
Ich hab ganz selten mit Datenbanken zu tun. Daher sagt mir EntityManager erst mal gar nichts. ???:L
Kannst du mal etwas mehr darüber verraten?
Der EntityManager ist die Neuerung in JPA (abgesehen von den annos), Dinge wie eine Entities finden, persistieren, updaten, löschen, NamedQueries ausführen etc. werden alle von ihm übernommen, eben das was früher die DAOs gemacht haben.

http://java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html
 

L-ectron-X

Gesperrter Benutzer
Da du einen Link zum J2EE-API gepostet hast, muss ich davon ausgehen, dass mir die Klasse nicht für Desktop-Applikationen zur Verfügung steht?
 
M

maki

Gast
JPA gibt es für sowohl JEE als auch die SE ;)
Einer der Gründe warum JPA nicht teil des EJB3 Standards sondern ein eigener Standard geworden ist, ist dass man sie so auch ohne EJB3 einsetzen kann.
 

foobar

Top Contributor
Capasso hat gesagt.:
Ich will euch ja nicht bei der Diskussion stören, aber ...

hast du zufällig nen gutes Tutorial zu Hibernate oder Spring und DAO. (am besten Deutsch )

Ein Tutorial habe ich jetzt nicht griffbereit aber es gibt ein paar gute Bücher zu dem Thema:

http://www.amazon.de/Java-Persisten...=sr_1_3?ie=UTF8&s=books&qid=1223289926&sr=8-3
http://www.amazon.de/Hibernate-Prax...=sr_1_2?ie=UTF8&s=books&qid=1223289926&sr=8-2
http://www.amazon.de/Spring-in-Acti...ie=UTF8&s=books-intl-de&qid=1223289971&sr=8-1
 

Capasso

Bekanntes Mitglied
Da wären wir wieder bei einem Problem.

Die meisten Tutorials nd Anleitung gehen gezielt auf Webanwendungen ein.
Ich suche nach einer Anleitung für den gebrauch mit eine DesktopApplikation
 

foobar

Top Contributor
Hibernate in eine Desktopanwendung zu integrieren ist aber wesentlich einfacher als bei einer verteilten Anwendung, da man hier mit einer einzigen Session arbeiten kann.
Wenn du die Hibernatebasics drauf hast, kannste auch eine Desktopanwendung damit entwickeln.
 

foobar

Top Contributor
@maki Wie sieht denn so ein Repository aus und was genau kommt da rein? Vermischt man damit nicht auch Persistenz und Geschäftslogik?

Die einzige Geschäftslogik die man in GenericDAOs hat ist z.b. so eine Art Trigger (wenn in Tabelle xyz etwas eingefügt wird, berechne dies und das). Das finde ich aber nicht so trageisch, weil das alles durch Hibernate ja unabhängig von der DB ist.
 
M

maki

Gast
Die Repositories gehören zur Domäne und damit zur Geschäftslogik, für jede Entity ein Repository bzw. so wie man sie braucht ;)

Die Repositories sind die einzigen Stellen der Anwendung, in denen DAOs genutzt werden, sie bilden die Schnittstelle zwischen Business Tier und Integration Tier.

Die Methoden die sie anbieten sind "high-level", also auf demselben Niveau wie die Domänenobjekte welche die Repositories nutzen, dadurch trennt man elegant zwischen Persistenz und Domäne.

Persönlich halte ich nicht viel davon, Domainobjekte direkt auf DAOs zugreifen zu lassen, es gibt da soz. einen Bruch in der Abstraktionsebene:
Domainobjekt -> high level, fachlich
DAO -> low level, CRUD Operationen auf eine DB, oft ein DAO pro Tabelle, hat eigentlich nix mit Geschäftslogik zu tun, sondern mit Implementierungsdetails.

Macht man die DAOs high level mischt man dort Geschäftslogik mit Persistenzlogik.

Die Alternative ist, die DAOs aus Services(SessionBeans etc.) zu nutzen, nicht sehr OO imho, spätestens wenn ein UseCase mehrere DAOs braucht merkt man wie unschön das eigentlich ist...

Mit Repositories können die Entitäten(Domänenobjekte) selbst andere Entitäten finden/speichern/löschen etc, ohne Details zu kennen, denn diese sind ja in den Repositories gekapselt.
Typische Methoden für ein Rep. wären findById(..), findByCriteria(..), store(..) bzw. save(..), delete und dann noch die zus. Businessmethoden, so wie sie gebraucht werden.

Im Prinzip sind Repositories DAOs mit high level Methoden und stellen dadurch eine zus. Abstraktion zwischen Domäne und echten DAOs dar. Diese "Schicht" ist eigentlich sehr dünn, Clientseitig werden eben wie gesagt nur high-level Methoden angeboten, intern werden DAOs genutzt um diese umzusetzen.

Repositories sind natürlich zusätzlicher Aufwand (so wie jede Abstraktion), aber wenn man sich die DAOs dank dem JPA EntityManager sparen kann, tut man gut daran sie einzusezten.

Sie haben viele Vorteile, von der angesprochen Trennung der verschiedenen Abstraktionsebenen bieten sie sehr einfach die Möglichkeit, Unittests zu schreiben, brauche ja bloss ein Mock-Repository anstatt einer echten DB Anbindung um meine Domäne zu testen :)

Bin durch das Buch "POJOs in Action" darauf gekommen, die eigentliche Idee ist aber älter und wird schon im Buch "Domain Driven Design" von Eric Evans besprochen.
 

byte

Top Contributor
Ich sehe nicht so richtig, welchen Vorteil Repositories bringen sollen gegenüber der (herrkömmlichen) Trennung in Services + DAOs. Ich stimme Dir zwar insofern zu, dass Services den OO-Gedanken verletzen, da dort Business Logik sozusagen vom Domänenmodell entkoppelt ist. Aber hast Du das gleiche Problem bei den Repositories nicht auch, wenn dort Business Logik implementiert wird?

Darüber hinaus denke ich, dass selbst mit EntityManager DAOs nicht obsolet sind. Irgendwo möchtest Du doch deine Transaktionen im Idealfall deskriptiv konfigurieren. Und in der Praxis gehen die DB-Abfragen doch eigentlich immer über einfache CRUD Befehle hinaus. Man hat doch eigentlich immer domänenspezifische Abfragen zu tätigen, daher macht ein DAO doch schon Sinn.

Aber im Grunde genommen sehe ich auch nicht so viele Unterschiede zw. Service + DAO gegenüber den von Dir beschriebenen Repositories, ausser dass mans anders genannt hat. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P lokale Datenbank innerhalb einer Swing-Anwendung Datenbankprogrammierung 7
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
L DB Interface Swing / Webinterface Datenbankprogrammierung 0
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S Datenbank-Tabelle in SWING/AWT ausgeben Datenbankprogrammierung 28
R Entfernte MySQL Datenbank für lokale Swing-App Datenbankprogrammierung 8
M Java Swing und JPA (toplink) Datenbankprogrammierung 3
ARadauer swing app und hibernate Datenbankprogrammierung 6
M Model View Komponente für Swing Datenbankprogrammierung 4
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
D Multi User Datenbank Anwendung Datenbankprogrammierung 5
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
W MySQL Refresh von JavaFX Anwendung bei DB Änderung Datenbankprogrammierung 13
G HSQLDB Inserts/Updates sind nach Neustart der Anwendung Datenbankprogrammierung 1
P JPA in einer größeren Java SE Anwendung Datenbankprogrammierung 0
P PostgreSQL Java-Anwendung zählt rollbacks nicht Datenbankprogrammierung 0
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
M Ein kleine Anwendung mit Java Schreiben Datenbankprogrammierung 2
L Mit Java Desktop Anwendung auf Mysql Server auf Webspace verbinden Datenbankprogrammierung 11
M Sinnvoller Entwurf einer Java DB-Anwendung Datenbankprogrammierung 2
H CREATE-Strings in Anwendung verwalten Datenbankprogrammierung 2
A Client-Server anwendung sofort aktualisieren Datenbankprogrammierung 7
Saxony JPA und Eclipse RCP Anwendung mit Fragmenten Datenbankprogrammierung 3
R Lokale Derby in einer JPA-Anwendung Datenbankprogrammierung 3
G client <> db anwendung - zugangsdaten? Datenbankprogrammierung 3
G Wie baut man eine Anwendung mit DB Zugriff Datenbankprogrammierung 3
P Datenbank für Java Anwendung wie SQLite ohne Installation Datenbankprogrammierung 4
B anfängerfrage db anwendung Datenbankprogrammierung 7
G update sperren bei client/server anwendung Datenbankprogrammierung 7
J Suche für meine Anwendung optimale Datenbank ! Datenbankprogrammierung 26

Ähnliche Java Themen


Oben