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<CRecord> 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;