GWT RequestFactory: Wie bekomme ich eine persistente ID von stableId ()?

8

Ich verwende Long ids in meinen Entitäten, nicht nur um sie im Datenspeicher zu speichern, sondern auch um andere Entitäten zu referenzieren. Jetzt verwende ich RequestFactory, um () Objekte auf dem Client zu erstellen und sie zu persistieren, aber ich brauche einen Weg, um herauszufinden, welche ID der Server generiert hat.

Hier ist ein Weg, den ich herausgefunden habe, dass zwei Reisen benötigt:

%Vor%

Aber es scheint, als wäre es muss eine Möglichkeit sein, die persistente ID ohne die zweite Reise zu bekommen. Anscheinend benötigt requestFactory.find () die persistente ID überhaupt erst.

Wie bekomme ich die persistente ID ohne eine zweite Anfrage an den Server?

======= Aktualisierung =======

Es schließlich fiel mir ein (nach tbroyer sagte mir ;)) dass ich die Long id von der persist () Methode im RequestContext zurückgeben konnte. Dies ruft nicht die persistente ID von EntityProxyId ab, aber es bringt mir die persistente ID eines neuen Objekts in einer einzigen Anfrage.

Ich werde diese Frage offen lassen - ich bin immer noch daran interessiert, die dauerhafte ID aus einer EntityProxyId zu bekommen.

    
Riley Lark 20.02.2011, 18:11
quelle

3 Antworten

1

Die Klasse, die ein EntityProxyId implementiert, ist SimpleEntityProxyId . Diese Klasse hat eine Methode getServerId() , die die ID zurückgibt. Wenn Sie also mit instanceof suchen, können Sie die Methode aufrufen. (Tatsächlich überprüft RequestFactory.getHistoryToken() nicht einmal, sondern wirft einfach auf diese Klasse).

Nun die schlechte Nachricht: Es ist codiert und die Basisklasse für SimpleEntityProxyId , das ist SimpleProxyId und enthält die Methode getServerId() , genauer gesagt:

  

Die encodedAddress ist für den Client völlig undurchsichtig. Es ist wahrscheinlich eine base64-codierte Zeichenfolge, aber es könnten Ziffern von pi sein. Jeder Code, der etwas anderes tut, als den Inhalt dieses Feldes zurück an den Server zu senden, ist falsch.

(Das Feld encodedAddress enthält die Server-ID.)

    
Hilbrand Bouwkamp 21.02.2011, 09:49
quelle
8

Sie können eine String-Repräsentation einer EntityProxyId abrufen, indem Sie RequestFactory.getHistoryToken() . Dies kann durch Aufruf von RequestFactory.getProxyId() .

Im RequestFactory-Sprachgebrauch ist die ID einer neu erstellten Entität "ephemeral". Eine ephemere ID ist nur innerhalb der Instanz von RequestFactory gültig, die die RequestContext erstellt hat, um die EntityProxy zu erstellen. Wenn RequestContext abgefeuert wird und alle Methodenaufrufe vom Server verarbeitet wurden, überprüft% ce_de% die ephemeren Objekte der Nutzdaten. Wenn sie beibehalten wurden, aktualisiert die resultierende Nutzlast den Status des Clients mit dem von% zurückgegebenen Wert. co_de% Methode.

Die Objektidentität und -gleichheit von SimpleRequestProcessor ändert sich nicht, wenn sie vom kurzlebigen in den persistenten Zustand wechselt, aber das zugehörige Verlaufstoken ändert sich:

%Vor%

In der obigen Demo können Sie, sobald Sie getId() haben, den Wert in einem Cookie oder einem anderen clientseitigen Persistenzmechanismus speichern und die ID später neu erstellen, um sie mit einem Aufruf von EntityProxyId zu verwenden. Die zweite und dritte Behauptung zeigen den "Umfang" einer ephemeren ID. Die ephemeren und persistenten Formen können austauschbar mit dem persistedString verwendet werden, das das Objekt erstellt hat. Wenn eine flüchtige ID mit einer neu erstellten Instanz von RequestFactory.find() verwendet wird (was passieren würde, wenn eine ephemere ID als RequestFactory -Token markiert würde), erhalten Sie RequestFactory , aber das kann nicht wirklich für irgendeinen nützlichen Zweck verwendet werden.

    
BobV 21.02.2011 01:45
quelle
1

Ich habe gerade die Methode getId () in meiner Proxy-Schnittstelle erklärt und es scheint zu funktionieren. Gibt es ein Problem mit diesem Ansatz?

    
user469243 20.10.2011 12:21
quelle

Tags und Links