Maven Wie Persistence Module aufteilen

mvitz

Top Contributor
Hallo,

Maven2 schlägt ja als Best-Practice vor, für die Persistence mindestens zwei Module (API und Implementierung) vorzusehen, damit man im Nachhinein die Art der Persistence austauschen kann.

Ins API Modul gehören dabei die Klassen, die persistiert werden sollen, sowie die Interfaces, die CRUD ermöglichen.

Angenommen eine mögliche Persistenzimplementierung möchte JPA2 nutzen und dazu mit Annotationen arbeiten. Dann hat ja mein Persistence-API eine Abhängigkeit zu JPA2 die ich eigentlich nicht haben möchte. Wie handhabt ihr das?
 
G

gman

Gast
Naja, so ganz ohne Abhängigkeiten wirst du wohl nicht auskommen:

mindestens zwei Module (API und Implementierung)

Die verwendete API hängt ja auch von dem für die Persistenz verwendeten Framework ab. Oder gibt es
mittlerweile eine allgemeingültige, superflexible Persistenz-API die mit ALLEM zusammenarbeitet
und ich habe es nur noch nicht mitbekommen ;-)
 
M

maki

Gast
Hi mvitz :)

Maven2 schlägt ja als Best-Practice vor, für die Persistence mindestens zwei Module (API und Implementierung) vorzusehen, damit man im Nachhinein die Art der Persistence austauschen kann.
Wirklich? Ist mir neu, aber mit Persistenz/JPA hatte ich in letzter Zeit wenig zu tun.

Angenommen eine mögliche Persistenzimplementierung möchte JPA2 nutzen und dazu mit Annotationen arbeiten. Dann hat ja mein Persistence-API eine Abhängigkeit zu JPA2 die ich eigentlich nicht haben möchte. Wie handhabt ihr das?
Wie meinst du das genau?
Du wirst ja wohl kaum die Interfaces annotieren.

der gibt es
mittlerweile eine allgemeingültige, superflexible Persistenz-API die mit ALLEM zusammenarbeitet
und ich habe es nur noch nicht mitbekommen
JDO vielleicht?
 

mvitz

Top Contributor
Danke schon mal für die Rückmeldungen.

Bzgl. Best-Practices, es wird halt im Maven Book (Maven by Example: Chapter7.Multi-module Enterprise Project) so gemacht. Wobei mir da gerade auffällt, dass auch dort die Modellklassen (Modul: simple-model) direkt Hibernate Annotationen haben, die Persistenz aber im Modul simple-persist gemacht wird.

Bezüglich Interfaces annotieren. Nein natürlich nicht, folgendes, ich habe ein Modul in dem meine Modellklassen sind und in denen sich dann Interfaces befinden, die für die Persistierung sorgen sollen.

Java:
public class MyModel {
  ...
}

public interface MyModelRepository {
  MyModel findById(long id);
  List<MyModel> findAll();
  MyModel save(MyModel model);
...
}

Die konkrete Implementierung der Interfaces soll in einem eigenen Modul erfolgen. Möchte ich jetzt JPA2 nutzen, dann muss ich ja die Klasse MyModel annotieren. Demnach, hat das Modul in dem sich die Modelklassen befinden eine Abhängigkeit zu JPA2. Entscheide ich mich später dafür, die Persistenz doch mit JDBC zu machen, so habe ich die Abhängigkeit zu JPA2 zwar noch, nutze sie aber gar nicht.
 
M

maki

Gast
Ok jetzt verstehe ich dich, danke für den Link.

Denke man sollte es nicht als Maven2 Best-Practices sehen, bestimmte Dinge immer in Module auszulagern, Maven2 bietet eben nur den Mechanismus der Module, wie man den nutzt, kommt immer darauf an.

Wenn man ein Domainmodel hat das man mit JPA annotieren möchte, hat man immer eine Abhängigkeit zu JPA, also Peristenz im Domänenmodell (nach DDD ist das auch ok, denn da trennt man nicht nach Infrastruktur sondern nach fachlichen Aspekten).
JPA ist eben nicht so flexibel wie zB, JDO, JPA geht immer von ORM aus und damit von einem RDBMS, hat man Abhängigkeiten zu JPA, ist es klar dass man eben ein RDBMS braucht und ein JPA Implementierung.

