iSeries home   |   Easy400     |   CGIDEV2     |   MMAIL  
Public Source
 
 Introduzione
 
  Comandi:
zipsave
dspzipsave
unzipsave
 
 Scarica questo tool
 
 

 
ZIPSAVE
Salva e Zippa
di Giovanni B. Perotti (Italia)
 
Secondo i nostri test, ZIPSAVE comprime il 20% in più di quanto i comandi di sistema SAV... riescano a fare con il parametro DTACPR(*HIGH).

Inoltre, con i file ZIP di ZIPSAVE si hanno tutti i vantaggi di un formato di compressione standard per la maggior parte delle piattaforme.

Questa utility presenta tre comandi:

  1. ZIPSAVE - Salva librerie, oggetti di librerie o oggetti IFS in un file di savataggio non compresso, quindi comprime il file di salvataggio in un file di flusso ".zip" standard
  2. UNZIPSAVE - Decomprime un file ".zip" contenente un file di salvataggio compresso e facoltativamente ripristina librerie o oggetti dal file di salvataggio
  3. DSPZIPSAVE - Visualizza l'indice del contenuto di un file ".zip".
Per comprimere / decomprimere file di salvataggio, i comandi ZIPSAVE e UNZIPSAVE possono usare - a seconda della scelta dell'utente - uno degli strumenti seguenti:
  • Il comando Jar, disponibile - in tutti i rilasci - nella Qshell di IBMi , OPPURE
  • i comandi CL CPYTOARCF (Copy to Archive File) e CPYFRMARCF (Copy from ArchiveFile), disponibili su IBMi a partire dal rilascio V7R2.
Invece il comando DSPZIPSAVE può usare solo il comando "jar", in quanto non esiste alcun comando di systema per fare altrettanto.

Che cosa è la Qshell di IBMi

La QSHELL di IBMi è un interprete di linea di comandi ("shell") che funziona sulla piattaforma IBM iSeries. La Qshell si basa su standard POSIX e X/Open. IBM ha creato l'interprete Qshell per poter supportare - sulla linea di computer iSeries - il Java Development Kit (JDK). L'interpreste Qshell può essere usato interatttivamente o per eseguire script contenenti comandi della shell.
Collegamenti informativi: Qshell in the IBM i Knowledge Center (html)
Exploring iSeries QShell (html)
IBM System i - Programming QShell (pdf)

Che cos'è il tool "JAR"

Il tool "JAR" (Java ARchive) tool - disponibile tramite l'interprete Qshell - combina più file comprimendoli in un unico file jar.
E' compatibile con il tool jar fornito da Sun Microsystems, Inc. il quale è stato progettato principalmente per impaccare in un solo archivio applet o applicazioni java.
I file JAR sono basati sul formato dei file ZIP.
Collegamenti informativi: ZIP (file format) (html)
jar - The Java Archive tool (html)

Alcuni aspetti riscontrati sull'uso di "JAR" su iSeries

Per solo motivo di informazione, riporto qui di seguito alcuni fatti scoperti nel mio primo uso di JAR..
Ovviamente, tutti i problemi riscontrati sono automaticamente risolti nell'utility ZIPSAVE.

Dopo aver letto il "tecnical tip" di Thomas Snyder's Use RPG and QShell for Zipping and Tarring Files, mi ero fatto l'idea di poter usare JAR per comprimere qualunque tipo di file IBMi, da un oggetto IFS fino ad un membro source.
In realtà tutto andava bene, fino a quando si decomprimevano i file.

A questo punto si è scoperto che l'informazione relativa al CCSID dei dati dei file compressi andava smarrita (sembra infatti sottinteso che questo tool sia stato fatto unicamente per gestire oggetti PC).
Infatti, quando un file viene compresso, gli viene assegnato d'autorità il CCSID 819 (ASCII), indipendentemente dal CCSID reale dei suoi dati.
Ovviamente, una volta decompresso il file, si tratta di riassegnargli il suo CCSID originale, ma bisogna sapere che CCSID era!

L'altro problema si ha quando lo zip file - creato da jar su IBMi - dever essere elaborato (capito) da un PC. In tal caso, infatti, deve avere il CCSID 819 (ASCII) per poter essere accettato.

