1. Einführung
Java Komponenten in RPG
AppServer4RPG
Beispiel im Vergleich
Hinter den Kulissen von ArdGate
effiziente Aufrufe
von Java aus RPG
Dieter Bender
Dieter Bender Hinter den Kulissen von ArdGate
2. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
Vorstellung
WWW.BENDER-DV.DE - Dieter@Bender-DV.de
Dieter Bender, D35435 Wettenberg
AS/400* Freelancer
Java, SQL, ILE RPG, COBOL
Anwendungs-Design, Datenbanken
Kurse: Java, SQL, ILE RPG
Open Source Komponenten
ArdGate: SQL Zugriffe von AS400 auf alle Datenbanken
AppServer4RPG: schnelle, skalierbare Zugriffe aus RPG auf
Java
einige RPG Komponenten
*) AS/400 := AS/400 und alle kompatiblen Systeme
Dieter Bender Hinter den Kulissen von ArdGate
3. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
ArdGate im Überblick
*ARDPGM
zwingend native
JDBC zwingend
Java
sehr wenig RPG
(blau)
viel Java (rot)
viele calls von
Java aus RPG
viele Benutzer
Umgebung
unbekannt
Dieter Bender Hinter den Kulissen von ArdGate
4. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
ArdGate im Überblick
*ARDPGM
zwingend native
JDBC zwingend
Java
sehr wenig RPG
(blau)
viel Java (rot)
viele calls von
Java aus RPG
viele Benutzer
Umgebung
unbekannt
Dieter Bender Hinter den Kulissen von ArdGate
5. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
ArdGate im Überblick
*ARDPGM
zwingend native
JDBC zwingend
Java
sehr wenig RPG
(blau)
viel Java (rot)
viele calls von
Java aus RPG
viele Benutzer
Umgebung
unbekannt
Dieter Bender Hinter den Kulissen von ArdGate
6. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
ArdGate im Überblick
*ARDPGM
zwingend native
JDBC zwingend
Java
sehr wenig RPG
(blau)
viel Java (rot)
viele calls von
Java aus RPG
viele Benutzer
Umgebung
unbekannt
Dieter Bender Hinter den Kulissen von ArdGate
7. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
ArdGate im Überblick
*ARDPGM
zwingend native
JDBC zwingend
Java
sehr wenig RPG
(blau)
viel Java (rot)
viele calls von
Java aus RPG
viele Benutzer
Umgebung
unbekannt
Dieter Bender Hinter den Kulissen von ArdGate
8. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
ArdGate im Überblick
*ARDPGM
zwingend native
JDBC zwingend
Java
sehr wenig RPG
(blau)
viel Java (rot)
viele calls von
Java aus RPG
viele Benutzer
Umgebung
unbekannt
Dieter Bender Hinter den Kulissen von ArdGate
9. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
ArdGate im Überblick
*ARDPGM
zwingend native
JDBC zwingend
Java
sehr wenig RPG
(blau)
viel Java (rot)
viele calls von
Java aus RPG
viele Benutzer
Umgebung
unbekannt
Dieter Bender Hinter den Kulissen von ArdGate
10. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
Warum Gleiberg Projekt?
AppServer4RPG
meine Heimat
Open Source
zum Schutz des
Copyrights eines
Freelancers
Ergebnis von
mehr als 10
Jahren Projekte
und Kurse
Dieter Bender Hinter den Kulissen von ArdGate
11. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
Warum Gleiberg Projekt?
AppServer4RPG
meine Heimat
Open Source
zum Schutz des
Copyrights eines
Freelancers
Ergebnis von
mehr als 10
Jahren Projekte
und Kurse
Dieter Bender Hinter den Kulissen von ArdGate
12. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
Warum Gleiberg Projekt?
AppServer4RPG
meine Heimat
Open Source
zum Schutz des
Copyrights eines
Freelancers
Ergebnis von
mehr als 10
Jahren Projekte
und Kurse
Dieter Bender Hinter den Kulissen von ArdGate
13. Einführung
Vorstellung
Java Komponenten in RPG
Architektur von ArdGate
AppServer4RPG
Das Gleiberg Projekt
Beispiel im Vergleich
Warum Gleiberg Projekt?
AppServer4RPG
meine Heimat
Open Source
zum Schutz des
Copyrights eines
Freelancers
Ergebnis von
mehr als 10
Jahren Projekte
und Kurse
Dieter Bender Hinter den Kulissen von ArdGate
14. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Java ist ungleich mächtiger als RPG
Java Anwendungen sind Multithreaded
Es gibt viele frei verfügbare Java Komponenten
Open Source Tools, die man für RPG für Geld nicht bekommt.
Programmierer Performace mit OO ungleich größer (bei
vergleichbarer Erfahrung)
Beispiele für Komponenten:
WebServices und XML
Erstellung PDF, HTML and EXCEL
Datenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
15. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Java ist ungleich mächtiger als RPG
Java Anwendungen sind Multithreaded
Es gibt viele frei verfügbare Java Komponenten
Open Source Tools, die man für RPG für Geld nicht bekommt.
Programmierer Performace mit OO ungleich größer (bei
vergleichbarer Erfahrung)
Beispiele für Komponenten:
WebServices und XML
Erstellung PDF, HTML and EXCEL
Datenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
16. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Java ist ungleich mächtiger als RPG
Java Anwendungen sind Multithreaded
Es gibt viele frei verfügbare Java Komponenten
Open Source Tools, die man für RPG für Geld nicht bekommt.
Programmierer Performace mit OO ungleich größer (bei
vergleichbarer Erfahrung)
Beispiele für Komponenten:
WebServices und XML
Erstellung PDF, HTML and EXCEL
Datenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
17. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Java ist ungleich mächtiger als RPG
Java Anwendungen sind Multithreaded
Es gibt viele frei verfügbare Java Komponenten
Open Source Tools, die man für RPG für Geld nicht bekommt.
Programmierer Performace mit OO ungleich größer (bei
vergleichbarer Erfahrung)
Beispiele für Komponenten:
WebServices und XML
Erstellung PDF, HTML and EXCEL
Datenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
18. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Java ist ungleich mächtiger als RPG
Java Anwendungen sind Multithreaded
Es gibt viele frei verfügbare Java Komponenten
Open Source Tools, die man für RPG für Geld nicht bekommt.
Programmierer Performace mit OO ungleich größer (bei
vergleichbarer Erfahrung)
Beispiele für Komponenten:
WebServices und XML
Erstellung PDF, HTML and EXCEL
Datenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
19. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
RPG ruft Java auf
RUNJVA und QSH CMD(java ...)
nur für Java Applikationen
keine Rückgabewerte möglich (außer Errorlevel)
damit kriegt man jeden Rechner platt!
Java stored Procedures
Methoden müssen static sein
skaliert schlecht im embedded SQL
im SQL server Modus (CLI) keien wirksame Kontrolle der JVM
JNI Java native Interface
JNI ist vorgesehen für Implementierung der JVM und der Java
Tools
unlesbare und schlecht wartbare Programme
Fehlerbehandlung und Analyse aufwändig
Dieter Bender Hinter den Kulissen von ArdGate
20. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
RPG ruft Java auf
RUNJVA und QSH CMD(java ...)
nur für Java Applikationen
keine Rückgabewerte möglich (außer Errorlevel)
damit kriegt man jeden Rechner platt!
Java stored Procedures
Methoden müssen static sein
skaliert schlecht im embedded SQL
im SQL server Modus (CLI) keien wirksame Kontrolle der JVM
JNI Java native Interface
JNI ist vorgesehen für Implementierung der JVM und der Java
Tools
unlesbare und schlecht wartbare Programme
Fehlerbehandlung und Analyse aufwändig
Dieter Bender Hinter den Kulissen von ArdGate
21. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
RPG ruft Java auf
RUNJVA und QSH CMD(java ...)
nur für Java Applikationen
keine Rückgabewerte möglich (außer Errorlevel)
damit kriegt man jeden Rechner platt!
Java stored Procedures
Methoden müssen static sein
skaliert schlecht im embedded SQL
im SQL server Modus (CLI) keien wirksame Kontrolle der JVM
JNI Java native Interface
JNI ist vorgesehen für Implementierung der JVM und der Java
Tools
unlesbare und schlecht wartbare Programme
Fehlerbehandlung und Analyse aufwändig
Dieter Bender Hinter den Kulissen von ArdGate
22. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglich
Verwendung normaler Java Komponentem führt zu embedded
Java in RPG
aufwändig zu programmieren, testen und ändern
erste Aufruf ist quälend langsam, zahlreiche JVMs machen
jeden Rechner platt (zur Freude von IBM)
JNI Unterstützung des RPG Compilers ist schlampig
implementiert, abstürzende JVMs nicht kontrollierbar! (keine
abstürzenden JVMs sonst beobachtet!!!)
zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
23. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglich
Verwendung normaler Java Komponentem führt zu embedded
Java in RPG
aufwändig zu programmieren, testen und ändern
erste Aufruf ist quälend langsam, zahlreiche JVMs machen
jeden Rechner platt (zur Freude von IBM)
JNI Unterstützung des RPG Compilers ist schlampig
implementiert, abstürzende JVMs nicht kontrollierbar! (keine
abstürzenden JVMs sonst beobachtet!!!)
zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
24. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglich
Verwendung normaler Java Komponentem führt zu embedded
Java in RPG
aufwändig zu programmieren, testen und ändern
erste Aufruf ist quälend langsam, zahlreiche JVMs machen
jeden Rechner platt (zur Freude von IBM)
JNI Unterstützung des RPG Compilers ist schlampig
implementiert, abstürzende JVMs nicht kontrollierbar! (keine
abstürzenden JVMs sonst beobachtet!!!)
zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
25. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglich
Verwendung normaler Java Komponentem führt zu embedded
Java in RPG
aufwändig zu programmieren, testen und ändern
erste Aufruf ist quälend langsam, zahlreiche JVMs machen
jeden Rechner platt (zur Freude von IBM)
JNI Unterstützung des RPG Compilers ist schlampig
implementiert, abstürzende JVMs nicht kontrollierbar! (keine
abstürzenden JVMs sonst beobachtet!!!)
zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
26. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglich
Verwendung normaler Java Komponentem führt zu embedded
Java in RPG
aufwändig zu programmieren, testen und ändern
erste Aufruf ist quälend langsam, zahlreiche JVMs machen
jeden Rechner platt (zur Freude von IBM)
JNI Unterstützung des RPG Compilers ist schlampig
implementiert, abstürzende JVMs nicht kontrollierbar! (keine
abstürzenden JVMs sonst beobachtet!!!)
zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
27. Einführung
Wofür braucht man das?
Java Komponenten in RPG
Java Aufrufe aus RPG
AppServer4RPG
RPGs Java Unterstützung
Beispiel im Vergleich
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglich
Verwendung normaler Java Komponentem führt zu embedded
Java in RPG
aufwändig zu programmieren, testen und ändern
erste Aufruf ist quälend langsam, zahlreiche JVMs machen
jeden Rechner platt (zur Freude von IBM)
JNI Unterstützung des RPG Compilers ist schlampig
implementiert, abstürzende JVMs nicht kontrollierbar! (keine
abstürzenden JVMs sonst beobachtet!!!)
zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
28. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Architektur Überblick
eine
vorgestartete
JVM arbeitet für
viele RPG
Clients
Kommunikation
asynchron
erweiterbares
EventHandler
Konzept
RPG verwendet
Datenstrukturen
als Parameter
(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
29. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Architektur Überblick
eine
vorgestartete
JVM arbeitet für
viele RPG
Clients
Kommunikation
asynchron
erweiterbares
EventHandler
Konzept
RPG verwendet
Datenstrukturen
als Parameter
(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
30. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Architektur Überblick
eine
vorgestartete
JVM arbeitet für
viele RPG
Clients
Kommunikation
asynchron
erweiterbares
EventHandler
Konzept
RPG verwendet
Datenstrukturen
als Parameter
(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
31. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Architektur Überblick
eine
vorgestartete
JVM arbeitet für
viele RPG
Clients
Kommunikation
asynchron
erweiterbares
EventHandler
Konzept
RPG verwendet
Datenstrukturen
als Parameter
(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
32. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Die RPG Sicht
RPG ruft Java
Methode auf
zu lesen als:
outDS =
ARDPGM(inDS)
Dieter Bender Hinter den Kulissen von ArdGate
33. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Die RPG Sicht
RPG ruft Java
Methode auf
zu lesen als:
outDS =
ARDPGM(inDS)
Dieter Bender Hinter den Kulissen von ArdGate
34. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Die Java Sicht
Action: was soll
aufgerufen
werden?
Was muss ein
EventHandler
können?
Dieter Bender Hinter den Kulissen von ArdGate
35. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Die Java Sicht
Action: was soll
aufgerufen
werden?
Was muss ein
EventHandler
können?
Dieter Bender Hinter den Kulissen von ArdGate
36. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Hybrid Objekte
Plain Old RPG
DataStructure
Plain Old Java
Object
Dieter Bender Hinter den Kulissen von ArdGate
37. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Hybrid Objekte
Plain Old RPG
DataStructure
Plain Old Java
Object
Dieter Bender Hinter den Kulissen von ArdGate
38. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung von
Binärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java Typen
Objekt Variable für die Binärdaten der PORDS ( private byte[]
huddle )
setter und getter für huddle
zeigt zu jeder Zeit die Java und die RPG Sicht derselben Daten
häufig nur eine Richtung implementiert (DS rein Java Felder
raus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
39. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung von
Binärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java Typen
Objekt Variable für die Binärdaten der PORDS ( private byte[]
huddle )
setter und getter für huddle
zeigt zu jeder Zeit die Java und die RPG Sicht derselben Daten
häufig nur eine Richtung implementiert (DS rein Java Felder
raus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
40. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung von
Binärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java Typen
Objekt Variable für die Binärdaten der PORDS ( private byte[]
huddle )
setter und getter für huddle
zeigt zu jeder Zeit die Java und die RPG Sicht derselben Daten
häufig nur eine Richtung implementiert (DS rein Java Felder
raus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
41. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung von
Binärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java Typen
Objekt Variable für die Binärdaten der PORDS ( private byte[]
huddle )
setter und getter für huddle
zeigt zu jeder Zeit die Java und die RPG Sicht derselben Daten
häufig nur eine Richtung implementiert (DS rein Java Felder
raus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
42. Einführung
Architektur von AppServer4RPG
Java Komponenten in RPG
Das EventHandler Interface
AppServer4RPG
Das PORDS2POJO Muster
Beispiel im Vergleich
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung von
Binärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java Typen
Objekt Variable für die Binärdaten der PORDS ( private byte[]
huddle )
setter und getter für huddle
zeigt zu jeder Zeit die Java und die RPG Sicht derselben Daten
häufig nur eine Richtung implementiert (DS rein Java Felder
raus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
43. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML Rechnung
Java macht aus HTML und CSS eine PDF Datei
Java seitig gibt es iText und Flying Saucer
Bedingung: 10.000 Rechnungen in 6 h
erste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bis
mehrere Minuten pro Rechnung!
kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
44. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML Rechnung
Java macht aus HTML und CSS eine PDF Datei
Java seitig gibt es iText und Flying Saucer
Bedingung: 10.000 Rechnungen in 6 h
erste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bis
mehrere Minuten pro Rechnung!
kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
45. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML Rechnung
Java macht aus HTML und CSS eine PDF Datei
Java seitig gibt es iText und Flying Saucer
Bedingung: 10.000 Rechnungen in 6 h
erste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bis
mehrere Minuten pro Rechnung!
kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
46. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML Rechnung
Java macht aus HTML und CSS eine PDF Datei
Java seitig gibt es iText und Flying Saucer
Bedingung: 10.000 Rechnungen in 6 h
erste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bis
mehrere Minuten pro Rechnung!
kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
47. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML Rechnung
Java macht aus HTML und CSS eine PDF Datei
Java seitig gibt es iText und Flying Saucer
Bedingung: 10.000 Rechnungen in 6 h
erste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bis
mehrere Minuten pro Rechnung!
kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
48. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
HTML2PDF4I von Aaron Bartell
Artikel in IBM Systems Magazine
Open Source auf http://mowyourlawn.com
Java Applikation als Aufrufhülse for iText und Flying Saucer
Aufruf aus RPG mit RUNJVA und gebasteltem Classpath
Auf Holgers PUB1 10 sec.
für jeden Aufruf neuer Job und Start einer JVM
langsam, skaliert aber linear (JVM beendet sich)
Dieter Bender Hinter den Kulissen von ArdGate
49. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
HTML2PDF4I von Aaron Bartell
Artikel in IBM Systems Magazine
Open Source auf http://mowyourlawn.com
Java Applikation als Aufrufhülse for iText und Flying Saucer
Aufruf aus RPG mit RUNJVA und gebasteltem Classpath
Auf Holgers PUB1 10 sec.
für jeden Aufruf neuer Job und Start einer JVM
langsam, skaliert aber linear (JVM beendet sich)
Dieter Bender Hinter den Kulissen von ArdGate
50. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
HTML2PDF4I von Aaron Bartell
Artikel in IBM Systems Magazine
Open Source auf http://mowyourlawn.com
Java Applikation als Aufrufhülse for iText und Flying Saucer
Aufruf aus RPG mit RUNJVA und gebasteltem Classpath
Auf Holgers PUB1 10 sec.
für jeden Aufruf neuer Job und Start einer JVM
langsam, skaliert aber linear (JVM beendet sich)
Dieter Bender Hinter den Kulissen von ArdGate
51. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigt
kontrollierter JVM Start zu Beginn des Jobs => Zahl der
JVMs = Zahl der Jobs
Start der JVM direkt vor Verwendung => geht schief, wenn
bereits aktiv mit falschem Classpath
SBMJOB und kontrollierter Start JVM => RUNJVA Variante
mit mehr Programmieraufwand!
Classpath global setzen => kann zu Konflikten mit anderen
Anwendungen führen
Java Extension Mechanismus (extdirs) => noch schlechter:
höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
52. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigt
kontrollierter JVM Start zu Beginn des Jobs => Zahl der
JVMs = Zahl der Jobs
Start der JVM direkt vor Verwendung => geht schief, wenn
bereits aktiv mit falschem Classpath
SBMJOB und kontrollierter Start JVM => RUNJVA Variante
mit mehr Programmieraufwand!
Classpath global setzen => kann zu Konflikten mit anderen
Anwendungen führen
Java Extension Mechanismus (extdirs) => noch schlechter:
höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
53. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigt
kontrollierter JVM Start zu Beginn des Jobs => Zahl der
JVMs = Zahl der Jobs
Start der JVM direkt vor Verwendung => geht schief, wenn
bereits aktiv mit falschem Classpath
SBMJOB und kontrollierter Start JVM => RUNJVA Variante
mit mehr Programmieraufwand!
Classpath global setzen => kann zu Konflikten mit anderen
Anwendungen führen
Java Extension Mechanismus (extdirs) => noch schlechter:
höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
54. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigt
kontrollierter JVM Start zu Beginn des Jobs => Zahl der
JVMs = Zahl der Jobs
Start der JVM direkt vor Verwendung => geht schief, wenn
bereits aktiv mit falschem Classpath
SBMJOB und kontrollierter Start JVM => RUNJVA Variante
mit mehr Programmieraufwand!
Classpath global setzen => kann zu Konflikten mit anderen
Anwendungen führen
Java Extension Mechanismus (extdirs) => noch schlechter:
höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
55. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigt
kontrollierter JVM Start zu Beginn des Jobs => Zahl der
JVMs = Zahl der Jobs
Start der JVM direkt vor Verwendung => geht schief, wenn
bereits aktiv mit falschem Classpath
SBMJOB und kontrollierter Start JVM => RUNJVA Variante
mit mehr Programmieraufwand!
Classpath global setzen => kann zu Konflikten mit anderen
Anwendungen führen
Java Extension Mechanismus (extdirs) => noch schlechter:
höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
56. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Warum ich es dann gelassen habe
zum zweiten: jedes Java Statement führt zu mehreren Zeilen
RPG.
10 Minuten Programmierung Java <=> ein Tag embedded
Java in RPG
zum dritten: Fehelerbehebung mühsam, Fehleranalyse in
Produktion unmöglich!
Keine Möglichkeit für Einsatz von log4j
wahrscheinlich für mehrere Aufrufe schneller als RUNJVA
Skalierbarkeit eher schlechter bis katastrophal (wenn das jeder
nutzt)
Dieter Bender Hinter den Kulissen von ArdGate
57. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Warum ich es dann gelassen habe
zum zweiten: jedes Java Statement führt zu mehreren Zeilen
RPG.
10 Minuten Programmierung Java <=> ein Tag embedded
Java in RPG
zum dritten: Fehelerbehebung mühsam, Fehleranalyse in
Produktion unmöglich!
Keine Möglichkeit für Einsatz von log4j
wahrscheinlich für mehrere Aufrufe schneller als RUNJVA
Skalierbarkeit eher schlechter bis katastrophal (wenn das jeder
nutzt)
Dieter Bender Hinter den Kulissen von ArdGate
58. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Warum ich es dann gelassen habe
zum zweiten: jedes Java Statement führt zu mehreren Zeilen
RPG.
10 Minuten Programmierung Java <=> ein Tag embedded
Java in RPG
zum dritten: Fehelerbehebung mühsam, Fehleranalyse in
Produktion unmöglich!
Keine Möglichkeit für Einsatz von log4j
wahrscheinlich für mehrere Aufrufe schneller als RUNJVA
Skalierbarkeit eher schlechter bis katastrophal (wenn das jeder
nutzt)
Dieter Bender Hinter den Kulissen von ArdGate
59. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Die RPG Sicht
what we want
install
AppServer4RPG
implement the call
Dieter Bender Hinter den Kulissen von ArdGate
60. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Die RPG Sicht
what we want
install
AppServer4RPG
implement the call
Dieter Bender Hinter den Kulissen von ArdGate
61. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Die RPG Sicht
what we want
install
AppServer4RPG
implement the call
Dieter Bender Hinter den Kulissen von ArdGate
62. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Closing the Chain to Java
now we need an
EventHandler to be
called
configure
AppServer4RPG
Dieter Bender Hinter den Kulissen von ArdGate
63. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Closing the Chain to Java
now we need an
EventHandler to be
called
configure
AppServer4RPG
Dieter Bender Hinter den Kulissen von ArdGate
64. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
What Happens Now Calling the RPG Programm?
the RPG part puts its input parameters to the request DS and
calls fireEventP
the RPG part of JVAGATE creates a response DTAQ
sends the data (and an identifier for the caller Job) in
packages to the JAVAQ
listens on the responseQ for the answer
Now the Java part of AppServer4RPG does its work (hopefully
it was started)
starts a new worker Thread to be ready for the next request
creates a Handler for the requested Event,
creates Request and Response Objects and calls the
performWork of the Handler
sends the response Data back in packages to the ResponseQ.
known by the identifier passed with the request
Dieter Bender Hinter den Kulissen von ArdGate
65. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
What Happens Now Calling the RPG Programm?
the RPG part puts its input parameters to the request DS and
calls fireEventP
the RPG part of JVAGATE creates a response DTAQ
sends the data (and an identifier for the caller Job) in
packages to the JAVAQ
listens on the responseQ for the answer
Now the Java part of AppServer4RPG does its work (hopefully
it was started)
starts a new worker Thread to be ready for the next request
creates a Handler for the requested Event,
creates Request and Response Objects and calls the
performWork of the Handler
sends the response Data back in packages to the ResponseQ.
known by the identifier passed with the request
Dieter Bender Hinter den Kulissen von ArdGate
66. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
What Happens Now Calling the RPG Programm?
the RPG part puts its input parameters to the request DS and
calls fireEventP
the RPG part of JVAGATE creates a response DTAQ
sends the data (and an identifier for the caller Job) in
packages to the JAVAQ
listens on the responseQ for the answer
Now the Java part of AppServer4RPG does its work (hopefully
it was started)
starts a new worker Thread to be ready for the next request
creates a Handler for the requested Event,
creates Request and Response Objects and calls the
performWork of the Handler
sends the response Data back in packages to the ResponseQ.
known by the identifier passed with the request
Dieter Bender Hinter den Kulissen von ArdGate
67. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The EventHandler
gets a Request
a simple
PORDS2POJO
binary is set with
Constructor
getter for properties
the EventHandler
Dieter Bender Hinter den Kulissen von ArdGate
68. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The EventHandler
gets a Request
a simple
PORDS2POJO
binary is set with
Constructor
getter for properties
the EventHandler
Dieter Bender Hinter den Kulissen von ArdGate
69. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The EventHandler
gets a Request
a simple
PORDS2POJO
binary is set with
Constructor
getter for properties
the EventHandler
Dieter Bender Hinter den Kulissen von ArdGate
70. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The Results
Transaction Times of subseconds
first call in a Job as fast as following (JVM is prestarted)
very scalable (one JVM serves multiple RPG Jobs)
no Classpath issues, simply throw the needed jar files to the lib
directory of AppServer4RPG
multiple instances of AppServer4RPG could run on the same
box with diffrent JVM settings
AppServer4RPG could be installed on a dedicated server
less programming effort than embedded Java in RPG
flexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
71. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The Results
Transaction Times of subseconds
first call in a Job as fast as following (JVM is prestarted)
very scalable (one JVM serves multiple RPG Jobs)
no Classpath issues, simply throw the needed jar files to the lib
directory of AppServer4RPG
multiple instances of AppServer4RPG could run on the same
box with diffrent JVM settings
AppServer4RPG could be installed on a dedicated server
less programming effort than embedded Java in RPG
flexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
72. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The Results
Transaction Times of subseconds
first call in a Job as fast as following (JVM is prestarted)
very scalable (one JVM serves multiple RPG Jobs)
no Classpath issues, simply throw the needed jar files to the lib
directory of AppServer4RPG
multiple instances of AppServer4RPG could run on the same
box with diffrent JVM settings
AppServer4RPG could be installed on a dedicated server
less programming effort than embedded Java in RPG
flexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
73. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The Results
Transaction Times of subseconds
first call in a Job as fast as following (JVM is prestarted)
very scalable (one JVM serves multiple RPG Jobs)
no Classpath issues, simply throw the needed jar files to the lib
directory of AppServer4RPG
multiple instances of AppServer4RPG could run on the same
box with diffrent JVM settings
AppServer4RPG could be installed on a dedicated server
less programming effort than embedded Java in RPG
flexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
74. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The Results
Transaction Times of subseconds
first call in a Job as fast as following (JVM is prestarted)
very scalable (one JVM serves multiple RPG Jobs)
no Classpath issues, simply throw the needed jar files to the lib
directory of AppServer4RPG
multiple instances of AppServer4RPG could run on the same
box with diffrent JVM settings
AppServer4RPG could be installed on a dedicated server
less programming effort than embedded Java in RPG
flexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
75. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
The Results
Transaction Times of subseconds
first call in a Job as fast as following (JVM is prestarted)
very scalable (one JVM serves multiple RPG Jobs)
no Classpath issues, simply throw the needed jar files to the lib
directory of AppServer4RPG
multiple instances of AppServer4RPG could run on the same
box with diffrent JVM settings
AppServer4RPG could be installed on a dedicated server
less programming effort than embedded Java in RPG
flexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
76. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Summary
Don’t try to write Java code in RPG, provide Java methods
with Datastructure parameter interfaces for RPG usage!
Let your Java Code run in a prestarted resident JVM,
communicating asynchronous with your native programms.
Outlook (Nice to have!)
Dynamic PORDS2POJO Beans.
True Tomcat Version of AppServer4RPG.
Dieter Bender Hinter den Kulissen von ArdGate
77. Einführung Generierung PDF aus HTML
Java Komponenten in RPG Die RUNJVA Variante
AppServer4RPG embedded Java in RPG
Beispiel im Vergleich Die Gleiberg Version
Questions?
Dieter Bender Hinter den Kulissen von ArdGate