SlideShare uma empresa Scribd logo
1 de 21
Programmi Java e server AS400 (IBM i)

Franco Lombardo
lombardo@molteniinformatica.com
Molteni Informatica - Lecco

1
IBM Developer Kit for Java
Driver JDBC locale
Classe com.ibm.db2.jdbc.app.DB2Driver
 URL jdbc:db2://NomeDB dove NomeDB è
una voce di WRKRDBDIRE (posso utilizzare
jdbc:db2://*local




/QIBM/ProdData/OS400/Java400/ext/db2_classes.jar



Si aggancia ad un lavoro server di preavvio
nnnnn/QUSER/QSQSRV


Lavora per conto del profilo utente di logon, ma
non assume la JOBD legata a tale profilo, e non
richiama neppure eventuali programmi iniziali:
attenzione alla lista librerie! (Mantenuta libreria
corrente)
2
IBM Toolbox for Java
Libreria 100% pure Java per accedere a risorse
AS400
 Utilizzabile sia su client, sia su AS400
 Contiene (tra le altre cose)







Driver JDBC
Classi per richiamo programmi, accesso a code
dati, profili utente, stampe, messaggi, job, aree
dati, IFS, valori di sistema, stato del sistema...
Classi di utilità (es. table model Swing bufferizzato
“MS Access”-like, JarMaker per estrarre
sottoinsiemi di classi da un Jar)
3
IBM Toolbox for Java
Dove trovarlo


Installato su AS400 come programma su licenza
(gratuito) nell’IFS




/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar

Installato a richiesta con Client Access (i-Series
Access)


C:ProgrammiIBMClient Accessjt400libjt400.jar

Scaricabile gratuitamente da internet nella sua
versione open-source (JTOpen). E’ sempre la
versione più aggiornata, che consiglio di usare.
 Sul server AS400 richiede l’installazione e
l’avvio degli Host Servers


4
IBM Toolbox for Java
JDBC
Driver di tipo 4
 Classe com.ibm.as400.access.AS400JDBCDriver
 URL jdbc:as400://nomeOIpAs[/libreria]


[;listaProprietà]


Si appoggia allo stesso demone di sistema
utilizzato da ODBC: QZDASRVSD




Avviato con STRHOSTSVR *DATABASE
In ascolto su porta TCP 8471
Associa ad ogni client un lavoro di preavvio


nnnnnn/QUSER/QZDASOINIT

5
IBM Toolbox for Java
JDBC: QZDASOINIT


E’ utile abbassare la priorità di default di tale
lavoro e regolare il numero di lavori avviati
automaticamente




CRTCLS CLS(ODBC) RUNPTY(25)
TIMESLICE(3000)
CHGPJE SBSD(QUSRWRK) PGM(QZDASOINIT)
INLJOBS(20) THRESHOLD(15) ADLJOBS(5)
CLS(ODBC)




Esempio per avviare automaticamente 20 lavori,
aggiungerne automaticamente 5 quando ne sono in
esecuzione meno di 15 ed avviarli a priorità 25 (più
veloci dei batch e più lenti degli interattivi)
Su V4Rx il sottosistema è QSERVER6
IBM Toolbox for Java
JDBC: properties


Impostabili anche nell’URL, per esempio:

jdbc:as400://myAS;trace=true;user=pino;password=x;


Vediamone alcune




transaction isolation gestione transazioni.
Se i file non sono sotto giornale, occorre
impostare il valore none, che non è il default!
server trace gestione log su AS400.




Valore 4: avvia STRDBG per QZDASOINIT, che
registra anche suggerimenti per costruzione indici.
Valore 8: salva JOBLOG per QZDASOINIT.

7
IBM Toolbox for Java
JDBC: properties


trace gestione ordinamento/ricerche.






Valore true: stampa sullo standard output del client
la registrazione dettagliate di tutte le chiamate JDBC.
Forte scadimento delle prestazioni: solo per debug.

sort gestione ordinamento/ricerche.






Valore language: effettua ricerche/ordinamenti in
base alla lingua specificata nella proprietà sort
language (per noi ITA).
Impostando tale valore è possibile effettuare ricerche
non case-sensitive (sul modello MS SQLServer).
Possibile scadimento delle prestazioni.

8
IBM Toolbox for Java
JDBC: Exit programs


E’ possibile eseguire un programma su AS400


Al collegamento di ogni client




Punto di uscita QIBM_QZDA_INIT

Prima dell’esecuzione di ogni statement SQL


Punto di uscita QIBM_QZDA_SQL1

Tali programmi ricevono in ingresso i dati della
richiesta (profilo utente, statement SQL...) e
restituiscono un flag che indica se accettarla.
 Gestiti con il comando WRKREGINF


9
IBM Toolbox for Java
JDBC: Exit programs

/*
/*

/*
/*
/*



Un esempio CL per il controllo del collegamento
PGM
PARM(&STATUS &REQUEST)
Flag di accettazione/rifiuto richiesta */
DCL
VAR(&STATUS) TYPE(*CHAR) LEN(1)
Parametro di ingresso contenente anche il nome utente */
DCL
VAR(&REQUEST) TYPE(*CHAR) LEN(2000)
DCL
VAR(&UTENTE) TYPE(*CHAR) LEN(10)
Di default rifiuto tutte le connessioni */
CHGVAR
VAR(&STATUS) VALUE('0')
Recupero nome utente */
CHGVAR
VAR(&UTENTE) VALUE(%SST(&REQUEST 1 10))
Abilito solo le connessioni di FRANCO */
IF
COND(&UTENTE *EQ 'FRANCO') THEN(CHGVAR +
VAR(&STATUS) VALUE('1'))
ENDPGM

Per attivare il programma

ADDEXITPGM EXITPNT(QIBM_QZDA_INIT) FORMAT(ZDAI0100) PGMNBR(1) PGM(LIB/PGM)
(Tutti i pgm QZDASOINIT in esecuzione devono essere riavviati)

10
IBM Toolbox for Java
JDBC: chiamata programmi
E’ possibile richiamare un qualsiasi programma
AS400 da una connessione JDBC utilizzando lo
statement SQL CALL
 Se non si devono ricevere dei parametri di
ritorno dal programma, non è necessario creare
anticipatamente una definizione di Stored
procedure
 Altrimenti occorre prima definire la procedura
con lo statement SQL CREATE PROCEDURE


11
IBM Toolbox for Java
JDBC: chiamata programmi


Esempio di chiamata a programma senza
restituzione parametri: il programma chiamato…
PGM
DCL
DCL

PARM(&FILE &LIB)
VAR(&FILE) TYPE(*CHAR) LEN(10)
VAR(&LIB) TYPE(*CHAR) LEN(10)

CPYF

FROMFILE(&LIB/&FILE) TOFILE(QSYSPRT)

ENDPGM

12
IBM Toolbox for Java
JDBC: chiamata programmi


…ed il programma chiamante

try {
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
Connection c = DriverManager.getConnection(
"jdbc:as400://AS400;user=PIPPO;password=X");
Statement s = c.createStatement();
s.execute(
"CALL MYLIB.MYPGM ('NOMEFILE ', 'NOMELIB
')");
} catch (Exception e) {}



Fate attenzione agli spazi nei parametri stringa:
devono riempire la capacità della variabile
(nell'esempio 10 caratteri)
13
IBM Toolbox for Java
JDBC: chiamata programmi


Esempio di chiamata a programma con
restituzione parametri: il programma chiamato…
PGM
DCL
DCL
CHGVAR
IF

PARM(&INGR &USC)
VAR(&INGR) TYPE(*CHAR) LEN(10)
VAR(&USC) TYPE(*CHAR) LEN(2)
VAR(&USC) VALUE('KO')
COND(&INGR *EQ 'FRANCO') THEN(CHGVAR +
VAR(&USC) VALUE('OK'))

ENDPGM



Lo statement SQL di creazione procedura

CREATE PROCEDURE MYLIB.MYPGM2(IN INGR CHAR (10 ), OUT USC CHAR
(2 )) LANGUAGE CL NOT DETERMINISTIC CONTAINS SQL EXTERNAL
PARAMETER STYLE GENERAL

14
IBM Toolbox for Java
JDBC: chiamata programmi


…ed il programma chiamante

try {
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
Connection c = DriverManager.getConnection(
"jdbc:as400://AS400;user=PIPPO;password=X");
CallableStatement cs =
c.prepareCall("CALL MYLIB.MYPGM2
(?, ?)");
cs.registerOutParameter(2, Types.CHAR);
cs.setString(1, "FRANCO");
cs.executeUpdate();
System.out.println("Risultato: " + cs.getObject(2));
} catch (Exception e) {}

15
IBM Toolbox for Java
JDBC: esecuzione comandi


Come eseguire un comando?


Con il programma di sistema qcmdexc, che ha
come primo parametro un comando e come
secondo la lunghezza del primo parametro

try {
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
Connection c = DriverManager.getConnection(
"jdbc:as400://AS400;user=PIPPO;password=X");
CallableStatement cs =
c.prepareCall("CALL qsys.qcmdexc
(?, ?)");

String cmd = "CHGJOB RUNPTY(15)";

cs.setString(1, cmd);
cs.setObject(2, new Integer(cmd.length()));
16
cs.execute();
IBM Toolbox for Java
JDBC: esecuzione comandi


Utilizzando l'interfaccia CallableStatement,
occorre prima creare la definizione di stored
procedure con:
CREATE PROCEDURE QSYS.QCMDEXC(IN CMD VARCHAR(1024),
IN CMDLEN DECIMAL(15, 5)) EXTERNAL NAME QSYS.QCMDEXC
LANGUAGE C GENERAL

17
IBM Toolbox for Java
JDBC: esecuzione comandi


L'esempio precedente potrebbe essere
realizzato anche senza l'utilizzo di
CallableStatement:

try
{ Class.forName("com.ibm.as400.access.AS400JDBCDriver")
;
Connection c = DriverManager.getConnection(
"jdbc:as400://AS400;user=PIPPO;password=X");
Statement s = c.createStatement();
s.execute(
"call qsys.qcmdexc('CHGJOB RUNPTY(15)',000000017.00000)");
} catch (Exception e) {}

18
IBM Toolbox for Java
JDBC: esecuzione comandi


Nell'esempio precedente abbiamo modificato la
priorità del lavoro JDBC che serve le nostre
chiamate. Questo può essere fatto solo se il
profilo utente di collegamento ha l'autorizzazione
speciale *JOBCTL

19
IBM Toolbox for Java
JDBC


Come scambiare grosse quantità di dati?




Tramite file nella libreria QTEMP: libreria "virtuale"
di cui esiste una istanza per ogni lavoro. I file
creati in tale libreria sono visibili solo dal lavoro
corrente e vengono cancellati automaticamente
alla fine del lavoro stesso.
Tramite file normali, magari indicizzati dal numero
di lavoro, reperibile come nell'esempio iniziale
(ricordarsi di riorganizzare con RGZPFM)

20
IBM Toolbox for Java
JDBC


Come estrarre un sottoinsieme di classi dal
Toolbox (es. JDBC)?


Con la classe AS400ToolboxJarMaker (solo
JTOpen):

java -cp jt400.jar utilities.AS400ToolboxJarMaker
-component JDBC -ccsid 1144



estrae le classi necessarie al dirver JDBC per la
code-page italiana con simbolo euro (1144)
Estensione di JarMaker: classe di JTOpen per
l’estrazione da file Jar dell’insieme minimo di
classi necessarie per l’esecuzione di una classe.
21

Mais conteúdo relacionado

Destaque

Rock scissors-paper-kata
Rock scissors-paper-kataRock scissors-paper-kata
Rock scissors-paper-kataFranco Lombardo
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Science of happiness
Science of happinessScience of happiness
Science of happinessHappiitude
 
The Dragonfly Effect - Harnessing Social Media to Build Brands
The Dragonfly Effect - Harnessing Social Media to Build BrandsThe Dragonfly Effect - Harnessing Social Media to Build Brands
The Dragonfly Effect - Harnessing Social Media to Build BrandsAndy Smith
 
Scrum, Games and The Science of Happiness
Scrum, Games and The Science of HappinessScrum, Games and The Science of Happiness
Scrum, Games and The Science of HappinessStefano Lucantoni
 
Science of Happiness Presentation
Science of Happiness PresentationScience of Happiness Presentation
Science of Happiness PresentationJon Unal
 
The Power of Happiness
The Power of HappinessThe Power of Happiness
The Power of HappinessAndy Smith
 
Happiness Presentation
Happiness PresentationHappiness Presentation
Happiness Presentationrgonzalezjr
 

Destaque (10)

Rock scissors-paper-kata
Rock scissors-paper-kataRock scissors-paper-kata
Rock scissors-paper-kata
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
A First Date With Scala
A First Date With ScalaA First Date With Scala
A First Date With Scala
 
Science of happiness
Science of happinessScience of happiness
Science of happiness
 
The Dragonfly Effect - Harnessing Social Media to Build Brands
The Dragonfly Effect - Harnessing Social Media to Build BrandsThe Dragonfly Effect - Harnessing Social Media to Build Brands
The Dragonfly Effect - Harnessing Social Media to Build Brands
 
Scrum, Games and The Science of Happiness
Scrum, Games and The Science of HappinessScrum, Games and The Science of Happiness
Scrum, Games and The Science of Happiness
 
Science of Happiness Presentation
Science of Happiness PresentationScience of Happiness Presentation
Science of Happiness Presentation
 
Happiness presentation ppt
Happiness presentation pptHappiness presentation ppt
Happiness presentation ppt
 
The Power of Happiness
The Power of HappinessThe Power of Happiness
The Power of Happiness
 
Happiness Presentation
Happiness PresentationHappiness Presentation
Happiness Presentation
 

Semelhante a Java per as400

Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Martino Bordin
 
Implementazione di un ambiente in alta affidabilità
Implementazione di un ambiente in alta affidabilitàImplementazione di un ambiente in alta affidabilità
Implementazione di un ambiente in alta affidabilitàAlfredo Parisi
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Idriss Riouak
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principlesRiccardo Cardin
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Web base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayWeb base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayStudiabo
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5JBug Italy
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoJava User Group Roma
 
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdfFrancesco Liuzzi
 

Semelhante a Java per as400 (20)

Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3
 
Implementazione di un ambiente in alta affidabilità
Implementazione di un ambiente in alta affidabilitàImplementazione di un ambiente in alta affidabilità
Implementazione di un ambiente in alta affidabilità
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Logging
LoggingLogging
Logging
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principles
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Web base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayWeb base-03-js-numeri stringearray
Web base-03-js-numeri stringearray
 
3DD 1e Reconfig
3DD 1e Reconfig3DD 1e Reconfig
3DD 1e Reconfig
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
 
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
Yagwto
YagwtoYagwto
Yagwto
 

Mais de Franco Lombardo

Kotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutinesKotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutinesFranco Lombardo
 
Kotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functionsKotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functionsFranco Lombardo
 
Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)
Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)
Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)Franco Lombardo
 
Unit testing on AS400? Yes we can! (With Kotlin)
Unit testing on AS400? Yes we can! (With Kotlin)Unit testing on AS400? Yes we can! (With Kotlin)
Unit testing on AS400? Yes we can! (With Kotlin)Franco Lombardo
 
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...
Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...Franco Lombardo
 
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019Franco Lombardo
 
Un interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM iUn interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM iFranco Lombardo
 
Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018Franco Lombardo
 

Mais de Franco Lombardo (12)

happiness_2023.pdf
happiness_2023.pdfhappiness_2023.pdf
happiness_2023.pdf
 
Kotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutinesKotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutines
 
Kotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functionsKotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functions
 
Kotlin from-scratch
Kotlin from-scratchKotlin from-scratch
Kotlin from-scratch
 
Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)
Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)
Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)
 
