Archive for the ‘AS400 - iSeries - System i’ Category.

Tomcat on AS400 (aka i-series, Systemi, IBM i, bla, bla…)

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!!!

Come spostare una LAN Console

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ì:

  1. Impostare sul pannello la modalità manuale: 01 B M
  2. Selezionare la funzione 25 e premere invio
  3. Selezionare la funzione 26 e premere invio
  4. Selezionare la funzione 65 e premere invio
  5. Selezionare la funzione 21 e premere invio
  6. 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)

  7. Selezionare la funzione 65 e premere invio
  8. 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
  9. Selezionare la funzione 65 e premere invio
  10. Selezionare la funzione 21 e premere invio
  11. 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.
  12. Selezionare la funzione 21 e premere invio. Ciò dovrebbe eseguire l'azione, ed il codice sul pannellino dovrebbe divenire A6A3500C come conferma.
  13. 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.
  14. 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.

  1. Impostare sul pannello la modalità manuale: 01 B M
  2. Selezionare la funzione 25 e premere invio
  3. Selezionare la funzione 26 e premere invio
  4. Selezionare la funzione 65 e premere invio
  5. 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.

Diventare QSECOFR

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

Problemi spegnimento AS400 per passaggio ad ora legale

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.

Resettare il Service Processor di un AS400

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.

Pannello AS400

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.

AS400 aperto

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.

AS400 aperto

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. :-(

Linux ed AS400: link utili

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:

Inserire record solo se non presenti tramite un solo prepared statement

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();

Quanta RAM è installata su un AS400 - System i

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.

Novità V6R1: indici SQL derivati

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))
 

Disattivazione del mirroring su AS400

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’ »