App server4rp gd - German

77
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

description

COMMON Europe Congress 2012 - Vienna

Transcript of App server4rp gd - German

Page 1: App server4rp gd - German

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

Page 2: App server4rp gd - German

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

Page 3: App server4rp gd - German

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

Page 4: App server4rp gd - German

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

Page 5: App server4rp gd - German

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

Page 6: App server4rp gd - German

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

Page 7: App server4rp gd - German

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

Page 8: App server4rp gd - German

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

Page 9: App server4rp gd - German

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

Page 10: App server4rp gd - German

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

Page 11: App server4rp gd - German

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

Page 12: App server4rp gd - German

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

Page 13: App server4rp gd - German

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

Page 14: App server4rp gd - German

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

Page 15: App server4rp gd - German

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

Page 16: App server4rp gd - German

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

Page 17: App server4rp gd - German

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

Page 18: App server4rp gd - German

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

Page 19: App server4rp gd - German

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

Page 20: App server4rp gd - German

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

Page 21: App server4rp gd - German

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

Page 22: App server4rp gd - German

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

Page 23: App server4rp gd - German

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

Page 24: App server4rp gd - German

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

Page 25: App server4rp gd - German

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

Page 26: App server4rp gd - German

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

Page 27: App server4rp gd - German

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

Page 28: App server4rp gd - German

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

Page 29: App server4rp gd - German

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

Page 30: App server4rp gd - German

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

Page 31: App server4rp gd - German

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

Page 32: App server4rp gd - German

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

Page 33: App server4rp gd - German

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

Page 34: App server4rp gd - German

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

Page 35: App server4rp gd - German

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

Page 36: App server4rp gd - German

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

Page 37: App server4rp gd - German

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

Page 38: App server4rp gd - German

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

Page 39: App server4rp gd - German

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

Page 40: App server4rp gd - German

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

Page 41: App server4rp gd - German

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

Page 42: App server4rp gd - German

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

Page 43: App server4rp gd - German

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

Page 44: App server4rp gd - German

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

Page 45: App server4rp gd - German

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

Page 46: App server4rp gd - German

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

Page 47: App server4rp gd - German

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

Page 48: App server4rp gd - German

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

Page 49: App server4rp gd - German

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

Page 50: App server4rp gd - German

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

Page 51: App server4rp gd - German

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

Page 52: App server4rp gd - German

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

Page 53: App server4rp gd - German

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

Page 54: App server4rp gd - German

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

Page 55: App server4rp gd - German

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

Page 56: App server4rp gd - German

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

Page 57: App server4rp gd - German

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

Page 58: App server4rp gd - German

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

Page 59: App server4rp gd - German

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

Page 60: App server4rp gd - German

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

Page 61: App server4rp gd - German

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

Page 62: App server4rp gd - German

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

Page 63: App server4rp gd - German

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

Page 64: App server4rp gd - German

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

Page 65: App server4rp gd - German

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

Page 66: App server4rp gd - German

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

Page 67: App server4rp gd - German

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

Page 68: App server4rp gd - German

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

Page 69: App server4rp gd - German

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

Page 70: App server4rp gd - German

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

Page 71: App server4rp gd - German

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

Page 72: App server4rp gd - German

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

Page 73: App server4rp gd - German

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

Page 74: App server4rp gd - German

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

Page 75: App server4rp gd - German

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

Page 76: App server4rp gd - German

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

Page 77: App server4rp gd - German

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