SerializeAdapter - Warum Serialisierung so wichtig ist

Objekte, selbst die einfachsten Objekte, sind komplexe Strukturen. Um Objekte aus der in Java zur Laufzeit erzeugten Struktur auf bzw. über ein Medium zu transportieren, müssen diese Objekte in ein speicherbares bzw. übertragbares Format transformiert werden.

Java stellt dafür die Mechanismen der Objektserialisierung sowie Long Term Persistence für Java Beans bereit. Beide stellen strenge Anforderungen an die zu transformierenden Objekte, die oftmals entweder nicht erfüllt werden können oder mit Laufzeiteinbußen durch zusätzliche Konvertierungen der in den Objekten beinhalteten Werte während der Objektverwendung zur Laufzeit erkauft werden müssen. Beispielhaft mag hier angeführt werden, dass sogar viele Containerklassen innerhalb der Java Runtime die gestellten Anforderungen nicht erfüllen.

Desweiteren fehlt den beiden genannten Mechanismen fast vollständig jegliche Unterstützung für moderne Formen der Datenmodellierung und des Datenbindings. Letzteres hat insbesondere in den letzten Jahren stark an Bedeutung gewonnen.

EJOE hat unter anderem zum Ziel möglichst viele Arten der Serialisierung zu unterstützen um Anwendungen zusätzlichen Implementierungsaufwand zu ersparen. Anwendungen sollen in die Lage versetzt werden, möglichst alle Arten von Objekten, eigene sowie Standardtypen aus der Java Runtime, über Netzwerk austauschen zu können ohne dafür an den Objekten Veränderungen vornehmen zu müssen.

An dieser Stelle kommen die sogenannten SerializeAdapter ins Spiel:

Sie sind die Schnittstelle zwischen EJOE und verschiedensten Mechanismen und Frameworks zur Serialisierung.

Den zu verwendenden SerializeAdapter selbst bestimmen

Die Clientkompontente EJClient bringt spezielle Konstruktoren für die Auswahl eines speziellen SerializeAdapters mit:

public EJClient(String host, int port, final SerializeAdapter adapter)
...

public EJClient(String host, int port, final SerializeAdapter adapter, 
				boolean isPersistent, boolean isHttp,
				oolean useCompression, boolean isDirect)
...

public EJClient(String host, int port, int classLoaderPort,
				final SerializeAdapter adapter)
...

Wird kein Adapter gesetzt, benutzt EJClient automatisch den Standardadapter:

  • XStreamAdapter, falls XStream verfügbar ist
  • ansonsten ObjectStreamAdapter
Pro Client kann nur ein SerializeAdapter benutzt werden, eine spätere Änderung zur Laufzeit ist nicht möglich.