Java Native Interface
Für das plattformunabhängige Layout bereiten AWT und Swing dem Entwickler die gleiche Problem: Er muss sein Programm auf allen Zielplattformen testen. Bei SWT kommt hinzu, dass es das Java Native Interface [9] verwendet. Mit JNI erreicht Javas Idee der Plattformunabhängigkeit dann auch ihr Ende: Das Interface macht Java-Anwendungen die Routinen vorhandener Binärbibliotheken zugänglich. Dazu muss die Java-Klasse die Bibliothek selbst laden, entweder eine Shared Library bei Linux und Unix oder eine DLL unter Windows.
Wer ein JNI-nutzendes Programm für mehrere Plattformen bereitstellen will, sollte die Shared Libraries am besten selbst einpacken – auch wenn es Standardbibliotheken sind –, um Versionskonflikte zu vermeiden. SWT, das wie erwähnt JNI verwendet, liefert die entsprechenden Binärbibliotheken mit. Beim Paketieren der eigenen Anwendung, baut man entweder einzelne Pakete für die unterschiedlichen Plattformen oder packt alle Versionen ein.
Eine interessante Alternative zu JNI ist Java Native Access (JNA, Homepage und Download unter [10]). Statt die Shared Library hinzuzuladen, stellt JNA nur eine kleine Klasse bereit, die generische Bibliotheken lädt, den Rest erledigt der Entwickler in reinem Java. Im Paket finden sich Interfaces für Linux, Free BSD und Windows für 32 und 64 Bit.
Die Matrix
Java-Kompatibilität entfaltet sich zu einem zweidimensionalen Problem: Auf der einen Achse kann man die Versionen – beginnend mit 1.0 – bis zum gerade erschienenen Java 7 [3] auftragen. Auf der zweiten Achse stehen die JVMs verschiedener Hersteller, die wichtigsten sicherlich Oracle, IBM und Open JDK. Hinzu kommt Android mit der Dalvik Engine, die funktional etwas deutlich anderes ist. Der Entwickler, der seinen Code nur einmal schreiben und eine mobile Version seiner Software unters Volk bringen will, muss alle Besonderheiten dieser Plattform beachten, nicht nur beim sowieso anders gearteten GUI.
Übersetzter Java-Bytecode ist aufwärtskompatibel, Oracle gibt sich mit ausgiebigen Kompatibilitätstests große Mühe, dass die mitgelieferten Runtime-Bibliotheken stabil bleiben. Lediglich die Hersteller von 3rd-Party-Bibliotheken ändern gelegentlich APIs, üblicherweise aber erst, nachdem sie ihre Absicht schon in der Vorversion per Deprecated-Markierung angekündigt haben. Das bedeutet, dass eine mit dem Compiler aus Java 1.0 übersetzte Klasse auch unter Java 7 ausführbar bleibt. In der anderen Richtung gilt dies aber nicht!
Entwickler portabler Programme sollten sich daher nicht am neuesten Stand der Technik orientieren. Gerade wer Software übers Internet verteilt, sollte seine Klassen kompatibel zur vorletzen Version übersetzen. Beim Übersetzen mit Javac sorgt die Option »-target Release«
dafür, »-source Release«
veranlasst den Compiler auch dazu, so zu kompilieren, als wäre er die angegebene Version.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 3 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





