Ein ExternalType-Abschnitt mit dem Stereotyp JavaObject definiert, wie Sie von Ihrem EGL-Code auf eine externe Java™-Klasse oder -Schnittstelle zugreifen können. Der Abschnitt gibt normalerweise alle öffentlichen Felder, Methoden und Konstruktoren der Klasse oder Schnittstelle an, kann aber auch ein Subset angeben, das von Interesse ist.

EGL definiert im Voraus den externen Typ Serializable, auf den Sie verweisen können, wenn Sie einen externen Typ definieren, der auf einer Java-Klasse basiert, die selbst die Schnittstelle java.io.Serializable implementiert. Wenn der externe Typ, den Sie definieren, den externen EGL-Typ Serializable nicht erweitert, werden alle EGL-Variablen, die auf diesem externen Typ basieren, im generierten Java-Code als 'transient' markiert. Transiente Variablen bleiben nicht erhalten, wenn ein Java-Objekt von einer Laufzeitplattform (wie z. B. einem Anwendungsserver) serialisiert wird. Eine Serialisierung kann z. B. erfolgen, wenn der Server als Reaktion auf einen Systemabschluss eine Sicherungskopie des Objekts erstellt.
Die Funktion kann einen Primitive-Wert, eine Feldgruppe oder überhaupt keinen Wert zurückgeben. Die Funktion kann keinen Datensatz zurückgeben.
Function nextElement() { JavaName = "next" };
Variablendeklarationen können auch die folgenden Komponenten enthalten:
UpperLimit INT { @JavaProperty{} };
Ein Feld kann nur gelesen werden, wenn getMethod angegeben wird, setMethod aber nicht. Und ein Feld kann nur geschrieben werden, wenn setMethod definiert ist, getMethod aber nicht. Ein Fehler ist die Folge, wenn Sie versuchen, den Wert eines Feld festzulegen, das nur gelesen werden kann, oder wenn Sie den Wert eines Feld abrufen möchten, das nur geschrieben werden kann.
Betrachten Sie beispielsweise das java.beans-Paket, das ein Java-Entwickler verwendet, um eine Art Java-Klasse zu codieren, die normalerweise als Java-Bean oder einfach Bean bezeichnet ist. Zur Funktionalität einer Bean gehört z. B., dass sie die Methode eines Java-Objekts als Reaktion auf ein Laufzeitereignis aufrufen kann. Im weiteren Verlauf dieser Beschreibung wird davon ausgegangen, dass es sich bei dem Laufzeitereignis um eine Änderung eines Eigenschaftswerts in der Bean handelt.
Der Java-Entwickler registriert diese Art von Ereignis, indem er die Methode addPropertyChangeListener der Bean aufruft und ein Objekt PropertyChangeListener übergibt. Das Objekt PropertyChangeListener ist im Prinzip ein Ereignislistener.
Wenn sich ein Eigenschaftswert ändert, ruft die Bean den Ereignislistener auf. Konkret ruft die Bean die Methode propertyChange des Objekts PropertyChangeListener auf und übergibt ein Objekt PropertyChangeEvent, das Details über die Änderung zur Verfügung stellt.
Des Weiteren ist zu berücksichtigen, dass der Ereignislistener auf einer Java-Schnittstelle basiert und sich die Methode propertyChange speziell auf eine Geschäftsanwendung bezieht. Wenn der EGL-Entwickler die Eigenschaft @eventListener verwendet, bedeutet dies, dass die EGL-generierte Methode propertyChange Logik aufruft, die von einer EGL-Funktion abgeleitet ist, die der Entwickler codiert hat.
Im vorliegenden Beispiel hat addMethod den Wert “addPropertyChangeListener”.
Im vorliegenden Beispiel hat listenerType den Wert “java.beans.PropertyChangeListener”.
Im vorliegenden Beispiel hat method den Wert “propertyChange”.
ExternalType MyBean type JavaObject
onPropertyChange PropertyChangeDelegate
{ @eventListener{ addMethod = "addPropertyChangeListener",
listenerType = "java.beans.PropertyChangeListener",
method = "propertyChange" } };
end
Das Feld onPropertyChange ist nicht Teil der Bean, aber es ist vorhanden, sodass das Listenermuster in Ihrem EGL-Code dort zur Verfügung steht, wo Sie die EGL-Funktion zuordnen, die bei Auftreten eines Ereignisses aufgerufen wird.
Delegate PropertyChangeDelegate( evt PropertyChangeEvent in )
end
ExternalType PropertyChangeEvent type JavaObject { packageName = "java.beans" }
function getPropertyName() returns ( string );
// Sie können andere Methoden von java.beans.PropertyChangeEvent zur Verfügung stellen.
end
program MyEGLProgram
function main()
mb MyBean{ onPropertyChange = propChange };
end
function propChange( evt PropertyChangeEvent in )
writeStdout( "Property " :: evt.getPropertyName() :: " has changed." );
end
end
Das Programm erstellt eine Variable des Typs MyBean, ordnet dem Feld onPropertyChange dieses Typs eine Funktion zu und definiert die Funktion selbst. Wenn sich ein Eigenschaftswert in der Bean ändert, wird die Funktion aufgerufen und verwendet getPropertyName, also die Methode, die vom Objekt PropertyChangeEvent zur Verfügung gestellt wurde.
Ordnen Sie die Eigenschaft @eventListener immer einer Variablen zu, die auf einem Stellvertreterabschnitt basiert. Die Merkmale des Stellvertreterabschnitts müssen einer Methode zur Behandlung von Ereignissen - wie z. B. propertyChange - entsprechen, die in einem bestimmten Java-Ereignislistener - wie z. B. PropertyChangeListener - enthalten ist.
Wenn Sie auf Java-Feldnamen und -Methodennamen im Code verweisen, müssen Sie die Groß-/Kleinschreibung beachten, auch wenn dies bei den entsprechenden EGL-Namen nicht erforderlich ist.