Unit testing on AS400? Yes we can! (With Kotlin)
Unit testing on AS400? Yes we can! (With Kotlin)Unit testing on AS400? Yes we can! (With Kotlin)
Unit testing on AS400? Yes we can! (With Kotlin)
 
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...
Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...
 
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
 
Un interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM iUn interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM i
 
Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018
 
Agile Happiness 2
Agile Happiness 2Agile Happiness 2
Agile Happiness 2
 
Agile Happiness
Agile HappinessAgile Happiness
Agile Happiness
 

Último

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 

Último (9)

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 

Java per as400

  • 1. Programmi Java e server AS400 (IBM i) Franco Lombardo lombardo@molteniinformatica.com Molteni Informatica - Lecco 1
  • 2. IBM Developer Kit for Java Driver JDBC locale Classe com.ibm.db2.jdbc.app.DB2Driver  URL jdbc:db2://NomeDB dove NomeDB è una voce di WRKRDBDIRE (posso utilizzare jdbc:db2://*local   /QIBM/ProdData/OS400/Java400/ext/db2_classes.jar  Si aggancia ad un lavoro server di preavvio nnnnn/QUSER/QSQSRV  Lavora per conto del profilo utente di logon, ma non assume la JOBD legata a tale profilo, e non richiama neppure eventuali programmi iniziali: attenzione alla lista librerie! (Mantenuta libreria corrente) 2
  • 3. IBM Toolbox for Java Libreria 100% pure Java per accedere a risorse AS400  Utilizzabile sia su client, sia su AS400  Contiene (tra le altre cose)     Driver JDBC Classi per richiamo programmi, accesso a code dati, profili utente, stampe, messaggi, job, aree dati, IFS, valori di sistema, stato del sistema... Classi di utilità (es. table model Swing bufferizzato “MS Access”-like, JarMaker per estrarre sottoinsiemi di classi da un Jar) 3
  • 4. IBM Toolbox for Java Dove trovarlo  Installato su AS400 come programma su licenza (gratuito) nell’IFS   /QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar Installato a richiesta con Client Access (i-Series Access)  C:ProgrammiIBMClient Accessjt400libjt400.jar Scaricabile gratuitamente da internet nella sua versione open-source (JTOpen). E’ sempre la versione più aggiornata, che consiglio di usare.  Sul server AS400 richiede l’installazione e l’avvio degli Host Servers  4
  • 5. IBM Toolbox for Java JDBC Driver di tipo 4  Classe com.ibm.as400.access.AS400JDBCDriver  URL jdbc:as400://nomeOIpAs[/libreria]  [;listaProprietà]  Si appoggia allo stesso demone di sistema utilizzato da ODBC: QZDASRVSD    Avviato con STRHOSTSVR *DATABASE In ascolto su porta TCP 8471 Associa ad ogni client un lavoro di preavvio  nnnnnn/QUSER/QZDASOINIT 5
  • 6. IBM Toolbox for Java JDBC: QZDASOINIT  E’ utile abbassare la priorità di default di tale lavoro e regolare il numero di lavori avviati automaticamente   CRTCLS CLS(ODBC) RUNPTY(25) TIMESLICE(3000) CHGPJE SBSD(QUSRWRK) PGM(QZDASOINIT) INLJOBS(20) THRESHOLD(15) ADLJOBS(5) CLS(ODBC)   Esempio per avviare automaticamente 20 lavori, aggiungerne automaticamente 5 quando ne sono in esecuzione meno di 15 ed avviarli a priorità 25 (più veloci dei batch e più lenti degli interattivi) Su V4Rx il sottosistema è QSERVER6
  • 7. IBM Toolbox for Java JDBC: properties  Impostabili anche nell’URL, per esempio: jdbc:as400://myAS;trace=true;user=pino;password=x;  Vediamone alcune   transaction isolation gestione transazioni. Se i file non sono sotto giornale, occorre impostare il valore none, che non è il default! server trace gestione log su AS400.   Valore 4: avvia STRDBG per QZDASOINIT, che registra anche suggerimenti per costruzione indici. Valore 8: salva JOBLOG per QZDASOINIT. 7
  • 8. IBM Toolbox for Java JDBC: properties  trace gestione ordinamento/ricerche.    Valore true: stampa sullo standard output del client la registrazione dettagliate di tutte le chiamate JDBC. Forte scadimento delle prestazioni: solo per debug. sort gestione ordinamento/ricerche.    Valore language: effettua ricerche/ordinamenti in base alla lingua specificata nella proprietà sort language (per noi ITA). Impostando tale valore è possibile effettuare ricerche non case-sensitive (sul modello MS SQLServer). Possibile scadimento delle prestazioni. 8
  • 9. IBM Toolbox for Java JDBC: Exit programs  E’ possibile eseguire un programma su AS400  Al collegamento di ogni client   Punto di uscita QIBM_QZDA_INIT Prima dell’esecuzione di ogni statement SQL  Punto di uscita QIBM_QZDA_SQL1 Tali programmi ricevono in ingresso i dati della richiesta (profilo utente, statement SQL...) e restituiscono un flag che indica se accettarla.  Gestiti con il comando WRKREGINF  9
  • 10. IBM Toolbox for Java JDBC: Exit programs  /* /* /* /* /*  Un esempio CL per il controllo del collegamento PGM PARM(&STATUS &REQUEST) Flag di accettazione/rifiuto richiesta */ DCL VAR(&STATUS) TYPE(*CHAR) LEN(1) Parametro di ingresso contenente anche il nome utente */ DCL VAR(&REQUEST) TYPE(*CHAR) LEN(2000) DCL VAR(&UTENTE) TYPE(*CHAR) LEN(10) Di default rifiuto tutte le connessioni */ CHGVAR VAR(&STATUS) VALUE('0') Recupero nome utente */ CHGVAR VAR(&UTENTE) VALUE(%SST(&REQUEST 1 10)) Abilito solo le connessioni di FRANCO */ IF COND(&UTENTE *EQ 'FRANCO') THEN(CHGVAR + VAR(&STATUS) VALUE('1')) ENDPGM Per attivare il programma ADDEXITPGM EXITPNT(QIBM_QZDA_INIT) FORMAT(ZDAI0100) PGMNBR(1) PGM(LIB/PGM) (Tutti i pgm QZDASOINIT in esecuzione devono essere riavviati) 10
  • 11. IBM Toolbox for Java JDBC: chiamata programmi E’ possibile richiamare un qualsiasi programma AS400 da una connessione JDBC utilizzando lo statement SQL CALL  Se non si devono ricevere dei parametri di ritorno dal programma, non è necessario creare anticipatamente una definizione di Stored procedure  Altrimenti occorre prima definire la procedura con lo statement SQL CREATE PROCEDURE  11
  • 12. IBM Toolbox for Java JDBC: chiamata programmi  Esempio di chiamata a programma senza restituzione parametri: il programma chiamato… PGM DCL DCL PARM(&FILE &LIB) VAR(&FILE) TYPE(*CHAR) LEN(10) VAR(&LIB) TYPE(*CHAR) LEN(10) CPYF FROMFILE(&LIB/&FILE) TOFILE(QSYSPRT) ENDPGM 12
  • 13. IBM Toolbox for Java JDBC: chiamata programmi  …ed il programma chiamante try { Class.forName("com.ibm.as400.access.AS400JDBCDriver"); Connection c = DriverManager.getConnection( "jdbc:as400://AS400;user=PIPPO;password=X"); Statement s = c.createStatement(); s.execute( "CALL MYLIB.MYPGM ('NOMEFILE ', 'NOMELIB ')"); } catch (Exception e) {}  Fate attenzione agli spazi nei parametri stringa: devono riempire la capacità della variabile (nell'esempio 10 caratteri) 13
  • 14. IBM Toolbox for Java JDBC: chiamata programmi  Esempio di chiamata a programma con restituzione parametri: il programma chiamato… PGM DCL DCL CHGVAR IF PARM(&INGR &USC) VAR(&INGR) TYPE(*CHAR) LEN(10) VAR(&USC) TYPE(*CHAR) LEN(2) VAR(&USC) VALUE('KO') COND(&INGR *EQ 'FRANCO') THEN(CHGVAR + VAR(&USC) VALUE('OK')) ENDPGM  Lo statement SQL di creazione procedura CREATE PROCEDURE MYLIB.MYPGM2(IN INGR CHAR (10 ), OUT USC CHAR (2 )) LANGUAGE CL NOT DETERMINISTIC CONTAINS SQL EXTERNAL PARAMETER STYLE GENERAL 14
  • 15. IBM Toolbox for Java JDBC: chiamata programmi  …ed il programma chiamante try { Class.forName("com.ibm.as400.access.AS400JDBCDriver"); Connection c = DriverManager.getConnection( "jdbc:as400://AS400;user=PIPPO;password=X"); CallableStatement cs = c.prepareCall("CALL MYLIB.MYPGM2 (?, ?)"); cs.registerOutParameter(2, Types.CHAR); cs.setString(1, "FRANCO"); cs.executeUpdate(); System.out.println("Risultato: " + cs.getObject(2)); } catch (Exception e) {} 15
  • 16. IBM Toolbox for Java JDBC: esecuzione comandi  Come eseguire un comando?  Con il programma di sistema qcmdexc, che ha come primo parametro un comando e come secondo la lunghezza del primo parametro try { Class.forName("com.ibm.as400.access.AS400JDBCDriver"); Connection c = DriverManager.getConnection( "jdbc:as400://AS400;user=PIPPO;password=X"); CallableStatement cs = c.prepareCall("CALL qsys.qcmdexc (?, ?)"); String cmd = "CHGJOB RUNPTY(15)"; cs.setString(1, cmd); cs.setObject(2, new Integer(cmd.length())); 16 cs.execute();
  • 17. IBM Toolbox for Java JDBC: esecuzione comandi  Utilizzando l'interfaccia CallableStatement, occorre prima creare la definizione di stored procedure con: CREATE PROCEDURE QSYS.QCMDEXC(IN CMD VARCHAR(1024), IN CMDLEN DECIMAL(15, 5)) EXTERNAL NAME QSYS.QCMDEXC LANGUAGE C GENERAL 17
  • 18. IBM Toolbox for Java JDBC: esecuzione comandi  L'esempio precedente potrebbe essere realizzato anche senza l'utilizzo di CallableStatement: try { Class.forName("com.ibm.as400.access.AS400JDBCDriver") ; Connection c = DriverManager.getConnection( "jdbc:as400://AS400;user=PIPPO;password=X"); Statement s = c.createStatement(); s.execute( "call qsys.qcmdexc('CHGJOB RUNPTY(15)',000000017.00000)"); } catch (Exception e) {} 18
  • 19. IBM Toolbox for Java JDBC: esecuzione comandi  Nell'esempio precedente abbiamo modificato la priorità del lavoro JDBC che serve le nostre chiamate. Questo può essere fatto solo se il profilo utente di collegamento ha l'autorizzazione speciale *JOBCTL 19
  • 20. IBM Toolbox for Java JDBC  Come scambiare grosse quantità di dati?   Tramite file nella libreria QTEMP: libreria "virtuale" di cui esiste una istanza per ogni lavoro. I file creati in tale libreria sono visibili solo dal lavoro corrente e vengono cancellati automaticamente alla fine del lavoro stesso. Tramite file normali, magari indicizzati dal numero di lavoro, reperibile come nell'esempio iniziale (ricordarsi di riorganizzare con RGZPFM) 20
  • 21. IBM Toolbox for Java JDBC  Come estrarre un sottoinsieme di classi dal Toolbox (es. JDBC)?  Con la classe AS400ToolboxJarMaker (solo JTOpen): java -cp jt400.jar utilities.AS400ToolboxJarMaker -component JDBC -ccsid 1144  estrae le classi necessarie al dirver JDBC per la code-page italiana con simbolo euro (1144) Estensione di JarMaker: classe di JTOpen per l’estrazione da file Jar dell’insieme minimo di classi necessarie per l’esecuzione di una classe. 21

Notas do Editor

  1. {}