Gibt es eine Möglichkeit, dieselbe Klasse auf dem Client anders als auf dem Server zu implementieren?
Um das "Warum willst du das tun?" zu vermeiden Frage .. Ich werde es ausarbeiten
Ich konvertiere eine sehr große Java-Client / Server-Anwendung. Derzeit verwendet es einen Swing GUI Client und spricht mit dem Server via Spring Remoting (RPC). Die Verwendung von GWT RPC mit Spring-Diensten ist kein Problem, es gibt mehrere hervorragende Beispiele, und alle scheinen gut zu funktionieren.
Mehrere Klassen, die sowohl dem Client als auch dem Server gemeinsam sind, enthalten Daten, die hin- und hergereicht werden. Diese Klassen enthalten auch ein Verhalten, das mithilfe der JRE-Standardklassen implementiert wird. Eine Klasse enthält z. B. Datums- und Uhrzeitangaben, einschließlich Zeitzone, Sommerzeit usw., analysiert und analysiert diese länderspezifisch. Ich könnte es umschreiben / umgestalten, aber die Anwendung ist über 10 Millionen SLOC, woraus buchstäblich Millionen von Verweisen auf diese Klasse allein resultieren, so dass eine größere Überarbeitung nicht kosteneffektiv ist.
Um dies als Beispiel zu verwenden, bietet GWT eine hervorragende i18n-Unterstützung für das Parsen und Formatieren von Daten. Die Implementierung unterscheidet sich jedoch von der JRE.
Ich suche also nach einer Cleaver-Methode, mit der ich eine Implementierung in die Shell meiner DateTime-Klasse einfügen kann, abhängig davon, ob sie sich im Client (mit GWT und nativer JS) oder im Server (mit JRE) befindet ). Gibt es einen schlauen Weg, dies zu tun? Vielleicht mit der Moduldatei XXXXX.gwt.xml. Ich suche nach einer generischen Lösung.
Sie sollten das <super-source>
für überschreiben verwenden eine Paketimplementierung mit einer anderen .
Dies wird von GWT verwendet, um Java Runtime-Klassen zu emulieren und (unter anderem) verschiedene Implementierungen für Client und Server der com.google.gwt.regexp.shared.*
-Klassen bereitzustellen.
Ich denke, was Sie suchen, ist dies: <source path="client" />
in Ihrer Projekt-gwt.xml-Datei. Es teilt dem GWT-Generator mit, wo nach clientseitigem Code gesucht werden soll, um ihn in JS umzuwandeln. In meinem Projekt habe ich es so eingerichtet:
Grundsätzlich befindet sich der Client-Code im Client-Verzeichnis, und in shared halten wir Beans und einige Daten-Wrapper für die Client- und Server-Seite.
Was Sie tun könnten, ist, die Pakete, die Sie konvertieren möchten, wie oben beschrieben mit dem Quellpfad zum Client hinzuzufügen. Aber Sie müssen sich daran erinnern, dass die Klassen, die Sie konvertieren werden, nur aus Objekten und Eigenschaften bestehen können, die der GWT-Generator in ein clientseitiges Java-Skript konvertieren kann. Ich bin mir auch nicht sicher, ob ein genauerer Pfad in den Quellpfad eingefügt werden kann, wie zum Beispiel:
%Vor%Ein weiterer Nachteil ist, dass wenn Sie die GWT i18n-Unterstützung verwenden, es andere Locale in der Zeit der Kompilierung selbst behandelt - was gut ist. Wenn Sie sich dafür entscheiden, Ihren eigenen Mechanismus zu verwenden, müssen Ihre Klassen eine gewisse Logik enthalten, um auf das aktuell verwendete Gebietsschema zu achten, das mit GWT kompatibel sein muss.