In conclusione:

  1. Se si vuole che i file zippati siano elaborabili da un PC, occorre non solo il contenitore (il file ZIP creato da JAR), ma anche i file compressati nel contenitore, abbiano tutti il CCSID 819.
    Per convertire in un altro CCSID sia il CCSID esterno (a mo' di etichetta) di un file di flusso che il CCSID interno dei suoi dati, occorre utilizzare il comando CPY. Esempio:
    CPY OBJ('/tmp/a') TOOBJ('/tmp/a') TOCCSID(819) DTAFMT(*TEXT/*BINARY) REPLACE(*YES)
  2. I file zippati contenenti dati binari (come i file di salvataggio) devono esser sì etichettati esternamente con CCSID 819 per esser capiti dal PC, ma i loro dati non vanno convertiti a tale CCSID. Una volta che un file di salvataggio torna su IBMi, sarà perfettamente capito nel suo CCSID 65535 originale.
    Per convertire ad un altro CCSID solo il CCSID esterno (quello di etichetta) di un file di flusso, lasciando che i dati interni mantengano il loro CCSID, occorre usare il comando CHGATR (Change Attribute). Esempio:
    CHGATR OBJ('/tmp/a') ATR(*CCSID) VALUE(819)
  3. I file di testo che vanno zippati e poi letti da un PC, devono essere convertiti come *TEXT al CCSID 819 prima di essere zippati.
  4. I file di flusso PDF , prima di essere zippati, devono invece essere convertiti al CCSID 819 come *BINARY.


Che cosa è la utility ZIPSAVE

ZIPSAVE è una utility (munita dei suoi sorgenti) fatta per l'iSeries, che si può scaricare dal sito Easy400.
E' stata progettata per poter distribuire file di salvataggio tramite la rete Internet.
Per poter distribuire i file di salvataggio in formato compresso, essa si avvale della JAR di Qshell oppure dei comandi di sistema CPYTOARCF e CPYFRMARCF, disponibili dalla V7R2.
Gli zip file generati da questa utility possono venire decompressi ("unzipped") o direttamente su un PC oppure sull'iSeries.
Il contenuto complessivo di un file di flusso generato da ZIPSAVE è costitituito da:
• un file .txt facoltativo, contenente le istruzioni di installazione
• un file .savf binario che contiene un file di salvataggio iSeries.

La utility ZIPSAVE è costituita dai comandi seguenti:

  1. ZIPSAVE
    Consente di eseguire un comando SAVLIB, SAVOBJ o SAV.
    Usa il JAR della Qshell oppure il comando CPYTOARC per comprimere il file di salvataggio dentro ad uno zip file specificato dall'utente, insieme con file di flusso testuale ("readme") anch'esso specificato dall'utente.
     Nota- Il comando si prende cura di porre in CCSID 819 entrambi i file.
  2. DSPZIPSAVE
    Utilizza il JAR della Qshell per visualizzare l'indice del contenuto di uno zip file.
  3. UNZIPSAVE
    Il file zip creato da ZIPSAVE può essere decompresso ("unzipped") anche sul PC.
    Il comando UNZIPSAVE usa il JAR della Qshell oppure il comando CPYFRMARCF per effettuare la decompressione ("unzip") sull'iSeries.
    Il comando dispone anche di una opzione per visualizzare il file "readme" facoltativo e di una opzione per fare l'upload in un save file di QGPL del file di flusso contenente i dati del file di salvataggio.

Tutti i comandi sono provvisti di AIUTO con informazioni di dettaglio.

I comandi sono descritti nelle pagine seguenti. avanti

Installazione della utility ZIPSAVE

Lo zip file di questa utility contiene un file di testo con le istruzioni di installazione. In breve, si tratta di
  • Fare l'upload su IBM System i del file di salvataggio della libreria ZIPSAVE
  • Ripristinare la libreria ZIPSAVE
  • Avviare una procedura REX che crea gli oggetti di ZIPSAVE utilizzando i loro sorgenti.
Per controllare che l'utility funzioni, occorre provare un comando ZIPSAVE.
In genere tutto funziona subito senza problemi.
Tuttavia, nel caso in cui la schermata Immissione Comandi della Qshell emettesse degli strani messaggi, probabilmente manca qualche PTF. Questo è accaduto anche a me su un sistema a V7R2, vedi questa pagina.