Hibernate in non-EE Server/Client-App (Topic geändert)

Status
Nicht offen für weitere Antworten.

sparrow

Top Contributor
Hallo liebes Forum,

Hibernate gefällt mir im Augenblick sehr gut, vor allem dieses "LazyLoading" hat es mir angetan.

Ich habe das aus einem Buch entnommene Beispiel von einer Pizzerienverwaltung nach und nach so umgebaut, dass das ganze Verteilt als RMI-Applikation läuft.
Auf dem Server läuft also die Logik der Datenstruktur und stellt Schnittstellen (Controller) zur Verfügung, auf dem Client läuft nur die GUI die Anfragen an den Controller schickt.
Rein Programmtechnisch ist das ganze herrlich, da schieße ich nur Objekte zwischen Server und Client hin und her, die Controller sind halt über RMI vom Client aus ansprechbar.

So kann ich mir problemlos zum Beispiel eine Objekt der Klasse Pizza vom Server beschaffen. Die Klasse Pizza gibt es sowohl auf dem Server als auch auf dem Client, ich frage den Server nach einem Pizza Objekt und der sendet sie mir zu (RMI Methodenaufruf).

Nun hat aber auch jede Pizza Belag, jeder Belag wird durch die Klasse "Topping" repräsentiert.
Pizza und Topping stehen in einer 1:N-Beziehung, im Programm mit Hibernate daduch gelöst, dass Pizza eine Funktion List<Topping> getToppings() besitzt.
Das funktioniert bei einer normalen, lokalen Anwendung problemlos.... und macht richtig Spaß.
Rufe ich ein Objekt "Pizza" ab, dann kann ich auf alle Felder zugreifen, greife ich per getToppings auf die Beläge zu schmeißt im Hintergrund Hibernate schnell eine Anfrage an und holt mir die Toppings zur Pizza. Die Daten werden also wirklich nur dann geholt wenn sie gebraucht werden. Das spart Resourcen und Zeit.

Das funktioniert aber logischerweise nicht wenn ich das Pizza-Objekt per RMI zum Client übertragen habe.
Dort gibt es keine Hibernate-Instanz und dementsprechend keine Hibernate-Session die aber offensichtlich gebraucht wird um eine LazyLoading-Verknüpfung aufzulösen.
Hat jemand eine Ahnung wie es trotzdem funktioniert? Diese "Laden bei Bedarf"-Geschichte gefällt mir nämlich sehr gut.

Natürlich gibt es auch die Möglichkeit dafür zu sorgen, dass die Verknüpfung der Objekte statisch geschieht. Dann würde Hibernate immer wenn ein Pizza-Objekt geladen wird auch die Toppings mitladen. Dann funktioniert auch das übertragen per RMI problemlos.... aber irgendwie fühlt sich das an als würde das wichtigste Feature von Hibernate nicht genutzt werden ;)

Vielleicht kennt ja jemand das Problem und hilft mir weiter.


Ich danke!


Gruß Sparrow
 
S

SlaterB

Gast
da gibts nichts groß zu sagen, das ist auch kein Informatik-Problem (persönliche Meinung ;) ),

wenn du im Supermarkt einkaufst und dann zuhause feststellst, dass noch Milch fehlt,
dann gibt es nur zwei grundsätzliche Strategien:
a) bei fehlenden Sachen nochmal einkaufen fahren (zweite RMI-Anfrage, im Grunde ja das, was Hibernate mit der DB macht, nein, Hibernate unterstützt nicht RMI ;) )
b) vorher genauen Einkaufszettel schreiben (bei der ersten Anfrage alles laden oder genau angeben, was mitzuladen ist)
 

sparrow

Top Contributor
Eine 2. RMI Anfrage wäre an sich nicht das Problem.
Ich will aber, dass das automatisch geht.
Hibernate verwendet dafür Proxy-Klassen, also müssten die irgendwie per RMI kommunizieren können.
Sprich: Ob ich lokal arbeite oder verteilt via RMI, eine Anfrage auf die Verknüpfung soll die benötigten Objekte nachladen.
 

sparrow

Top Contributor
Moah, danke SlaterB!
Genau sowas hab ich gesucht, aber irgenwie war ich mit den Proxy-Klassen die ganze Zeit auf dem falschen Weg.
Ich habe ständig danach gesucht wie ich da etwas umbiegen muss, dass bereits eine Lösung besteht... nunja....

Ich danke vielmals!
 

sparrow

Top Contributor
Ich führe diesen Thread einfach mal unter Änderung des Topics weiter.

Die beiden Links die gepostet wurden zeigen beide auf Möglichkeiten die ein Programm benötigen das auf J2EE-Basis funktioniert. Das ist mir aber eigentlich etwas zu "dick". Schon der Rattenschwanz der an Hibernate an Bibliotheken dran hängt ist eine Menge.

Gibt es denn tatsächlich keine Möglichkeit Hibernate in einer normalen Client/Server-Applikation zu verwenden wobei der Client nicht direkt auf die Datenbank zugreift?
Alle Verknüpfung beim Ausliefern eines Objekts mit auszugeben scheidet definitiv aus.


