RPG und Java mit JNI integrieren: Setup

12. November 2008 | Von | Kategorie: Load`n`go, Programmierung

Diese Reihe befasst sich mit der Integration von Java in RPG-Anwendungen. Der erste Teil zeigt Ihnen, wie Sie Ihre Programmierumgebung vorbereiten. Die meisten herkömmlichen iSeries-Anwendungen bestehen ausschließlich aus RPG-Programmen und einigen unterstützenden CL-Routinen. Doch langsam aber sicher bahnt sich Java seinen Weg in diese Anwendungen.

von Gary Guthrie und Brian Farrar

Übersetzer

Übersetzt und für den deutschsprachigen Markt überarbeitet von Mathias Spateneder

Und auch wenn es für eingefleischte RPG-Anhänger blasphemisch klingen mag: für bestimmte Aufgaben ist Java einfach besser geeignet als RPG. Wenn Sie sich jetzt fragen, wofür Java in einer iSeries-Anwendung besser geeignet sein könnte, stellen Sie sich nur einmal eine Anwendung mit einer Browser-Oberfläche und RPG-Prozessen im Hintergrund vor. Zu solch einer Oberfläche passt Java sicher besser als RPG.

Ein anderes Beispiel:

Es gibt bereits fertige, robuste Socket-Routinen in Java, warum sollte man also RPG-basierte Socket-Server und -Clients schreiben. Es würde eigentlich genügen, eine RPG-Schnittstelle zu den Java-Socketroutinen zu realisieren. Die Qualität von Anwendungen, die sowohl RPG als auch Java verwenden, hängt nicht davon ab, ob eine der beiden Sprachen besser ist, sondern davon, wie gut die beiden in einer Anwendung zusammenspielen.

hungary12_festival_MG_7623_invBei der Integration von Java und RPG werden Sie sich oft zwischen verschiedenen Alternativen entscheiden müssen, wenn es darum geht, welche Technik für einen bestimmten Aspekt Ihrer Anwendung die richtige ist. Wie soll z.B. Java von RPG aus aufgerufen werden? Sollen Datenbankzugriffe mit JDBC (Java Database Connectivity), mit Routinen aus IBMs Java Toolbox oder mit nativen I/O-Routinen realisiert werden? In dieser Serie über die Integration von Java und RPG lernen Sie die Perspektive eines RPG-Entwicklers und die eines Java-Entwicklers kennen. Keiner von beiden kannte die Welt des anderen bevor sie zusammen an einem Projekt arbeiteten. Wir werden Ihnen zeigen, wie eine Java-Umgebung auf der iSeries eingerichtet und verwendet wird. RPG-Entwickler werden lernen, wie man Programme schreibt, die mit Hilfe von JNI (Java Native Interface) Java-Programme aufrufen und mit ihnen interagieren. Umgekehrt lernen Java-Programmierer, wie sie über JNI mit Prozeduren in RPG-Serviceprogrammen kommunizieren können. Bevor wir uns eingehender mit JNI befassen, stellen wir sicher, dass Sie für Java eingerichtet sind. Wir sagen Ihnen, welche Software Sie brauchen, richten eine Java-Umgebung ein, und kompilieren ein Java-Programm und führen es aus.

Erforderliche Software

Um unsere Beispiele optimal nach vollziehen zu können, benötigen Sie OS/400, V5R1 oder höher. Mit V5R1 wurden signifikante Erweiterungen vorgenommen, die die Integration von RPG und Java zu einer sinnvollen Aufgabe machen. Außerdem brauchen Sie noch einige iSeries-Lizenzprogramme, die in Abbildung 1 aufgelistet sind.

Produkt-ID Option Beschreibung
5722SS1 30 OS/400 Qshell-Interpreter
5722JV1 *BASE Developer Kit for Java
5722JV1 3 Java Developer Kit 1.2
5722JV1 4 Java Developer Kit 1.1.8
5722JV1 5 Java Developer Kit 1.3
5722JC1 *BASE Toolbox for Java

