Archive for the ‘AS400 - iSeries - System i’ Category.
29th Dicembre 2009, 09:16 am
I know that AS400 gives its own native support to Tomcat and other application servers, but it does it in the IBM style: intricate and rigid. What if, for example, I need to use a version of Tomcat that it is not shipped with my operating system?
Here is one possible answer:
1) Download a copy of Apache Tomcat and unzip it in a directory of the Integrated File System of AS400.
2) In another directory of the Integrated File System Create a text file named tomcat with a simple script like this:
#The path of the JDK you want to use
export JAVA_HOME=/QIBM/ProdData/Java400/jdk14
#The JVM option you want to use
#In this example -opt0 means 'no optimization'
export JAVA_OPTS='-opt0 -Djava.awt.headless=true'
cd /path/to/my/tomcatdir/bin
catalina.sh %1
3) In a 5250 session (or in a batch job) execute this command
QSH CMD('/path/to/my/script/tomcat run')
Your Tomcat should be alive and kicking
4) In order to shut down Tomcat, use this command
QSH CMD('/path/to/my/script/tomcat stop')
Enjoy with Tomcat and AS400!!!
21st Luglio 2009, 01:41 pm
La mente degli ingegneri IBM ha partorito un ennesimo mostro per la gestione della console dei sistemi AS400 (o iSeries o IBM i o come diavolo si chiamano questa mattina). Il deforme frutto del peccato si chiama Operation Console LAN (o LAN console). Il virgulto genera speciale raccapriccio per la sua particolarità di legare in modo indissolubile l'AS400 al PC sul quale la console è stata installata per la prima volta, come se la vita dei due dispositivi fosse intrecciata da un patto di sangue. Per spezzare questa catena elettronica ed installare la console su un nuovo PC, occorre effettuare dei riti esoterici sul pannello del server quattrocentesco. Alcuni narrano che nella prossima versione saranno necessari dei sacrifici umani! Vediamo comunque i passi da seguire attualmente.
Fase A: reset della Lan Console
In primo luogo occorre resettare la scheda ethernet quattrocentesca dedicata allo scopo. Seguendo le istruzioni IBM, si può procedere così:
- Impostare sul pannello la modalità manuale:
01 B M
- Selezionare la funzione
25 e premere invio
- Selezionare la funzione
26 e premere invio
- Selezionare la funzione
65 e premere invio
- Selezionare la funzione
21 e premere invio
- Selezionare la funzione
11 e premere invio La funzione 11 ha lo scopo di mostrare sul pannello di controllo un codice che descrive la situazione corrente della procedura. Nel nostro caso dovrebbe apparire A603500A. Questi codici hanno la forma A6xx500y, dove le cifre xx hanno il seguente significato:
00 = Nessuna console definita
01 = Console biassiale
02 = Operations Console (Diretta)
03 = Operations Console (LAN )
04 = HMC (Hardware Management Console)
oppure Thin Console
C3 = Annulla la configurazione LAN
A3 = Disattivazione seguita dall'attivazione
dell'adattatore LAN di Operations Console
DD = Dump di tutti i flight recorder relativi alla
console in una serie di vlog
D1 = Disabilita la porta Ethernet incorporata
D2 = Disabilita l'adattatore LAN 5706/5707 aggiuntivo
E1 = Abilita la porta Ethernet incorporata
E2 = Abilita l'adattatore LAN 5706/5707 aggiuntivo
Bn = Abilita l'adattatore LAN nell'alloggiamento
(C1, C2, C3, C4, C5)
Fn = Abilita l'adattatore asincrono nell'alloggiamento
(C1, C2, C3, C4, C5)
La cifra y è invece da interpretarsi così:
A6xx 500A = Viene visualizzato il valore corrente della console.
A6xx 500B = È stata eseguita una seconda coppia di funzioni 65+21,
pertanto si è in modalità modifica.
A6xx 500C = È stata eseguita una seconda funzione 21
per eseguire un'azione.
A6xx 500D = È trascorso troppo tempo dopo avere impostato
la modalità modifica per eseguire un'azione.
Nel nostro caso, quindi, il codice dice che siamo in modalità visualizzazione (A) e che la console è l'Operations console LAN (03)
- Selezionare la funzione
65 e premere invio
- Selezionare la funzione
21 e premere invio. A questo punto abbiamo richiesto di incrementare il contatore xx, quindi la funzione 11 dovrebbe mostrare il codice A604500B
- Selezionare la funzione
65 e premere invio
- Selezionare la funzione
21 e premere invio
- Selezionare la funzione
11 e premere invio. Il display dovrebbe mosrare il codice A6A3500B che indica che stiamo per chiedere il reset dell'adattatore LAN console.
- Selezionare la funzione
21 e premere invio. Ciò dovrebbe eseguire l'azione, ed il codice sul pannellino dovrebbe divenire A6A3500C come conferma.
- Proseguiamo con una serie di
65 21 11 sino a giungere al valore A6E1500B, per essere sicuri che la porta ethernet della console sia abilitata.
- Confermiamo con il codice
21 e verifichiamo con il codice 11 che sul pannello appaiaA6E1500B.
Ricapitolando, la prima sequenza 65 21 mostra lo stato della console, la seconda e le successive incrementano le cifre xx, il codice 21 conferma la modifica, mentre con 11 si visualizza sul display l'SRC che indica lo stato corrente dell'operazione.
Fase B: rottura del legame tra PC e AS400
Come dicevamo, tra l'AS400 ed il PC che ne costutuisce la LAN console si instaura un patto di sangue elettronico, sancito da uno scambio di password tra i due. Per romperlo è necessario utilizzare nuovamente il pannello di controllo, come descritto in questo documento IBM.
- Impostare sul pannello la modalità manuale:
01 B M
- Selezionare la funzione
25 e premere invio
- Selezionare la funzione
26 e premere invio
- Selezionare la funzione
65 e premere invio
- L'operazione
65 deve essere eseguita sette volte. Per verificare il contatore, utilizzare la funzione 13
Concludo con un link ad un documento che può aiutare ad orientarsi nel mare periglioso della LAN console.
8th Aprile 2009, 08:15 am
Nei sistemi Unix esiste il comando su che permette, avendone la password, di impersonare il "superutente" root.
Anche su AS400 ciò è possibile, anzi, se si possiede l'autorizzazione *USE sul profilo utente desiderato, si può far girare il proprio lavoro sotto mentite spoglie.
Ecco un semplice CL che a tale scopo usa le API di sistema QSYGETPH e QWTSETP.
PGM PARM(&UTENTE)
DCL VAR(&UTENTE) TYPE(*CHAR) LEN(10)
DCL VAR(&USCITA) TYPE(*CHAR) LEN(50)
DCL VAR(&TESTOERROR) TYPE(*CHAR) LEN(100)
DCL VAR(&HUSER) TYPE(*CHAR) LEN(12)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERRORE))
/*------------------------------------------------------------------*/
/* RECUPERO L'HANDLE DEL PROFILO UTENTE */
CALL PGM(QSYS/QSYGETPH) PARM(&UTENTE *NOPWDCHK +
&HUSER)
/* PASSO AL NUOVO PROFILO UTENTE */
CALL PGM(QSYS/QWTSETP) PARM(&HUSER)
/* INVIO UN MESSAGGIO DI COMPLETAMENTO OPERAZIONE */
SNDPGMMSG MSG('Profilo utente cambiato')
/*------------------------------------------------------------------*/
/* FINE */
/* */
GOTO CMDLBL(FINE)
/* GESTIONE ERRORI */
ERRORE: RCVMSG MSGTYPE(*EXCP) MSG(&TESTOERROR)
SNDPGMMSG MSG(&TESTOERROR)
/* */
FINE:
ENDPGM
31st Marzo 2009, 10:38 am
Il passaggio all'ora legale può bloccare il lavoro QSYSSCD, responsabile dello spegnimento automatico dell'AS400. Tale lavoro potrebbe bloccarsi con il messaggio CPF1076 Il valore specificato non è ammesso per il valore di sistema QIPLDATTIM. Ciò può avvenire nelle macchine per le quali la riaccensione è programmata tra le 2 e le 3 di notte. Tale orario, infatti, non esiste nella giornata di passaggio dall'ora solare all'ora legale! Il programa QSYSSCD al suo avvio verifica che l'orario di accensione previsto è impostato su un valore inesistente e si blocca.
Per risolvere il problema:
1) non programmare il riavvio della macchina tra le 2 e le 3 del giorno di passaggio all'ora legale;
2) digitare STRCLNUP per riavviare il programma QSYSSCD e quindi garantire il normale funzionamento del sistema.
25th Settembre 2008, 10:32 am
Nei giorni scorsi uno degli AS400 (V5R3) che contribuisco a gestire non ha effettuato il consueto riavvio mattutino. Sul pannellino era presente il codice SRC B150F22A. Il tentativo di un IPL manuale falliva con il medesimo codice di errore. Ecco come, con l'aiuto del supporto IBM, ho cercato di rianimarlo.
Il codice SRC indicava un errore nel Service Processor, la scheda che controlla la macchina prima ancora dell'avvio del sistema operativo OS400 (i5OS o IBM i che dir si voglia).
Come prima misura, ho tentato di riavviare la macchia dopo aver tolto la spina, così come riportato in questo articolo IBM. Ovviamente la cosa non ha avuto successo.
Il secondo tentativo è stato quello di resettare il Service Processor premendo con la punta di una graffetta il micro interruttore posto nel forellino a destra del tasto di accensione. Anche in questo caso non ho avuto fortuna.

