JNI: Sag zum Abschied leise Servus
Vor vielen Jahren habe ich in einem Projekt einen in C geschriebenen Rechenkern in eine in Java geschriebene Webanwendung einbinden müssen. Der Rechenkern war recht komplex und über Jahre "gereift". Somit war es keine Option, ihn in Java neu zu schreiben. Die Lösung: den Rechenkern aus der Webanwendung heraus über JNI (Java Native Interface) aufzurufen – eine bis heute schmerzhafte Erinnerung.
Das Lesen und Programmieren von JNI ist sehr spröde (um es freundlich auszudrücken) und birgt zudem noch einige Gefahren.
Mit Project Panama und der neuen "Foreign Function and Memory API" hat man sich auf die Fahnen geschrieben, genau diese Sprödheit und die Gefahren beim Arbeiten mit Code und Daten außerhalb der JVM-Runtime zu umgehen.
Das hat meine Neugier geweckt. Ich möchte in diesem Vortrag gegenüberstellen, wie sich native Aufrufe mit JNI und mit der "Foreign Function und Memory API" umsetzen lassen. Ist die Sprödheit in der neuen Welt Geschichte? Kann ich jetzt wirklich gefahrlos APIs aufrufen, die nicht in Java implementiert sind und nicht in einer JVM laufen?
Ich hoffe (und glaube) am Ende der Gegenüberstellung steht ein eindeutiges "Goodbye to JNI”.