Abbildung 1: Erforderliche Lizenzprogramme

Februar Utility der NEWSolutions

load`n`go

Das erste Programm in der Liste, der Qshell-Interpreter (QSH) ist ein optionaler Bestandteil von OS/400 (Option 30). Der Qshell-Interpreter (oder shell) ist eine Umgebung mit Unix-ähnlichen Befehlen und Utilities. Qshell ist wichtig für die Java-Entwicklung auf der iSeries, weil es die Standard-Utilities und -Schnittstellen bereitstellt, die Java-Entwickler auf anderen Plattformen benutzen und weil Java in der Shell läuft. Neben der Basisversion sind in der Tabelle drei Versionen des Java Developer Kit (JDK) aufgelistet. Jede Version verfügt über bestimmte Fähigkeiten. Sie müssen nicht unbedingt alle drei Versionen laden, aber unter Umständen können Sie Kompatibilitätsprobleme vermeiden, wenn Sie über alle drei Versionen verfügen. Das letzte Element in der Tabelle ist die IBM Toolbox for Java, ein optionales Produkt mit Routinen, die die Java-Entwicklung auf der iSeries vereinfachen sollen. Wir führen die Toolbox als erforderliche Software, weil wir Sie verwenden, um verschiedene Techniken zu vergleichen und gegeneinander abzugrenzen. Prüfen Sie zusammen mit Ihrem Systemadministrator, ob die erforderliche Software auf Ihrem System vorhanden ist. Sie können sich viel Ärger (und Zeit) ersparen, wenn Sie Ihren Administrator bitten, dafür zu sorgen, dass Ihr System auf dem aktuellen PTF-Stand ist, vor allem in Bezug auf das aktuelle Java-Gruppen-PTF. Ohne das aktuelle Java-Gruppen-PTF kommt es so gut wie sicher zu eigenartigen Ergebnissen, für die Sie keine Erklärung finden. Das kennen wir ja alle!

Einrichten der Umgebung

Für die Entwicklung kommerzielle Java-Anwendungen verwenden Sie am besten ein robustes Entwicklungspaket wie z.B. Web Sphere Studio Application Developer (WSAD) unter Windows. Damit editieren und kompilieren Sie Ihre Java-Quellen. Sie können sogar einen Windows-Fileserver als Speicherort für kompilierte Java-Programme verwenden. Wenn die Entwicklung abgeschlossen ist, kopieren Sie die kompilierten Java-Dateien auf die iSeries, auf der die Anwendung laufen soll. Aber es ist ja nicht unser Ziel, eine robuste Java-Entwicklungsumgebung aufzubauen. Wir wollen nur sichergehen, dass Sie unsere Java-Code-Beispiele verwenden können, und dass Sie Grundkenntnisse über die Java-Umgebung der iSeries haben. Deshalb verwenden wir die iSeries zum Entwickeln und Ausführen. Sehen wir uns also an, wie Ihre iSeries eingerichtet werden muss. Das Einrichten der iSeries-Umgebung für Java ist keine monumentale Aufgabe, aber ganz trivial ist es auch nicht. RPG-Programmierer müssen sich an ein neues Vokabular gewöhnen. Aber keine Angst, wir helfen Ihnen dabei. Zum Einrichten der Umgebung und Ausführen von Java-Programmen müssen Sie folgende Aufgaben beherrschen:

  • Java-Quellcode editieren
  • die JDK-Version festlegen
  • Java-Quellcode kompilieren
  • kompilierten Java-Code zur Laufzeit finden
  • Java-Programme ausführen

Wenn Sie sich die Liste näher ansehen, entspricht das den Dingen, die Sie auch für die typische iSeries-Entwicklung benötigen. Wir wollen uns jetzt etwas genauer mit den einzelnen Punkten befassen.

Java-Quellcode editieren

Java-Quellcode ist auf der iSeries in Form von Streamfiles mit der Dateierweiterung „.java“ im integrierten Dateisystem (IFS) gespeichert. Der CL-Befehl EDTF startet einen einfachen Editor. Mit dem Befehl

    EDTF STMF(‚/home/brian/JavaProps.java‘)

