ByRef oder ByValue: Daten Client <-> SessionBean

cielo

Grünschnabel
Hallo,

ich habe eine Liste von serialisierten Objekten (einer Hibernate Klasse).
Diese erhalte ich vom Server (JBoss 4.03SP1) über eine in einer Stateless SessionBean bereitgestellten Methode.

Clientseitig wähle ich ein Objekt aus und ändere die Attribute.
Nun soll das Objekt aktualisiert in DB gespeichert werden, dazu übergebe ich es an eine weitere SessionBean Methode die es speichert und dabei einen Zeitstempel aktualisiert.

Leider wird eine Aktualisierung auf Serverseite nicht automatisch an den Client übermittelt.
Also wird das Objekt wohl ByValue übergeben.

Wenn ich nun der selben Methode das aktualisierte Objekt als Rückgabewert übergebe und auf Clientseite es empfange, ist es nicht mehr das selbe Objekt.
Die interne ID hat sich geändert und somit ist sie losgelöst von den restlichen clientseitigen Anhängigkeiten.

Gibt es eine Möglichkeit, doch Objekte ByRef vom/zum Server zu übertragen?
 
Hallo!

Gibt es eine Möglichkeit, doch Objekte ByRef vom/zum Server zu übertragen?
Eine "echte" ByRef Übertragung vom Server zum Client ist nicht möglich (darüber hinaus kann Java auch nur Call by Value aber das ist ein anderes Thema).
Eine Möglichkeit eine ähnliuche Semantik zu bekommen wäre beispielsweise nicht die Original Objekte sondenr Proxy Objekte an den Client zu schicken. Alle Änderungen der Objekte auf dem Client werden dann vom Proxy übers Netz an die entsprechenden Instanzen propagiert. EntityBeans Funktionieren beispielsweise nach diesem Schema... aber wer will das schon?...

Eine weitere Möglichkeit wäre die Hibernate direkt auf dem Client einzusetzen (also Praktisch 2-Tier). Außerdem könnte man noch so vorgehen:
BusinessObject auf dem Server laden von der Session detachen und an den Client schicken (Serialisieren). Daten am Client Manipulieren (signifikate Daten wie ID oder den Natural / Business Key) sollte man natürlich nicht ändern. Dann BO vom Client aus wieder zurück zum Server schicken, der das BO dann wieder in eine Hbernate Session Merged...

Gruß Tom
 
Hallo,

danke für die Infos.
Deinen Lösungsvorschlag 3 habe ich meiner Meinung nach bereits implementiert, nur leider erfolglos.

Bisher ist es so, dass der Client vom Server eine Liste mit Hibernate Objekten holt, in dem er z.B. eine Methode getListeVonXYZ() mit folgendem Inhalt aufruft:
return session.createCriteria(XYZ.class).list();

Nun verändere ich auf dem Client ein Attribut eines Objektes auf dieser Liste.
z.B.: objXYZ.setHoehe(5);

und schicke es zum Server um es dort zu speichern.
Dabei wird dort ein Zeitstempel gesetzt: z.B.: objXYZ.setZeit(12345);

Ich möchte nun, dass dieser Zeitstempel auch Clientseitig aktualisiert verfügbar ist.
Wenn ich die Servermethode zum Speichern wie folgt aufrufe, wird Clientseitig das Objekt nicht aktualisiert: meineSB.save(objXYZ);
Das Objekt bleibt unverändert, der Zeitstempel wird clientseitig nicht aktualisiert.

Rufe ich die Methode wie folgt auf, bekomme ich ein neues Objekt mit einer anderen internen ID (ich meine nicht ein Objekt-Attribut wie z.B. Hoehe sondern die Instanz-ID):
objXYZ = meineSB.save(objXYZ); (Die save-Methode gibt das Objekt wieder zurück.)

Dieses hat zwar die aktualisierten Daten, jedoch besteht nun keine Verbindung mehr zu den Daten die ich zuvor als Liste erhalten habe.

Nur wenn ich umständlich die Rückgabe in ein temporäres Objekt leite und dann die Attribute des ursprüngliche Objekt auf die Werte des temporären Objektes setze, funktioniert es. Diese Lösung gefällt mir aber nicht sonderlich.

Ich habe auch testweise ein Interface als Basis der Klasse definiert und nur dieses clientseitig und bei den Parametern verwendet. Ebenfalls ohne Erfolg.
 

Neue Beiträge

Zurück