| |
1-56 Java zu abbildendem IDL, v1.3 September 2003 1 b. Wenn die Anforderung auf dem Bediensteten durchführte, ohne eine Ausnahme zu werfen und so ist ein Fall von ServantObjectExt benennen Sie dann so.normalCompletion() . c. Wenn die Anforderung auf dem Bediensteten Ausnahme Ausn. warf und so ist ein Fall von ServantObjectExt , benennen dann so.exceptionalCompletion(exc) . d. Anruf this._servant_postinvoke(so) . 4. Wenn _ servant_preinvoke zurückgebrachte ungültige, wiederholen Schritt 1. Der Anruf zu Util.isLocal() bringt falsches zurück und veranläßt den nicht-optimierten Weg zu sein gefolgt. Das _ servant_preinvoke Methode bringt Nichtnull wenn und nur wenn zurück, optimiert Ortsgespräch kann verwendet werden. Es führt jedes mögliches Sicherheitsprüfen durch, das notwendig sein kann. Wenn _ servant_preinvoke Methode bringt Nichtnull zurück, dann Bediensteter Feld von zurückgebrachtes ServantObject muß einen Gegenstand enthalten, der das RMI/IDL einführt Remoteschnittstelle und kann benutzt werden, um die Bedienstetimplementierung zu benennen. Lokale Stummel sind für das Durchführen der Kopie der Methodenparameter, Resultate verantwortlich und Ausnahmen und Remotegegenstände richtig anfassen, um remote/local- zur Verfügung zu stellen transparente RMI-/idlsemantik. Das folgende ist ein Beispiel einer Stummelkategorie, die diesen optimierten Anrufweg liefert. // Java Import org.omg.CORBA.portable.ServantObjectExt; allgemeine Kategorie _ Aardvark_Stub verlängert javax.rmi.CORBA.Stub Werkzeuge Aardvark { allgemeines internes echo(int x) wirft java.rmi.RemoteException, Boomerang { wenn (!javax.rmi.CORBA.Util.isLocal(this)) { // Remoteanrufweg org.omg.CORBA_2_3.portable.InputStream in = Null; Versuch { Versuch { org.omg.CORBA.portable.OutputStream aus = _ richten request("echo") aus; out.write_long(x); in = (org.omg.CORBA_2_3.portable.InputStream) _ invoke(out); Rückkehr in.read_long(); } Verriegelung (org.omg.CORBA.portable. ApplicationException ex) { in = (org.omg.CORBA_2_3.portable.InputStream) ex.getInputStream(); Zeichenkette Kennzeichnung = in.read_string(); wenn (id.equals("IDL:BoomerangEx/1.0")) { Throw (Boomerang)in.read_value(); } sonst { Throw neues java.rmi.UnexpectedException(id); } |  |
|
| |
|
|