erstellen Sie die Java-Quellendatei „JavaProps.java“ im Home-Verzeichnis des Benutzers Brian (/home/brian). Dazu einige wichtige Hinweise:

    1. Die Java-Umgebung unterscheidet im Gegensatz zur Befehlsoberfläche der iSeries zwischen Groß- und Kleinschreibung. Sie sollten deshalb unseren Angaben exakt folgen. 2. Der Java-Compiler erwartet eine Quellendatei im ASCII-Format. Der Befehl EDTF erstellt jedoch standardmäßig Dateien in EBCDIC-Codierung. Wenn Sie also eine neue Java-Quelle mit EDTF erstellen möchten, müssen Sie vorher dafür sorgen, daß das System mit ASCII-Encoding arbeitet. Auf der iSeries wird der zu verwendende Zeichensatz mit einer CCSID (Code Character Set Identifier) angegeben. Sobald Sie eine EDTF-Sitzung geöffnet haben, drücken Sie die Taste F15, und Sie gelangen in die Service-Anzeige, in der Sie die CCSID der Datei angeben können. Da die Windows-Entwicklungsumgebung ihren Code auf der iSeries mit der CCSID 1252 ablegt, sollten Sie denselben Wert auch für EDTF benutzen.

Wenn Sie SEU-Fan sind und Ihre Java-Quellen in einer physischen Quellendatei auf der iSeries speichern wollen, können Sie das natürlich tun. Kopieren Sie vor dem Kompilieren Ihre so gespeicherten Dateien einfach mit dem Befehl CPYTOSTMF in das IFS. Dabei geben Sie für den Parameter STMFCODPAGE den Wert *PCASCII an, um den Quellcode in eine ASCII-Datei zu kopieren.

Festlegen der JDK-Version

Auf Ihrer iSeries können verschiedene Versionen des JDK installiert sein. Während der Installation können Sie die standardmäßig zu verwendende Version angeben. Mit dem QSH-Befehl java und der Option -version können Sie ihre JDK-Version feststellen. Dazu starten Sie die Shell von der iSeries-Befehlseingabe aus mit dem Befehl QSH. Sobald die Shell geladen ist, geben Sie den Befehl

    java -version

ein, und die momentan verwendete Version wird angezeigt. Wenn Sie eine Fehlermeldung erhalten, die besagt, dass der Befehl nicht gefunden wurde, ist das JDK noch nicht installiert. Sie können die Standardversion des JDK auf verschiedene Art überschreiben: Mit dem QSH-Befehl java können Sie nicht nur die Standardversion feststellen, sondern auch angeben, welche JDK-Version verwendet werden soll. Dazu verwenden Sie die Option -D (Variable definieren) des Befehls und weisen der Eigenschaft java.version einen Wert zu:

    java -D java.version=1.3.1

Dieser Wert gilt natürlich nur für die aktuelle QShell-Sitzung. Sobald Sie eine neue Shell starten, wird die JDK-Version wieder auf den urspünglichen Standardwert zurückgesetzt. Mit speziellen Property-Dateien können Sie dauerhaft gültige Standardwerte (wie z.B. java.version) auf System- und Benutzerebene festlegen. Property-Dateien müssen den Namen SystemDefault.properties haben. Die Datei mit den auf Systemebene gültigen Standardwerten muss im Verzeichnis /qibm/userdata/java400/ stehen, während die Datei mit den auf Benutzerebene gültigen Standardwerten im Home-Verzeichnis des Benutzers stehen muss (z.B. /home/brian). Nachdem Sie die Dateien erstellt haben, laden Sie sie einfach mit den gewünschten Standardwerten im Format Eigenschaft=Standardwert. Um z.B. für die JDK-Version den Standardwert 1.3.1 festzulegen, tragen Sie folgendes ein:

    java.version=1.3.1
Schlagworte: , , , , , , , , , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.