EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Hinter den Kulissen von ArdGateeffiziente Aufrufevon Java aus RPG
Dieter Bender
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
Vorstellung
WWW.BENDER-DV.DE - [email protected] Bender, D35435 WettenbergAS/400* Freelancer
Java, SQL, ILE RPG, COBOLAnwendungs-Design, Datenbanken
Kurse: Java, SQL, ILE RPGOpen Source Komponenten
ArdGate: SQL Zugriffe von AS400 auf alle DatenbankenAppServer4RPG: schnelle, skalierbare Zugriffe aus RPG aufJavaeinige RPG Komponenten
*) AS/400 := AS/400 und alle kompatiblen Systeme
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
ArdGate im Überblick
*ARDPGMzwingend nativeJDBC zwingendJavasehr wenig RPG(blau)viel Java (rot)viele calls vonJava aus RPGviele BenutzerUmgebungunbekannt
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
ArdGate im Überblick
*ARDPGMzwingend nativeJDBC zwingendJavasehr wenig RPG(blau)viel Java (rot)viele calls vonJava aus RPGviele BenutzerUmgebungunbekannt
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
ArdGate im Überblick
*ARDPGMzwingend nativeJDBC zwingendJavasehr wenig RPG(blau)viel Java (rot)viele calls vonJava aus RPGviele BenutzerUmgebungunbekannt
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
ArdGate im Überblick
*ARDPGMzwingend nativeJDBC zwingendJavasehr wenig RPG(blau)viel Java (rot)viele calls vonJava aus RPGviele BenutzerUmgebungunbekannt
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
ArdGate im Überblick
*ARDPGMzwingend nativeJDBC zwingendJavasehr wenig RPG(blau)viel Java (rot)viele calls vonJava aus RPGviele BenutzerUmgebungunbekannt
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
ArdGate im Überblick
*ARDPGMzwingend nativeJDBC zwingendJavasehr wenig RPG(blau)viel Java (rot)viele calls vonJava aus RPGviele BenutzerUmgebungunbekannt
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
ArdGate im Überblick
*ARDPGMzwingend nativeJDBC zwingendJavasehr wenig RPG(blau)viel Java (rot)viele calls vonJava aus RPGviele BenutzerUmgebungunbekannt
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
Warum Gleiberg Projekt?
AppServer4RPGmeine HeimatOpen Sourcezum Schutz desCopyrights einesFreelancersErgebnis vonmehr als 10Jahren Projekteund Kurse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
Warum Gleiberg Projekt?
AppServer4RPGmeine HeimatOpen Sourcezum Schutz desCopyrights einesFreelancersErgebnis vonmehr als 10Jahren Projekteund Kurse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
Warum Gleiberg Projekt?
AppServer4RPGmeine HeimatOpen Sourcezum Schutz desCopyrights einesFreelancersErgebnis vonmehr als 10Jahren Projekteund Kurse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
VorstellungArchitektur von ArdGateDas Gleiberg Projekt
Warum Gleiberg Projekt?
AppServer4RPGmeine HeimatOpen Sourcezum Schutz desCopyrights einesFreelancersErgebnis vonmehr als 10Jahren Projekteund Kurse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Java ist ungleich mächtiger als RPG
Java Anwendungen sind MultithreadedEs gibt viele frei verfügbare Java KomponentenOpen Source Tools, die man für RPG für Geld nicht bekommt.Programmierer Performace mit OO ungleich größer (beivergleichbarer Erfahrung)Beispiele für Komponenten:
WebServices und XMLErstellung PDF, HTML and EXCELDatenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Java ist ungleich mächtiger als RPG
Java Anwendungen sind MultithreadedEs gibt viele frei verfügbare Java KomponentenOpen Source Tools, die man für RPG für Geld nicht bekommt.Programmierer Performace mit OO ungleich größer (beivergleichbarer Erfahrung)Beispiele für Komponenten:
WebServices und XMLErstellung PDF, HTML and EXCELDatenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Java ist ungleich mächtiger als RPG
Java Anwendungen sind MultithreadedEs gibt viele frei verfügbare Java KomponentenOpen Source Tools, die man für RPG für Geld nicht bekommt.Programmierer Performace mit OO ungleich größer (beivergleichbarer Erfahrung)Beispiele für Komponenten:
WebServices und XMLErstellung PDF, HTML and EXCELDatenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Java ist ungleich mächtiger als RPG
Java Anwendungen sind MultithreadedEs gibt viele frei verfügbare Java KomponentenOpen Source Tools, die man für RPG für Geld nicht bekommt.Programmierer Performace mit OO ungleich größer (beivergleichbarer Erfahrung)Beispiele für Komponenten:
WebServices und XMLErstellung PDF, HTML and EXCELDatenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Java ist ungleich mächtiger als RPG
Java Anwendungen sind MultithreadedEs gibt viele frei verfügbare Java KomponentenOpen Source Tools, die man für RPG für Geld nicht bekommt.Programmierer Performace mit OO ungleich größer (beivergleichbarer Erfahrung)Beispiele für Komponenten:
WebServices und XMLErstellung PDF, HTML and EXCELDatenbankzugriffe mit JDBC
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
RPG ruft Java auf
RUNJVA und QSH CMD(java ...)nur für Java Applikationenkeine Rückgabewerte möglich (außer Errorlevel)damit kriegt man jeden Rechner platt!
Java stored ProceduresMethoden müssen static seinskaliert schlecht im embedded SQLim SQL server Modus (CLI) keien wirksame Kontrolle der JVM
JNI Java native InterfaceJNI ist vorgesehen für Implementierung der JVM und der JavaToolsunlesbare und schlecht wartbare ProgrammeFehlerbehandlung und Analyse aufwändig
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
RPG ruft Java auf
RUNJVA und QSH CMD(java ...)nur für Java Applikationenkeine Rückgabewerte möglich (außer Errorlevel)damit kriegt man jeden Rechner platt!
Java stored ProceduresMethoden müssen static seinskaliert schlecht im embedded SQLim SQL server Modus (CLI) keien wirksame Kontrolle der JVM
JNI Java native InterfaceJNI ist vorgesehen für Implementierung der JVM und der JavaToolsunlesbare und schlecht wartbare ProgrammeFehlerbehandlung und Analyse aufwändig
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
RPG ruft Java auf
RUNJVA und QSH CMD(java ...)nur für Java Applikationenkeine Rückgabewerte möglich (außer Errorlevel)damit kriegt man jeden Rechner platt!
Java stored ProceduresMethoden müssen static seinskaliert schlecht im embedded SQLim SQL server Modus (CLI) keien wirksame Kontrolle der JVM
JNI Java native InterfaceJNI ist vorgesehen für Implementierung der JVM und der JavaToolsunlesbare und schlecht wartbare ProgrammeFehlerbehandlung und Analyse aufwändig
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglichVerwendung normaler Java Komponentem führt zu embeddedJava in RPGaufwändig zu programmieren, testen und ändernerste Aufruf ist quälend langsam, zahlreiche JVMs machenjeden Rechner platt (zur Freude von IBM)JNI Unterstützung des RPG Compilers ist schlampigimplementiert, abstürzende JVMs nicht kontrollierbar! (keineabstürzenden JVMs sonst beobachtet!!!)zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglichVerwendung normaler Java Komponentem führt zu embeddedJava in RPGaufwändig zu programmieren, testen und ändernerste Aufruf ist quälend langsam, zahlreiche JVMs machenjeden Rechner platt (zur Freude von IBM)JNI Unterstützung des RPG Compilers ist schlampigimplementiert, abstürzende JVMs nicht kontrollierbar! (keineabstürzenden JVMs sonst beobachtet!!!)zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglichVerwendung normaler Java Komponentem führt zu embeddedJava in RPGaufwändig zu programmieren, testen und ändernerste Aufruf ist quälend langsam, zahlreiche JVMs machenjeden Rechner platt (zur Freude von IBM)JNI Unterstützung des RPG Compilers ist schlampigimplementiert, abstürzende JVMs nicht kontrollierbar! (keineabstürzenden JVMs sonst beobachtet!!!)zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglichVerwendung normaler Java Komponentem führt zu embeddedJava in RPGaufwändig zu programmieren, testen und ändernerste Aufruf ist quälend langsam, zahlreiche JVMs machenjeden Rechner platt (zur Freude von IBM)JNI Unterstützung des RPG Compilers ist schlampigimplementiert, abstürzende JVMs nicht kontrollierbar! (keineabstürzenden JVMs sonst beobachtet!!!)zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglichVerwendung normaler Java Komponentem führt zu embeddedJava in RPGaufwändig zu programmieren, testen und ändernerste Aufruf ist quälend langsam, zahlreiche JVMs machenjeden Rechner platt (zur Freude von IBM)JNI Unterstützung des RPG Compilers ist schlampigimplementiert, abstürzende JVMs nicht kontrollierbar! (keineabstürzenden JVMs sonst beobachtet!!!)zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Wofür braucht man das?Java Aufrufe aus RPGRPGs Java Unterstützung
Warum ich kein embedded Java in RPG mag
Kontrolle der implizit gestarteten JVM nahezu unmöglichVerwendung normaler Java Komponentem führt zu embeddedJava in RPGaufwändig zu programmieren, testen und ändernerste Aufruf ist quälend langsam, zahlreiche JVMs machenjeden Rechner platt (zur Freude von IBM)JNI Unterstützung des RPG Compilers ist schlampigimplementiert, abstürzende JVMs nicht kontrollierbar! (keineabstürzenden JVMs sonst beobachtet!!!)zu viel Aufwand für klägliche Ergebnisse
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Architektur Überblick
einevorgestarteteJVM arbeitet fürviele RPGClientsKommunikationasynchronerweiterbaresEventHandlerKonzeptRPG verwendetDatenstrukturenals Parameter(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Architektur Überblick
einevorgestarteteJVM arbeitet fürviele RPGClientsKommunikationasynchronerweiterbaresEventHandlerKonzeptRPG verwendetDatenstrukturenals Parameter(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Architektur Überblick
einevorgestarteteJVM arbeitet fürviele RPGClientsKommunikationasynchronerweiterbaresEventHandlerKonzeptRPG verwendetDatenstrukturenals Parameter(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Architektur Überblick
einevorgestarteteJVM arbeitet fürviele RPGClientsKommunikationasynchronerweiterbaresEventHandlerKonzeptRPG verwendetDatenstrukturenals Parameter(Java übersetzt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Die RPG Sicht
RPG ruft JavaMethode aufzu lesen als:outDS =ARDPGM(inDS)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Die RPG Sicht
RPG ruft JavaMethode aufzu lesen als:outDS =ARDPGM(inDS)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Die Java Sicht
Action: was sollaufgerufenwerden?Was muss einEventHandlerkönnen?
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Die Java Sicht
Action: was sollaufgerufenwerden?Was muss einEventHandlerkönnen?
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Hybrid Objekte
Plain Old RPGDataStructurePlain Old JavaObject
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Hybrid Objekte
Plain Old RPGDataStructurePlain Old JavaObject
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung vonBinärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java TypenObjekt Variable für die Binärdaten der PORDS ( private byte[]huddle )setter und getter für huddlezeigt zu jeder Zeit die Java und die RPG Sicht derselben Datenhäufig nur eine Richtung implementiert (DS rein Java Felderraus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung vonBinärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java TypenObjekt Variable für die Binärdaten der PORDS ( private byte[]huddle )setter und getter für huddlezeigt zu jeder Zeit die Java und die RPG Sicht derselben Datenhäufig nur eine Richtung implementiert (DS rein Java Felderraus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung vonBinärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java TypenObjekt Variable für die Binärdaten der PORDS ( private byte[]huddle )setter und getter für huddlezeigt zu jeder Zeit die Java und die RPG Sicht derselben Datenhäufig nur eine Richtung implementiert (DS rein Java Felderraus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung vonBinärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java TypenObjekt Variable für die Binärdaten der PORDS ( private byte[]huddle )setter und getter für huddlezeigt zu jeder Zeit die Java und die RPG Sicht derselben Datenhäufig nur eine Richtung implementiert (DS rein Java Felderraus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Architektur von AppServer4RPGDas EventHandler InterfaceDas PORDS2POJO Muster
Doppelgesichtige Objekte als Dolmetscher
PORDS2POJO:= ein Java Objekt, das die Übersetzung vonBinärdaten (DS) in eine Java Bean kapselt.
POJO mit allen Komponenten einer PORDS als Java TypenObjekt Variable für die Binärdaten der PORDS ( private byte[]huddle )setter und getter für huddlezeigt zu jeder Zeit die Java und die RPG Sicht derselben Datenhäufig nur eine Richtung implementiert (DS rein Java Felderraus oder umgekehrt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML RechnungJava macht aus HTML und CSS eine PDF DateiJava seitig gibt es iText und Flying SaucerBedingung: 10.000 Rechnungen in 6 herste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bismehrere Minuten pro Rechnung!kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML RechnungJava macht aus HTML und CSS eine PDF DateiJava seitig gibt es iText und Flying SaucerBedingung: 10.000 Rechnungen in 6 herste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bismehrere Minuten pro Rechnung!kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML RechnungJava macht aus HTML und CSS eine PDF DateiJava seitig gibt es iText und Flying SaucerBedingung: 10.000 Rechnungen in 6 herste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bismehrere Minuten pro Rechnung!kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML RechnungJava macht aus HTML und CSS eine PDF DateiJava seitig gibt es iText und Flying SaucerBedingung: 10.000 Rechnungen in 6 herste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bismehrere Minuten pro Rechnung!kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Aus dem richtigen Leben gegriffen
Die Anforderung: RPG Applikation generiert HTML RechnungJava macht aus HTML und CSS eine PDF DateiJava seitig gibt es iText und Flying SaucerBedingung: 10.000 Rechnungen in 6 herste Versuche (Kunde) mit HTML2PDF4I: 30 sec. bismehrere Minuten pro Rechnung!kurze Gegenprüfung von mir mit Wintel: Sekundenbruchteile!
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
HTML2PDF4I von Aaron Bartell
Artikel in IBM Systems MagazineOpen Source auf http://mowyourlawn.comJava Applikation als Aufrufhülse for iText und Flying SaucerAufruf aus RPG mit RUNJVA und gebasteltem ClasspathAuf Holgers PUB1 10 sec.
für jeden Aufruf neuer Job und Start einer JVMlangsam, skaliert aber linear (JVM beendet sich)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
HTML2PDF4I von Aaron Bartell
Artikel in IBM Systems MagazineOpen Source auf http://mowyourlawn.comJava Applikation als Aufrufhülse for iText und Flying SaucerAufruf aus RPG mit RUNJVA und gebasteltem ClasspathAuf Holgers PUB1 10 sec.
für jeden Aufruf neuer Job und Start einer JVMlangsam, skaliert aber linear (JVM beendet sich)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
HTML2PDF4I von Aaron Bartell
Artikel in IBM Systems MagazineOpen Source auf http://mowyourlawn.comJava Applikation als Aufrufhülse for iText und Flying SaucerAufruf aus RPG mit RUNJVA und gebasteltem ClasspathAuf Holgers PUB1 10 sec.
für jeden Aufruf neuer Job und Start einer JVMlangsam, skaliert aber linear (JVM beendet sich)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigtkontrollierter JVM Start zu Beginn des Jobs => Zahl derJVMs = Zahl der JobsStart der JVM direkt vor Verwendung => geht schief, wennbereits aktiv mit falschem ClasspathSBMJOB und kontrollierter Start JVM => RUNJVA Variantemit mehr Programmieraufwand!Classpath global setzen => kann zu Konflikten mit anderenAnwendungen führenJava Extension Mechanismus (extdirs) => noch schlechter:höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigtkontrollierter JVM Start zu Beginn des Jobs => Zahl derJVMs = Zahl der JobsStart der JVM direkt vor Verwendung => geht schief, wennbereits aktiv mit falschem ClasspathSBMJOB und kontrollierter Start JVM => RUNJVA Variantemit mehr Programmieraufwand!Classpath global setzen => kann zu Konflikten mit anderenAnwendungen führenJava Extension Mechanismus (extdirs) => noch schlechter:höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigtkontrollierter JVM Start zu Beginn des Jobs => Zahl derJVMs = Zahl der JobsStart der JVM direkt vor Verwendung => geht schief, wennbereits aktiv mit falschem ClasspathSBMJOB und kontrollierter Start JVM => RUNJVA Variantemit mehr Programmieraufwand!Classpath global setzen => kann zu Konflikten mit anderenAnwendungen führenJava Extension Mechanismus (extdirs) => noch schlechter:höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigtkontrollierter JVM Start zu Beginn des Jobs => Zahl derJVMs = Zahl der JobsStart der JVM direkt vor Verwendung => geht schief, wennbereits aktiv mit falschem ClasspathSBMJOB und kontrollierter Start JVM => RUNJVA Variantemit mehr Programmieraufwand!Classpath global setzen => kann zu Konflikten mit anderenAnwendungen führenJava Extension Mechanismus (extdirs) => noch schlechter:höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Das Classpath Problem
zum ersten: es werden 3 jar files im Classpath benötigtkontrollierter JVM Start zu Beginn des Jobs => Zahl derJVMs = Zahl der JobsStart der JVM direkt vor Verwendung => geht schief, wennbereits aktiv mit falschem ClasspathSBMJOB und kontrollierter Start JVM => RUNJVA Variantemit mehr Programmieraufwand!Classpath global setzen => kann zu Konflikten mit anderenAnwendungen führenJava Extension Mechanismus (extdirs) => noch schlechter:höhere Priorität als Classpath
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Warum ich es dann gelassen habe
zum zweiten: jedes Java Statement führt zu mehreren ZeilenRPG.
10 Minuten Programmierung Java <=> ein Tag embeddedJava in RPG
zum dritten: Fehelerbehebung mühsam, Fehleranalyse inProduktion unmöglich!
Keine Möglichkeit für Einsatz von log4j
wahrscheinlich für mehrere Aufrufe schneller als RUNJVASkalierbarkeit eher schlechter bis katastrophal (wenn das jedernutzt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Warum ich es dann gelassen habe
zum zweiten: jedes Java Statement führt zu mehreren ZeilenRPG.
10 Minuten Programmierung Java <=> ein Tag embeddedJava in RPG
zum dritten: Fehelerbehebung mühsam, Fehleranalyse inProduktion unmöglich!
Keine Möglichkeit für Einsatz von log4j
wahrscheinlich für mehrere Aufrufe schneller als RUNJVASkalierbarkeit eher schlechter bis katastrophal (wenn das jedernutzt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Warum ich es dann gelassen habe
zum zweiten: jedes Java Statement führt zu mehreren ZeilenRPG.
10 Minuten Programmierung Java <=> ein Tag embeddedJava in RPG
zum dritten: Fehelerbehebung mühsam, Fehleranalyse inProduktion unmöglich!
Keine Möglichkeit für Einsatz von log4j
wahrscheinlich für mehrere Aufrufe schneller als RUNJVASkalierbarkeit eher schlechter bis katastrophal (wenn das jedernutzt)
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Die RPG Sicht
what we wantinstallAppServer4RPGimplement the call
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Die RPG Sicht
what we wantinstallAppServer4RPGimplement the call
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Die RPG Sicht
what we wantinstallAppServer4RPGimplement the call
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Closing the Chain to Java
now we need anEventHandler to becalledconfigureAppServer4RPG
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Closing the Chain to Java
now we need anEventHandler to becalledconfigureAppServer4RPG
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
What Happens Now Calling the RPG Programm?
the RPG part puts its input parameters to the request DS andcalls fireEventPthe RPG part of JVAGATE creates a response DTAQsends the data (and an identifier for the caller Job) inpackages to the JAVAQlistens on the responseQ for the answerNow the Java part of AppServer4RPG does its work (hopefullyit was started)
starts a new worker Thread to be ready for the next requestcreates a Handler for the requested Event,creates Request and Response Objects and calls theperformWork of the Handlersends the response Data back in packages to the ResponseQ.known by the identifier passed with the request
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
What Happens Now Calling the RPG Programm?
the RPG part puts its input parameters to the request DS andcalls fireEventPthe RPG part of JVAGATE creates a response DTAQsends the data (and an identifier for the caller Job) inpackages to the JAVAQlistens on the responseQ for the answerNow the Java part of AppServer4RPG does its work (hopefullyit was started)
starts a new worker Thread to be ready for the next requestcreates a Handler for the requested Event,creates Request and Response Objects and calls theperformWork of the Handlersends the response Data back in packages to the ResponseQ.known by the identifier passed with the request
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
What Happens Now Calling the RPG Programm?
the RPG part puts its input parameters to the request DS andcalls fireEventPthe RPG part of JVAGATE creates a response DTAQsends the data (and an identifier for the caller Job) inpackages to the JAVAQlistens on the responseQ for the answerNow the Java part of AppServer4RPG does its work (hopefullyit was started)
starts a new worker Thread to be ready for the next requestcreates a Handler for the requested Event,creates Request and Response Objects and calls theperformWork of the Handlersends the response Data back in packages to the ResponseQ.known by the identifier passed with the request
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The EventHandler
gets a Requesta simplePORDS2POJObinary is set withConstructorgetter for propertiesthe EventHandler
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The EventHandler
gets a Requesta simplePORDS2POJObinary is set withConstructorgetter for propertiesthe EventHandler
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The EventHandler
gets a Requesta simplePORDS2POJObinary is set withConstructorgetter for propertiesthe EventHandler
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The Results
Transaction Times of subsecondsfirst 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 libdirectory of AppServer4RPGmultiple instances of AppServer4RPG could run on the samebox with diffrent JVM settingsAppServer4RPG could be installed on a dedicated serverless programming effort than embedded Java in RPGflexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The Results
Transaction Times of subsecondsfirst 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 libdirectory of AppServer4RPGmultiple instances of AppServer4RPG could run on the samebox with diffrent JVM settingsAppServer4RPG could be installed on a dedicated serverless programming effort than embedded Java in RPGflexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The Results
Transaction Times of subsecondsfirst 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 libdirectory of AppServer4RPGmultiple instances of AppServer4RPG could run on the samebox with diffrent JVM settingsAppServer4RPG could be installed on a dedicated serverless programming effort than embedded Java in RPGflexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The Results
Transaction Times of subsecondsfirst 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 libdirectory of AppServer4RPGmultiple instances of AppServer4RPG could run on the samebox with diffrent JVM settingsAppServer4RPG could be installed on a dedicated serverless programming effort than embedded Java in RPGflexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The Results
Transaction Times of subsecondsfirst 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 libdirectory of AppServer4RPGmultiple instances of AppServer4RPG could run on the samebox with diffrent JVM settingsAppServer4RPG could be installed on a dedicated serverless programming effort than embedded Java in RPGflexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
The Results
Transaction Times of subsecondsfirst 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 libdirectory of AppServer4RPGmultiple instances of AppServer4RPG could run on the samebox with diffrent JVM settingsAppServer4RPG could be installed on a dedicated serverless programming effort than embedded Java in RPGflexible logging with log4j simplifies trouble shooting
Dieter Bender Hinter den Kulissen von ArdGate
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Summary
Don’t try to write Java code in RPG, provide Java methodswith 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
EinführungJava Komponenten in RPG
AppServer4RPGBeispiel im Vergleich
Generierung PDF aus HTMLDie RUNJVA Varianteembedded Java in RPGDie Gleiberg Version
Questions?
Dieter Bender Hinter den Kulissen von ArdGate
Top Related