Gruß
Sparrow
 

ms

Top Contributor
Was für eine Client-Server-Lösung schwebt dir denn vor, wenn dir ein Applikationserver ' zu dick' ist?

ms
 

ms

Top Contributor
Ok, und wie soll die Transportschicht aussehen?
EJB's möchtest du ja nicht.

ms
 

sparrow

Top Contributor
Am liebsten würde ich mit RMI arbeiten.
Das würde die Umsetzung sehr vereinfachen bei dem Umstricken der Software. Ich würde dann einfach den Teil der Applikation die für den Serverbetrieb nötig sind aus dem Programm heraus nehmen und auf dem Server laufen lassen. Der Server würde also entsprechende Schnittstellen für RMI zur Verfügung stellen.
 

sparrow

Top Contributor
Hallo liebes Forum,

Ich habe mich weiter mit diesem Problem beschäftigt und eine mögliche Lösung gefunden. Es funktioniert ziemlich gut, ih möchte euch nun fragen was ihr davon haltet.

Das Problem ist ja, dass ich das von Hibernate erstellte Objekt nicht einfach zum Client schicken kann, also wäre es sinnvoll das Objekt gar nicht zu verschicken.
Dazu kam die Frage von ms nach der Transportschicht... das hat mich auf eine Idee gebracht.


Ich bin jetzt so vorgegangen, dass es für jeden "Vorfall" folgende Konstellation gibt:

Client
GUI - Klasse
GUIRemote - Klasse

Server
Controller - Klasse
ControllerRemote - Klasse


Die Handhabung der persistenten Objekte... eigentlich alles läuft auf dem Server.
Zum Kommunikation mit dem Server greift der Client via RMI auf den ServerController für den Vorfall zu und instanziert dafür ControllerRemote. Über diese Schnittstelle lässt der Client dem Server Informationen zukommen.
Änderungen an der GUI nimmt allerdings auch der ServerController vor.
Dafür hält die GUI ebenfalls ein Interface bereit welches über RMI kommuniziert und vom Server angesprochen wird.


Ein Vorgang der Registrierung würde wie folgt aussehen:

Server
Init: stellt die RMI-Registry zur Verfügung
Binden des ServerControllers an die Registry

Client
Objekt Init: Client beschafft sich das RemoteObjekt des Servers
Meldet sein eigenes Remote Objekt am Server an


Anschließend leitet der Client seine Anfragen an den Server die der Server direkt über das Remote-Objekt des Clients ausführt.
Wird der Client beendet sorgt diese für ein unbind seines Remote-Objekts.



Sinnvoll oder nicht?