Das Beispiel in deinem Link hat eben genau das: Abhängigkeiten zu JPA im Simple-Model Modul, der Annotationen wegen.
Wenn man auch Annotationen verzichtet und stattdessen komplett auf die orm.xml setzt, hätte dass Simple-Model Modul keine Abhängigkeit zu JPA.

Man muss sich halt überlegen wie viel Flexibilität man wirklich braucht, denn der Aufwand steigt beträchtlich, wenn man niemals umsteigt auf plain JDBC, hat man die Komplexität ohne echte Rechtfertigung in die Höhe getrieben.
 
J

JohannisderKaeufer

Gast
Wenn ich das halbwegs verstanden habe, dann empfiehlt das Buch in Kapitel 7.10 eher so eine Aufteilung.

Java:
//IMPL
public class MyModel implements IMyModel {
  ...
}

//API
public interface IMyModel{
...
}

public interface MyModelRepository {
  MyModel findById(long id);
  List<MyModel> findAll();
  MyModel save(IMyModel model);
...
}

Damit hast du dann eigentlich keine Abhängigkeiten zu JPA oder was auch immer.
Es bleibt allerdings der Mehraufwand sich die ganzen Interface zu erstellen.
 
M

maki

Gast
Das hast du nicht richtig bzw. nicht ganz verstanden JohannisderKaeufer ;)

simple-model

This module defines a simple object model which models the data returned from the Yahoo! Weather feed. This object model contains the Weather, Condition, Atmosphere, Location, and Wind objects. When our application parses the Yahoo! Weather feed, the parsers defined in simple-weather will parse the XML and create Weather objects which are then used by the application. This project contains model objects annotated with Hibernate 3 Annotations. These annotations are used by the logic in simple-persist to map each model object to a corresponding table in a relational database.
Durch die Annotationen kommen die Abhängigkeiten zu JPA ins simple-model Modul.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M collection persistence system Allgemeine Java-Themen 4
P Hibernate oder Java Persistence API? Allgemeine Java-Themen 3
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
Robert Zenz Will mir jemand erklaeren wofuer man Module wirklich braucht? Allgemeine Java-Themen 38
M ist in der Module-Info "opens PACKAGENAME" bedenklich? Allgemeine Java-Themen 0
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
L Compiler-Fehler Google Guice Module zur Laufzeit zusammenstellen und binden Allgemeine Java-Themen 4
looparda Best Practice Jigsaw module-info.java Allgemeine Java-Themen 1
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
RalleYTN Java 9 Module mit Dependency auf Pre-Java 9 JARS Allgemeine Java-Themen 2
T Outputstream write() gets blocked using RXTX to communicate with HC-05 BT Module Allgemeine Java-Themen 10
F externe module. geht das in Java? Allgemeine Java-Themen 3
L Berechnung mit Module bis bes.timme Zahl erreicht. Allgemeine Java-Themen 4
M java Komonenten oder Module Allgemeine Java-Themen 3
L Grundsystem + Module = Wie realisieren? Allgemeine Java-Themen 5
F Jar-Module einbinden Allgemeine Java-Themen 3
R Variablen String mit split-Funktion aufteilen Allgemeine Java-Themen 7
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6
B Chat auf andere Datentypen aufteilen Allgemeine Java-Themen 2
B Java Audio in Wörter/Phonems aufteilen Allgemeine Java-Themen 0
M ungerade zahlen auf 4 zahlen aufteilen Allgemeine Java-Themen 2
K Einfaches Array in 2 neue aufteilen. Allgemeine Java-Themen 2
W Java Konsole "aufteilen" Allgemeine Java-Themen 4
A Bild aufteilen für getData Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
M Collection aufteilen Allgemeine Java-Themen 4
M Liste in Blöcke aufteilen Allgemeine Java-Themen 8
S ArrayList aufteilen Allgemeine Java-Themen 10
K Design: Klassen in Pakete aufteilen - Eure Meinung Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben