Les fichiers de l'environnement z / OS (environnement mainframe IBM) sont appelés ensembles de données. Les ensembles de données sont légèrement différents des fichiers Linux, Unix et Windows (*** 1 **). Les caractéristiques de l'ensemble de données et l'exemple d'implémentation du traitement d'entrée / sortie de l'ensemble de données en langage Java sont indiqués ci-dessous.
** * 1 ** Dans l'environnement z / OS, il existe également un environnement Unix appelé USS en plus de l'environnement géré par TSO et JCL. Les fichiers de l'environnement USS sont accessibles à l'aide de l'API Java standard, tout comme les fichiers sous Linux, Unix et Windows.
L'ensemble de données présente les caractéristiques suivantes:
Les ensembles de données présentant les caractéristiques ci-dessus ne peuvent pas implémenter le traitement d'entrée / sortie avec l'API standard Java (package java.io ou package java.nio). Ensuite, vous devez utiliser ** Java Batch Launcher and Toolkit for z / OS (ci-après dénommé JZOS) **. JZOS est une boîte à outils qui prend en charge le développement d'applications Java qui s'exécutent dans l'environnement z / OS et est incluse dans IBM Java for z / OS (voir le lien de référence [JZOS Batch Launcher and Toolkit](https :: pour une présentation de JZOS). //www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.zsecurity.80.doc/zsecurity-component/jzos.html Voir «Lien de référence: JZOS Batch Launcher and Toolkit»).
L'exemple d'application Java qui implémente le traitement d'entrée à partir de l'ensemble de données et l'exemple d'application Java qui implémente le traitement de sortie vers l'ensemble de données sont indiqués ci-dessous (*** 2 **).
** * 2 ** Il existe différents types d'ensembles de données, mais dans ce qui suit, des exemples sont présentés en se concentrant sur des ensembles de données séquentiels similaires aux fichiers Windows et Unix et ayant la structure la plus simple. ..
L'exemple de programme suivant (DSRead.java) lit les enregistrements de l'ensemble de données `` USER01.TEST.DATA '' et les écrit dans la sortie standard. On suppose que les données sont codées en «UTF-8 ».
DSRead.java
package sample;
import com.ibm.jzos.RecordReader;
import com.ibm.jzos.ZFile;
public class DSRead {
public void main(String args[]) throws Exception {
String ddName = ZFile.allocDummyDDName();
String dsName = "USER01.TEST.DATA";
RecordReader reader = null;
int x = 0;
try {
ZFile.bpxwdyn("alloc fi("+ddName+") da("+dsName+") shr reuse");
reader = RecordReader.newReaderForDD(ddName);
byte[] recordBuf = new byte[reader.getLrecl()];
while ((reader.read(recordBuf)) >= 0) {
String rec = new String(recordBuf, "UTF-8");
System.out.println(rec);
x++;
}
System.out.println("record count : "+x);
} catch(Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
ZFile.bpxwdyn("free fi("+ddName+")");
}
}
}
** C'est le point! **
ZFile # bpxwdyn
.
--Cette méthode BPXWDYN Pour l'allocation dynamique (attribution dynamique d'ensembles de données par programmation). ibm.zos.v2r2.bpxb600 / wdyn.htm Appelle une interface de commande appelée "lien de référence: BPXWDYN"). Spécifiez la chaîne de commande (" alloc ... "
, " free ... "
) que vous souhaitez exécuter comme argument.
--Spécifiez le nom DD pour la commande alloc (*** 3 **) et la commande libre. Le nom DD est un nom logique qui identifie l'ensemble de données dans le programme. Un nom DD unique est généré avec la méthode ZFile # allocDummyDDName
.RecordReader
.
--Une instance de RecordReader
est obtenue en appelant la méthode d'usine RecordReader # newReaderForDD
avec le nom DD mentionné ci-dessus. Pour plus de détails sur l'API, reportez-vous au lien de référence [JZOS API (Javadoc)](http://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.zsecurity.api.80.doc/com.ibm. .jzos / index.html Veuillez vous reporter à "Lien de référence: API JZOS (Javadoc)").** * 3 ** ʻalloc est une abréviation pour ʻallocate
. Un exemple spécifique de la commande allocate est un lien de référence [Exemple de commande allocate](http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ikjc500/ikj2l2_ALLOCATE_command_examples.htm
Voir "Lien de référence: exemple de commande allocate").
L'exemple de programme suivant (DSWrite.java) écrit les enregistrements en mode écrasement dans l'ensemble de données déjà existant «USER01.TEST.DATA ». L'ensemble de données'USER01.TEST.DATA 'a une longueur fixe et une longueur d'enregistrement logique de 80 octets, et génère un enregistrement de 3 lignes créé par la méthode getTestData
. Les données doivent être codées en UTF-8 et sorties.
DSWrite.java
package sample;
import com.ibm.jzos.RecordWriter;
import com.ibm.jzos.ZFile;
public class DSWrite {
public void main(String args[]) throws Exception {
String ddName = ZFile.allocDummyDDName();
String dsName = "USER01.TEST.DATA";
RecordWriter writer = null;
int x = 0;
try {
ZFile.bpxwdyn("alloc fi("+ddName+") da("+dsName+") old reuse");
writer = RecordWriter.newWriterForDD(ddName);
int lrecl = writer.getLrecl();
String records[] = getTestData();
for (String record : records) {
writer.write(record.getBytes("UTF-8"), 0, lrecl);
x++;
}
System.out.println("record count : "+x);
} catch(Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
ZFile.bpxwdyn("free fi("+ddName+")");
}
}
private String[] getTestData() {
String[] records = new String[3];
records[0] = String.format("%-80s", "AAAAAAAAAAAAAAAAAAAA");
records[1] = String.format("%-80s", "BBBBBBBBBBBBBBBBBBBB");
records[2] = String.format("%-80s", "CCCCCCCCCCCCCCCCCCCC");
return records;
}
}
** C'est le point! **
DSRead.java
ci-dessus.RecordWriter
.
--Une instance de RecordWrite
est obtenue en appelant la méthode d'usine RecordWriter # newWriterForDD
avec le nom DD. Pour plus de détails sur l'API, reportez-vous au lien de référence [JZOS API (Javadoc)](http://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.zsecurity.api.80.doc/com.ibm. .jzos / index.html Voir «API JZOS (Javadoc)»).JZOS Batch Launcher and Toolkit https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.zsecurity.80.doc/zsecurity-component/jzos.html
JZOS API (Javadoc) http://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.zsecurity.api.80.doc/com.ibm.jzos/index.html
BPXWDYN https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxb600/wdyn.htm
** Exemple de commande allocate ** http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ikjc500/ikj2l2_ALLOCATE_command_examples.htm
Recommended Posts