„Grundlage für unser Projekt ist eine Patienten-Datenbank als Java-Server, auf die von COM-Clienten zugegriffen werden soll. Der Datenbank-Server implementiert einen in sich abgeschlossenen Satz an Java-Interfaces, zu denen es jeweils korrespondierende COM-Interfaces gibt. Andererseits müssen von Java Seite auch COM-Server angesprochen werden können. Sowohl die Java- als auch die COM-Interfaces waren vorgegeben und durften nicht verändert werden. Wir benötigten also eine Java-COM-Bridge mit folgenden Eigenschaften:
Sowohl Funktionsaufrufe als auch Callbacks in beide Richtungen (Java-Server / COM-Client und COM-Server / Java-Client) werden unterstützt
Der Datentyp REFIID in COM Funktionssignaturen wird unterstützt (nicht OleAutomation konform)
Dynamisches QueryInterface wird unterstützt, d.h. ein Javaobjekt wird erst zur Laufzeit auf das entsprechende Interface gecastet.
Es sollen ausschliesslich Java Interfaces konvertiert werden, keine Java Klassen. Nachdem wir keine kommerziellen Java-COM-Bridge finden konnten, die diese Anforderungen erfüllt, entschieden wir uns, mit CENTRO.java eine Java-C++-Bridge zu entwickeln und diese mit COM-Wrappern zu versehen.
Der Java-C++ Teil gestaltete sich dank CENTRO.java ausgesprochen einfach: Für die infrage kommenden Java-Interfaces wurden C++-Proxies generiert, die einen direkten Zugriff auf die (Interfaces der) zugehörigen Java-Objekte ermöglichen. Mit einem eigenen Codegenerator haben wir aus unseren IDL Dateien COM-Wrapper Klassen (ATL basiert) erzeugt. Die Zuordnung von Interfaces zu Objekten erfolgt dynamisch über COM Aggregation: Für jedes Java Objekt wird (genau) ein COM-Objekt-Proxy erzeugt, dass lediglich IUnknown implementiert. QueryInterface versucht nun, das Java-Objekt auf das geforderte Java-Interface zu casten. Wenn dies möglich ist, wird ein COM-Interface-Proxy für dieses Interface instantiiert und von dem COM-Objekt-Proxy aggregiert, so dass das entprechende COM-Interface auch auf dem COM-Objekt-Proxy zur Verfügung steht.
CENTRO.java zeichnet sich aufgrund der JNI-nahen Implementierung durch eine hohe Performance und Flexibilität aus. Die wenigen Probleme, die sich in unserem Projekt ergaben, wurden von Ablon durch Rat und Tat schnell und kompetent gelöst. Durch CENTRO.java wurde die Integration existierender Java und COM/C++ Software Komponenten in einem Gesamtsystem überhaupt erst mit vertretbarem Aufwand möglich.”