La terza prova è stata quella di effettuare un reset totale del Service Processor interrompendo l'alimentazione della batteria tampone.
Per effettuarla ho aperto la macchina ed estratto la scheda del Service Processor, premendo le due levette viola che la bloccano.

Ho quindi introdotto un foglio di carta sotto la graffetta che fissa la batteria tampone, al fine di interrompere per qualche decina di secondi l'alimentazione ai circuiti.

A questo punto la macchina si è riavviata con successo!
Una nota. La macchina effettua il primo IPL dopo il reset in modo manuale. Occorre quindi disporre della console. Inoltre state attenti alle impostazioni di data/ora fusorario ed ora legale. Nel mio caso, infatti, non ho impostato correttamente tali parametri ed al mattino successivo la macchina non si è riavviata in quanto il suo orologio era indietro di un paio d'ore.
22nd Luglio 2008, 05:31 pm
Ho trovato un utile blog su Ubuntu, nel quale è possibile leggere diversi articoli interessanti relativi alla connessione ad AS400 da sistemi Linux. Ecco alcuni link:
16th Luglio 2008, 07:44 am
In un bellissimo articolo su IT Jungle ho trovato un interessante trucco. Il problema è quello di inserire i dati in una tabella, solo nel caso non esista già una chiave uguale, utilizzando un solo prepared statement. Ecco la soluzione
INSERT INTO myTable
(KEY, code, name)
SELECT Cast(? AS Int),
Cast(? AS VarChar(30)),
Cast(? AS Char(10))
FROM SYSIBM.SysDummy1
WHERE NOT EXISTS
(SELECT 1
FROM myTable
WHERE KEY=?)
con il relativo codice Java che ne fa uso:
Connection conn=DriverManager.getConnection("jdbc:as400://myas400;naming=sql","user","pwd");
String sql="Insert Into myLib.myTable (key, code, name) " +
"Select Cast(? As Int)," +
" Cast(? As VarChar(30))," +
" Cast(? As Char(10))" +
" From SysIBM.SysDummy1 " +
" Where Not Exists " +
" (Select * " +
" From myLib.myTable " +
" Where key=?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1, 3); // Column 1
ps.setString(2, "Test It"); // Column 2
ps.setFloat(3,"Fun"); // Column 3
ps.setInt(4, 3); // Where Clause
ps.execute(); // Run the statement
ps.close();
conn.close();
1st Luglio 2008, 05:30 pm
Per verificare la quantità di memoria RAM installata su AS400, andare al menù HARDWARE con il comando
GO HARDWARE
quindi utilizzare la chiave
4. Gestione delle risorse del processore
Il che equivale al comando
WRKHDWRSC *PRC
La RAM è rappresentata dalle ultime righe, simili a
MS01 30D2 Operativo Scheda memoria princi
MS02 30D2 Operativo Scheda memoria princi
MS03 30D2 Operativo Scheda memoria princi
MS04 30D2 Operativo Scheda memoria princi
L'opzione 7 a fianco di ogni riga mostra la dimensione del modulo di memoria installato.
3rd Giugno 2008, 03:49 pm
Una dei piccoli ma significativi miglioramenti del rilascio V6R1 di OS400 (IBM i), è la possibilità di creare indici non solo su campi di database, ma anche sul risultato di operazioni. Tali indici possono essere sfruttati sia dal motore di ottimizzazione (in particolare dal nuovo SQE, ma in parte anche da CQE) per migliorere le prestazioni delle query.
Vediamo acluni esempi.
CREATE INDEX TOT_TEMPI ON Lavorazioni (TLavoro + TAttrezzaggio)
CREATE INDEX NomeCogn ON Dipendenti (CONCAT(CONCAT(Nome,’ ‘), Cognome))
Il vantaggio maggiore si può però ottenere nel rendere le ricerche case-insensitive:
SELECT * FROM Articoli
WHERE UPPER(Descrizione) = ‘TAVOLO’
CREATE INDEX DescrUpp ON Articoli(UPPER(Descrizione))
27th Maggio 2008, 08:12 pm
I modelli più piccoli di AS400 consegnati negli ultimi hanni dispongono di due dischi configurati in RAID 0 (grazie a Consulente EDP per la correzione) RAID 1 (mirroring). Ciò, se da un lato aumenta l'affidabilità del sistema, dall'altro ne diminuisce ovviamente la capienza ed ha anche un influenza negativa sulle prestazioni. Come è noto, infatti, AS400 cerca quando è possibile di parallelizzare l'accesso fisico ai dati, distribuendo le tabelle di database su tutti i dischi di cui dispone, ottimizzando gli spostamenti dei braccini delle unità.
In certe situazioni risulta pertanto consigliabile rinunciare alla protezione del mirroring per ottenere una maggiore velocità del database.
Per disattivare la protezione del mirroring procedere così.
Continue reading ‘Disattivazione del mirroring su AS400’ »