2012-06-21 14 views
9

Ich recherchiere eine Lösung für ein Problem mit GWT and OSGi+PAX-Web. Das besondere Problem ist, dass GWT nicht die Serialisierung Richtliniendatei laden, wird folgende Fehler geben:Wie GWT RPC die Serialisierungsrichtliniendateien lädt?

ERROR: The serialization policy file '/ctx/ctx/6ExxxxxxxxxxxxxxxxF.gwt.rpc' was not found; did you forget to include it in this deployment?

Das Problem liegt irgendwo zwischen Equinox OSGi und PAX-WEB.

Um eine Lösung zu finden, möchte ich besser verstehen, wie GWT-RPC die Serialisierungsrichtlinie Dateien lädt.

  • Was ist ihr Lebenszyklus? Wann werden sie geladen? (Ich sehe es auf Server-Start. Alle Besonderheiten im Lebenszyklus? Reload?)
  • Wie GWT diese Datei in seinem Stapel lädt? An welcher Stelle im Callstack einer Anfrage? Woher weiß GWT, woher er sie laden kann? Kann ich GWT sagen, wo es nach dieser Datei suchen soll?

(Haftungsausschluss: Ich habe [2] die gwt docs auf den erzeugten Dateien lesen Ich bin für mehr Low-Level-Details suchen. Ich die Eindrücke haben, dass der Fehler sind wir mit Httpcontext zu tun hat. getResource())

Antwort

11

Es ist alles in RemoteServiceServlet.

What is their lifecycle? When are they loaded? (I see it's on server startup. Any particularities in the lifecycle? Reload?)

Sie sind bei der ersten Verwendung geladen (erste Anforderung empfangen) und in einem Bereich des Servlets zwischengespeichert, so dass ihre Lebensdauer zu dem des Servlet selbst gebunden ist.

How GWT loads this file in its stack? At what point in the call stack of a request? How does GWT knows where to load them from? Can I tell GWT where it should look for this file?

servlet.getServletContext().getResourceAsStream. Sie können dies anpassen, indem Sie doGetSerializationPolicy überschreiben (wie im JavaDoc angegeben).
Der Dateiname (Ressourcen-URL) wird aus dem Anfragepfad und dem Anforderungskopf X-GWT-Permutation erstellt.

+1

danke für die Zeiger. Gutes Zeug. Zur Erinnerung, hier ist der Link zur Quelle. Es kann als Referenz dienen: http://code.google.com/p/google-web-toolkit/source/browse/trunk/benutzer/server/rpc/RemoteServiceServlet.java? spec = svn5045 & r = 5045 – maasg

+0

Wie funktioniert das mit GWT-PhoneGap Remote-Protokollierung? https://code.google.com/p/gwt-phonegap/wiki/LoggingModule das gewünschte '' .gwt.rpc'' ist am Telefon. Muss ich es auf den Server kopieren oder werde GWT es zu irgendeinem Zeitpunkt senden. – confile

4

Ich suchte nach der .rpc-Datei in meiner EAR-Datei und stellte fest, dass der Dateiname sich vom Fehler unterschied.

Lösung: Browser Cache gelöscht und aktualisiert.

+0

Sie hatten wahrscheinlich ein anderes Problem. – maasg

+0

Ich vermute, das ist die Lösung für die Mehrheit der Menschen, die dieses Problem haben. –

+0

+1 hier Für mich sieht es so aus, dass wir einen Weg finden sollten, den Client nach dem Update der Anwendung um neue Ressourcen zu bitten. –

4

Antwort vorausgesetzt mein Nick arbeitete für mich.

Ich hatte meine Web-App mit einigen Klassen für lange Zeit ausgeführt.

Später habe ich neue Klassen auf dem Server hinzugefügt und wenn ich versuche, den Web-App zu starten, es gab mir die folgende Fehlermeldung:

ERROR: Die Serialisierung Richtliniendatei ‚/ newapp/C3055CD048198D732D03CA6901E503 86.gwt .rpc 'wurde nicht gefunden; hast du vergessen, es in diese Bereitstellung aufzunehmen?

WARNUNG: Fehler beim Abrufen der SerializationPolicy 'C3055CD048198D732D03CA6901E5038 6' für das Modul 'http: //10.10.1.23: 9200/newapp /'; Eine ältere, 1.3.3 kompatible Serialisierungsrichtlinie wird verwendet. Dadurch können SerializationExceptions auftreten.

Dann habe ich die App in Inkognito-Fenster gestartet, die den Cache löscht und es hat für mich funktioniert.