Die Nachricht selbst ==================== Messages (Nachrichten) transportieren Daten von einem Target zu einem anderen Target. Dabei können Messages auch von außerhalb eines Targets verschickt werden - wenn man Zugriff auf die Kernel-Klasse hat. Messages bestehen aus einem Umschlag (**Envelope**) und einem oder mehreren **Records**. Die Klasse der Message ist die ``CMessage``-Klasse. Sie hat diverse Konstruktoren und kann einfach mittels *new* erstellt werden:: // Erstellung aus einem Stream static CMessage createFromStream(final DataInputStream aStream) throws IOException; // mit Envelope, aber ohne Record CMessage(); // mit Envelope, aber ohne Record CMessage(final CEnvelope aEnvelope); // mit Envelope und Record CMessage(final CRecord aRecord) // mit Envelope und Record CMessage(final CEnvelope aEnvelope, final CRecord aRecord); Aus einem Template CMessage(final CMessage aTemplate); Zugriff auf die Records *********************** Der Zugriff auf die Records erfolgt über folgende Methoden:: // fügt einen Record hinzu void addRecord(final CRecord aRecord); // Holt den ersten Record CRecord getFirstRecord(); // Der Iterator für die Records Iterator iterator(); // Wieviele Records? int size(); Die meisten Messages haben nur einen Record. Nur wenn viele Messages zu anderen D1-Instanzen geschickt werden, macht es Sinn, mehrere Records einem Envelope zuzuordnen, da so der Header-Overhead gesenkt werden kann. Übrigens werden Messages bei der Zustellung an den Message-Handler eines Targets wieder auseinander genommen: Es wird immer nur ein Envelope + Record dem Message-Handler gereicht. Hat die Message mehrere Records, wird die entsprechenden Message-Handler also mehrfach aufgerufen. Zugriff auf den Envelope ************************ Den Envelope kann man lediglich holen; Setzen kann man ihn nur über den Konstruktor:: CEnvelope getEnvelope(); Stream ****** Um eine Message in einem Stream zu packen, gibt es folgende Methode:: void toStream(final DataOutputStream aStream) throws IOException; .. _ENVELOPES: .. _SLOTS: