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;