Gruß
Sparrow
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Hibernate + Spring + SQL Server => Performanceprobleme :( Datenbankprogrammierung 4
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
I Hibernate Predicate mit IN Clause "Unaware how to convert value to requested type" Datenbankprogrammierung 0
T org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session Datenbankprogrammierung 5
T Realisierungsvorschläge Hibernate SQL Datenbankprogrammierung 1
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Tabellen-Erzeugung via Hibernate ignoriert 'CascadeType' settings Datenbankprogrammierung 1
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
damike84 Hibernate: persistieren eines Graphen Datenbankprogrammierung 2
N Hibernate Entitäten bei Selects aus 2 Tabellen Datenbankprogrammierung 7
OnDemand Hibernate Realationen Datenbankprogrammierung 7
OnDemand Hibernate ManyToOne Datenbankprogrammierung 5
D Hibernate oneToMany Syntaxfehler Datenbankprogrammierung 3
D Hibernate Error: NoSuchMethodError Datenbankprogrammierung 4
D hibernate mit postgreSQL Datenbankprogrammierung 3
S MySQL Hibernate: Fehler bei Verwendung von 2 unterschiedlichen Enumration Datenbankprogrammierung 3
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
OnDemand Hibernate OneToMany ManyToOne Datenbankprogrammierung 61
J Hibernate One-To-One mit Where Klausel Datenbankprogrammierung 6
L hibernate.cfg.xml Could not parse configuration Datenbankprogrammierung 0
L H2 Hibernate definieren? Datenbankprogrammierung 1
T JPA Mapping Enum (hibernate 5) Datenbankprogrammierung 1
H In hibernate.cfg.xml schreiben und auslesen Datenbankprogrammierung 0
K Hibernate: Ein Fluch Datenbankprogrammierung 3
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
S JpaRepositories & Hibernate: ungewolltes trim() in findBy Datenbankprogrammierung 7
S MySQL hibernate exception: illegal state exception : entityManagerFactory is closed Datenbankprogrammierung 5
S Hibernate: Verschiedene Klassen zurückgeben. Datenbankprogrammierung 2
looparda Architektur für JPA Hibernate Umstieg Datenbankprogrammierung 14
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
perlenfischer1984 Hibernate mit final members Datenbankprogrammierung 3
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
N SQLite Hibernate und Aufruf von Funktion SELECT last_insert_rowid() Datenbankprogrammierung 2
N Sqlite3 und Hibernate Datenbankprogrammierung 3
A Hibernate Cache leeren Datenbankprogrammierung 4
I MySQL Hibernate zu viele Queries Datenbankprogrammierung 2
Psypsy Hibernate / JPA erkennen von schon gespeicherten Objekten Datenbankprogrammierung 4
Psypsy Hibernate / JPA OneToOne MappedBy Frage Datenbankprogrammierung 2
J Hibernate + DTOs - DTOs in DAOs verwenden? Datenbankprogrammierung 1
S Hibernate-Konfiguration : Unverständliche Ausgabe beim Ausführen Datenbankprogrammierung 0
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
J Hibernate + HSQL embedded Datenbankprogrammierung 2
P Hibernate Einstieg Datenbankprogrammierung 5
C Hibernate und createQuery Datenbankprogrammierung 2
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Datenbankprogrammierung 4
G H2 Hibernate - wie joins machen Datenbankprogrammierung 1
D Hibernate: Zustand eines Objekts erkennen? Datenbankprogrammierung 0
D Unterschiede Hibernate Vs. Java Persistence API Datenbankprogrammierung 8
I Hibernate / JPA Index hinzufügen Datenbankprogrammierung 1
X Hibernate Cache Verständnisproblem Datenbankprogrammierung 0
T Hibernate und inner class Datenbankprogrammierung 0
K n:m Tabellen mit Hibernate erstellen Datenbankprogrammierung 1
T Hibernate DAO gute Tutorials/Bücher gesucht Datenbankprogrammierung 0
C Hibernate: could not resolve property Datenbankprogrammierung 1
J Plug-In-Framework für Hibernate-Klassen Datenbankprogrammierung 0
M Hibernate - Save Child wenn nötig Datenbankprogrammierung 10
M DAO's + Hibernate Theorie Datenbankprogrammierung 4
T Hibernate, HSQLDB und UNIQUE Datenbankprogrammierung 2
F Hibernate - verschiedene Schemen Datenbankprogrammierung 7
D Hibernate SaveOrUpdate Exception Datenbankprogrammierung 2
D Hibernate CreateQuery ohne Result Datenbankprogrammierung 7
E MySQL Hibernate mit JaxWS führt zu LazyInitialization Exception Datenbankprogrammierung 8
L Einarbeitung in Hibernate -> wenn gute SQL Kenntnisse vorhanden? Datenbankprogrammierung 2
B DB2 Hibernate findet Datenbank nicht Datenbankprogrammierung 18
K JPA / Hibernate Annotations Datenbankprogrammierung 4
M JPA / Hibernate mit Postgres DB Datenbankprogrammierung 3
P JSF + H2 + TomEE + Hibernate/JPA Datenbank wird nicht angelegt Datenbankprogrammierung 3
E MySQL Hibernate ( Anfänger ) Datenbankprogrammierung 3
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
J Hibernate Select auf Parameterliste Datenbankprogrammierung 3
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
P Oracle Hibernate - Oracle-VarChar-Index wird nicht genutzt Datenbankprogrammierung 3
M Hibernate Foreign Key definieren Datenbankprogrammierung 4
M Abstrakte Klassen Hibernate Datenbankprogrammierung 4
D Mit Hibernate (mit Annotation) auf Views zugreifen Datenbankprogrammierung 2
M [Hibernate]Abgleich eines lokalen Objekts mit dem Zustand aus der Datenbank. Datenbankprogrammierung 3
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
P Probleme mit meinem 1. Hibernate Beispiel Datenbankprogrammierung 3
P erste Schritte mit Hibernate Datenbankprogrammierung 3
V Hibernate Interfaces von anderem Projekt Datenbankprogrammierung 2
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
B Hibernate und portierbare Datenbank Datenbankprogrammierung 3
qwerqer [Hibernate] Mappingvarianten Datenbankprogrammierung 2
lumo Teneo Hibernate & JPA Datenbankprogrammierung 15
Z JPA mit Hibernate - Unable to build EntityManagerFactory Datenbankprogrammierung 7
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
K Hibernate vs. JDBC Datenbankprogrammierung 4
J Hibernate Info 593 ? Datenbankprogrammierung 4
J Erstellen der SessionFactory in Hibernate 4.1 Datenbankprogrammierung 2
L PostgreSQL Hibernate-Frage Datenbankprogrammierung 2
X MySQL Hibernate: Massenupdate auf unbekannte Tabelle Datenbankprogrammierung 4
N hibernate: datasource Datenbankprogrammierung 7
H MySQL Hibernate: Updaten vereinfachen Datenbankprogrammierung 2
T Hibernate Division zweier Summen Datenbankprogrammierung 4
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
F GWT und Hibernate - gwt.dev.Compler not found Datenbankprogrammierung 3
M NestedTransaction- Exception in Hibernate Datenbankprogrammierung 15

Ähnliche Java Themen

Neue Themen


Oben