Freigeben über


.NET und Java Interoperabilität

In grossen Unternehmen bestehen fast immer heterogene Anwendungslandschaften, in denen die verschiedensten Technologien zum Einsatz kommen. Und immer wieder kommt es auch zu Situationen in denen diese verschiedenen Technologien verbunden werden müssen.

Zwei Technologien, die in einem solchen Interoperabilitätsszenario häufig angetroffen werden, sind .NET und Java.

.NET bietet Interoperabilität integriert in die .NET Laufzeitumgebung zu:

  • COM Interop - (COM, DCOM, ActiveX, …)
  • Plattform Invoke Interop - (Windows Dlls, die native auf dem Win32 System ausgeführt werden. Hierzu muss man allerdings die Signatur der Methoden in der Dll kennen, um die Methoden aufrufen zu können.)
  • C/C++ Interop – Man kann „unmanaged“ C/C++ Code unter managed Code-APIs kapseln und dann von managed Programmcode benutzen.

Java bietet Interoperabilität mit den Java Native Interface (https://en.wikipedia.org/wiki/Java_Native_Interface) erlaubt den Zugriff auf (Nicht Java)-Bibliotheken, die zum Beispiel in C/C++/Assembler geschrieben sein können.

Es gibt zwei prinzipiell verschiedene Anwendungsszenarien:

  1. Die zu verbindenden Technologien .NET/Java werden auf verschiedenen Computern eingesetzt. Zum Beispiel in Form einer Client/Server Anwendung.
    Häufige Lösung: In solch einem Szenario sollte man WebServices einsetzen, da für diese Art der Kopplung vorhandene Bibliotheken genutzt werden können.
    WebServices basierend auf XML, XSD, SOAP,WSDL aufrufbar via Http/Tcp können heute Rechner aus ganz verschiedenen Welten (zum Beispiel Windows Client und IBM Host Server) interoperieren lassen.
  2. Die zu verbindenden Technologien .NET/Java werden auf demselben Computer ausgeführt.
    Häufige Lösung: Es gibt spezielle Bridgeprodukte, die das komplexe JNI Interface kapseln und komfortable Verbindungen zwischen den verschiedenen Programmierwelten zulassen.

Speziell in Szenario 2 gibt es folgende fachliche Anforderung für die Interoperabilität geben:

  • Klassen Integration = .NET/Java ruft Klassen/Funktionen der anderen Technologie auf.
  • Klassen und Event Integration = .NET/Java Klassen können als Event-Subscriper jeweils Events der anderen Technologie empfangen.
  • UI Integration = eine UI Componeten (ein Java Swing Panel oder eine .NET Winforms User Control Componente) kann in der Bedienoberfläche der anderen Technologie dargestellt werden und die Attribute/UI-Events der jeweiligen UI Componente sind in der anderen Technologie nutzbar.

Die Auswahl an Bridges für .NET/Java Interoperabilität ist gross. Es gibt kostenfreie Lösungen aber verschiedene Produkte, die als Bridge entworfen wurden. Die Komplexität der technischen Anforderungen steigt von Klassen Integration bis zur UI Integration. Während ein einfaches Klassenintegrationsmodell via Processkommunikation zwischen einem Java und .NET Prozess gelöst werden könnten, ist die UI Integration komplexer.
Bei der UI Integration müssen die JAVA und .NET Klassen  im selben Prozessraum laufen und die Bridge muss auch das Single Threading Apartment Modell (STA) für .NET/ActiveX UI Komponenten realisieren.

Ausgehend von den fachlichen Anforderungen sollte man sich verschiedene Produkte anschauen und auswählen.

Viel Spass beim „Bridgen“ … GunnarD