Serialisierungsstrategien

Eine Serialisierungsstrategie entscheidet darüber, in welchem Umfang EJServer und EJClient Serialisierungsaufgaben übernehmen sollen.

Auch wenn einer der Grundgedanken hinter EJOE der einfache, unkomplizierte Austausch von Objekten über Netzwerk ist, bietet EJOE dennoch Eingriffsmöglichkeiten um neben der Art der Serialisierung (siehe SerializeAdapter) auch Einfluss auf den Umfang der Serialisierung nehmen zu können.

EJOE, sowohl EJClient als auch EJServer, versendet Daten immer in der sogenannten serialisierten Form , welche durch den jeweiligen SerializeAdapter bestimmt wird. Unter gewissen Umständen kann es sinnvoll sein entweder komplett auf die Verwendung der durch EJOE automatisch, intern erzeugten serialisierten Form zu verzichten oder aber anstelle deserialisierter Serverantworten in Objektform Zugriff auf die serialisierte Form zur Weiterverarbeitung zu erhalten.

Arbeiten bspw. sowohl ServerHandler als auch Clientanwendung mit Bytearrays und/oder Objekten vom Typ java.nio.ByteBuffer, dann ist es unnötig diese Daten in eine transportable Form zu bringen, da sowohl Bytearrays als auch ByteBuffer bereits transportabel sind.

Evtl. ist aber auch wünschenswert lediglich die Serverantworten von EJServer mittels eines XML-basierten SerializeAdapters in XML-Form zu serialisieren, an den EJClient zu übermitteln und dann in der serialisierten XML-Form an den Aufrufer zurückzugeben, da die XML-Form via XSLT oder anderer auf XML aufsetzender Mechanismen direkt weiterverarbeitet werden kann.

Standardserialisierung

Bei der Standardserialisierung werden alle Objekte serialisiert bevor sie

  • als Request an den Server versendet werden
  • als Response an den Client gesendet werden
und deserialisiert bevor sie
  • an den ServerHandler übergeben werden
  • an den Aufrufer von EJClient zurückgeliefert werden.
Sowohl Clientanwendung als auch ServerHandler bemerken von den Serialisierungs-und Deserialisierungsvorgängen nichts. Sie haben keinen Zugriff auf die serialisierte Form eines Objekts, weder auf serialisierte Request- noch auf serialisierte Responsedaten. Wird keine Serialisierungsstrategie gesetzt, ist automatisch die Standardserialisierung aktiv. Die Standardserialisierung wird durch die Konstante ADAPTER_STRATEGY_DEFAULT in der Klasse de.netseeker.ejoe.EJConstants abgebildet.
import de.netseeker.ejoe.EJClient;
import de.netseeker.ejoe.EJConstants;
...
	EJClient client = new EJClient(...);
	client.setAdapterStrategy( EJConstants. ADAPTER_STRATEGY_DEFAULT );
...

gemischte Serialisierung

EJClient bietet die Möglichkeit, sich anstelle deserialisierter Objekte die serialisierte Form einer Serverantwort zurückliefern zu lassen. Dies kann insbesondere dann sinnvoll sein, wenn

  • die Serverantwort ohnehin in serialisierter Form auf dem Client abgespeichert werden soll, zum Beispiel in einer Datenbank oder in einer Datei
  • die Serverantwort mit einem Postprozessor wie zum Beispiel einem XSLT-Prozessor nachbearbeitet bzw. weiterverarbeitet werden soll, der nicht mit deserialisierten Objekt sondern mit der Ausgabeform des verwendeten SerializeHandlers umgehen kann
Die gemischte Serialisierungsstrategie wird durch die Konstante ADAPTER_STRATEGY_MIXED in der Klasse de.netseeker.ejoe.EJConstants abgebildet.
import de.netseeker.ejoe.EJClient;
import de.netseeker.ejoe.EJConstants;
...
	EJClient client = new EJClient(...);
	client.setAdapterStrategy( EJConstants. ADAPTER_STRATEGY_MIXED );
...

direkter Austausch von Objekten vom Typ java.nio.ByteBuffer

In Fällen, in denen sowohl ServerHandler als auch Clientanwendung Request- und Responsedaten als java.nio.ByteBuffer verarbeiten können, ist es möglich die Serialisierung komplett abzuschalten, da Objekte vom Typ java.nio.ByteBuffer bereits ohne weitere Serialisierung über Netzwerk transportabel sind. Es wird keine serialisierte Form für den Transport dieser Objekte benötigt.

Die direkte Serialisierungsstrategie wird durch die Konstante ADAPTER_STRATEGY_DIRECT in der Klasse de.netseeker.ejoe.EJConstants abgebildet.

import de.netseeker.ejoe.EJClient;
import de.netseeker.ejoe.EJConstants;
...
	EJClient client = new EJClient(...);
	client.setAdapterStrategy( EJConstants. ADAPTER_STRATEGY_DIRECT );
...