© Excellent backgrounds/Shutterstock.com
Java Magazin
Teil 4: Multilingual: Jython-Code in Java-Applikationen

Import this

Mit der vierten JVM-Sprache Jython [1] wird im letzten Teil der Artikelserie ein kleiner Exot besprochen. Denn Jython wurde nicht explizit für die Interaktion mit Java optimiert, wie die anderen drei Vertreter dieser Serie Clojure, Scala und Groovy, sondern stellt eher eine Python-Implementierung auf der JVM dar. Daraus ergeben sich starke Beschränkungen, vor allem für den Weg von Jython nach Java, die in diesem Artikel im Vordergrund stehen.

Johannes Dienst


ArtikelserieTeil 1: ClojureTeil 2: ScalaTeil 3: GroovyTeil 4: Jython

Im TIOBE-Index ergibt die Suche nach Jython genau null Treffer. Welche Relevanz hat diese Sprache also auf der JVM. Dafür sollte man wissen, dass Jython eine Implementierung von Python für die JVM ist. Das Besondere daran ist, dass es durch seinen Aufbau alle Bibliotheken von Java ohne größere Umstände nutzen kann [2]. Zum aktuellen Zeitpunkt (April 2016) nimmt Python im oben genannten Index den fünften Rang ein. Damit hat es praktische Relevanz und verdient es, genauer unter die Lupe genommen zu werden.

Die Integration in Java soll, wie so oft beworben, nahtlos vonstattengehen. Bei genauer Analyse wird sich jedoch herausstellen, dass es durchaus große Hindernisse gibt, die umschifft werden wollen. Doch fangen wir von vorne an.

Da Jython eine Implementierung von Python für die JVM ist, ist theoretisch jedes gültige Python-Programm auch mit Jython lauffähig. Zusätzlich wurde noch der Support für Java-Bibliotheken eingebaut. Dadurch lassen sich quasi Hybridprogramme schreiben, die das Beste aus beiden Welten vereinen. Folgendes Beispiel ist valides Jython, das Java benutzt:

from java.lang import System as javasystemjavasystem.out.println("Hello")

Die Integration von Java geht sogar soweit, dass Java-Objekte erweitert werden können, siehe Listing 1 (aus [3]).

Listing 1: Java-Objekte erweiternfrom java.util import Random class rand(Random): def __init__(self, multiplier=1.0, seed=None): self.multiplier = multiplier if seed is None: Random.__init__(self) else: Random.__init__(self, seed)  def nextDouble(self): return Random.nextDouble(self) * self.multiplier

Jython in Java integrieren

Im Laufe des Artikels werden mehrere Möglichkeiten beschrieben, Jython in Java-Code zu integrieren. Die statische Kompilierung zu class-Dateien ist seit Jython 2.2 Geschichte – es existiert auch keine etablierte Ersatzmöglichkeit. Aber es gibt eine inoffizielle Möglichkeit [4], die class-Dateien erzeugt: Diese kann von ihrem Aufbau her aber nicht einfach in Java verwendet werden. Deshalb wird auf diese Möglichkeit nicht weiter eingegangen. Dadurch rücken drei andere Techniken in den Fokus. Für einfachste Anwendungen kann seit Java 6 die ScriptEngine benutzt werden, um dynamisch Python-Code auszuführen. Wesentlich mächtiger ist der PythonInterpreter von Jython, der dynamisch Python-Module aus Dateien laden kann. Außerdem ist es damit möglich, PyObject-Instanzen (Oberklasse aller Jytho...

Java Magazin
Teil 4: Multilingual: Jython-Code in Java-Applikationen

Import this

Mit der vierten JVM-Sprache Jython [1] wird im letzten Teil der Artikelserie ein kleiner Exot besprochen. Denn Jython wurde nicht explizit für die Interaktion mit Java optimiert, wie die anderen drei Vertreter dieser Serie Clojure, Scala und Groovy, sondern stellt eher eine Python-Implementierung auf der JVM dar. Daraus ergeben sich starke Beschränkungen, vor allem für den Weg von Jython nach Java, die in diesem Artikel im Vordergrund stehen.

Johannes Dienst


ArtikelserieTeil 1: ClojureTeil 2: ScalaTeil 3: GroovyTeil 4: Jython

Im TIOBE-Index ergibt die Suche nach Jython genau null Treffer. Welche Relevanz hat diese Sprache also auf der JVM. Dafür sollte man wissen, dass Jython eine Implementierung von Python für die JVM ist. Das Besondere daran ist, dass es durch seinen Aufbau alle Bibliotheken von Java ohne größere Umstände nutzen kann [2]. Zum aktuellen Zeitpunkt (April 2016) nimmt Python im oben genannten Index den fünften Rang ein. Damit hat es praktische Relevanz und verdient es, genauer unter die Lupe genommen zu werden.

Die Integration in Java soll, wie so oft beworben, nahtlos vonstattengehen. Bei genauer Analyse wird sich jedoch herausstellen, dass es durchaus große Hindernisse gibt, die umschifft werden wollen. Doch fangen wir von vorne an.

Da Jython eine Implementierung von Python für die JVM ist, ist theoretisch jedes gültige Python-Programm auch mit Jython lauffähig. Zusätzlich wurde noch der Support für Java-Bibliotheken eingebaut. Dadurch lassen sich quasi Hybridprogramme schreiben, die das Beste aus beiden Welten vereinen. Folgendes Beispiel ist valides Jython, das Java benutzt:

from java.lang import System as javasystemjavasystem.out.println("Hello")

Die Integration von Java geht sogar soweit, dass Java-Objekte erweitert werden können, siehe Listing 1 (aus [3]).

Listing 1: Java-Objekte erweiternfrom java.util import Random class rand(Random): def __init__(self, multiplier=1.0, seed=None): self.multiplier = multiplier if seed is None: Random.__init__(self) else: Random.__init__(self, seed)  def nextDouble(self): return Random.nextDouble(self) * self.multiplier

Jython in Java integrieren

Im Laufe des Artikels werden mehrere Möglichkeiten beschrieben, Jython in Java-Code zu integrieren. Die statische Kompilierung zu class-Dateien ist seit Jython 2.2 Geschichte – es existiert auch keine etablierte Ersatzmöglichkeit. Aber es gibt eine inoffizielle Möglichkeit [4], die class-Dateien erzeugt: Diese kann von ihrem Aufbau her aber nicht einfach in Java verwendet werden. Deshalb wird auf diese Möglichkeit nicht weiter eingegangen. Dadurch rücken drei andere Techniken in den Fokus. Für einfachste Anwendungen kann seit Java 6 die ScriptEngine benutzt werden, um dynamisch Python-Code auszuführen. Wesentlich mächtiger ist der PythonInterpreter von Jython, der dynamisch Python-Module aus Dateien laden kann. Außerdem ist es damit möglich, PyObject-Instanzen (Oberklasse aller Jytho...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang