Expand description
IDL-Service → Java-RPC-Codegen (DDS-RPC 1.0 §7.11.2 — Java-PSM).
Dieser Modul ist die Bruecke zwischen dem typisierten RPC-Datenmodell
aus zerodds-rpc (ServiceDef/MethodDef/ParamDef) und dem
Java-Source-Codegen. Pro Service emittieren wir vier Klassen:
<Service>.java— synchrones Interface mit allen Methoden (throws RemoteException+ User-Exceptions).<Service>Async.java— asynchrones Interface mitCompletableFuture<TOut>-Returns (Spec §7.11.2.2.4 mapptFuture<T>aufjava.util.concurrent.Future<T>; wir nutzenCompletableFutureals vollstaendige Implementierung).<Service>Requester.java— Client-Side: kapselt einenorg.zerodds.rpc.Requester<TIn,TOut>und implementiert<Service>+<Service>Async.<Service>Replier.java— Server-Side: kapselt einenorg.zerodds.rpc.Replier<TIn,TOut>und dispatcht eingehende Requests an einen<Service>Service-Handler.<Service>Service.java— Server-Side Handler-Interface: das Service-Implementor implementiert dieses Interface.
§Out-Parameter
Java hat kein out/inout-Konzept. Wir mappen out/inout ueber das
Holder-Pattern (Spec §7.11.2.3 / IDL-to-Java 1.3 §1.5):
public final class IntHolder {
public int value;
public IntHolder() {}
public IntHolder(int v) { this.value = v; }
}Holder werden nicht pro Service emittiert — wir referenzieren die
generischen Holders aus org.zerodds.rpc.Holder<T> (siehe
runtime/rpc/Holder.java). Begruendung: weniger Boilerplate als
pro-Type-Holder, vollstaendig kompatibel mit dem Spec-Pattern (der
Caller schreibt vor dem Aufruf in holder.value, der Reply-Decoder
ueberschreibt nach Rueckkehr). Alternative Object[]-Wrapper waere
type-unsafe und scheidet daher aus.
§Exception-Mapping (Spec §7.11.2.1)
- IDL
exception E { ... }→ wir delegieren an den existierendenemit_exception_file-Pfad (E extends RuntimeException); der RPC- Codegen ergaenzt nur diethrows E1, E2-Klausel auf der Methode. org.zerodds.rpc.RemoteExceptionist eine RuntimeException- Subclass, die jede RPC-Methode implizit werfen darf — wir setzen sie deshalb nicht explizit in denthrows-Listen, weil RuntimeException in Java nicht checked ist.
§Was diese Stufe NICHT macht
- Keine
javac/mvn-Integration — der Output ist Skeleton-Java ohne JVM-Build-Verifikation. - Keine JNI-Anbindung —
Requester/ReplierhaltenObject-Felder fuer den Native-Handle (Stub-Form). - Keine Reflection-TypeRep (Stretch in idl4-java §8).
Functions§
- emit_
replier_ class - Emittiert die Server-seitige Replier-Klasse (
<Service>Replier.java). - emit_
requester_ class - Emittiert die Client-seitige Requester-Klasse (
<Service>Requester.java). - emit_
service_ files - Convenience-Wrapper: emittiert alle 5 Java-Files fuer ein Service.
- emit_
service_ handler_ interface - Emittiert das Server-side Handler-Interface (
<Service>Service.java). - emit_
service_ interface - Emittiert das synchrone Service-Interface (
<Service>.java). - emit_
service_ interface_ async - Emittiert das asynchrone Service-Interface (
<Service>Async.java).