Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS

Aperçu

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.

Caractéristiques du jeu de données

L'ensemble de données présente les caractéristiques suivantes:

  1. Pour l'entrée et la sortie, vous devez d'abord allouer (associer le jeu de données au processus) avant d'ouvrir.
  2. Lors de la création d'un nouvel ensemble de données, des attributs tels que le format d'enregistrement, la longueur d'enregistrement logique, la taille de bloc (une collection de plusieurs enregistrements logiques est appelée un bloc) et l'organisation de l'ensemble de données doivent être spécifiés et alloués. ..
  3. En entrée et en sortie, il doit être libre (libérer le jeu de données du processus dans le sens inverse de l'allocation) après la fermeture.
  4. La position du délimiteur d'enregistrement est identifiée par la longueur de l'enregistrement et non par le caractère de saut de ligne.

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

Exemple de programme (traitement d'entrée à partir de l'ensemble de données)

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

** * 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").

Exemple de programme (traitement de sortie vers l'ensemble de données)

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

Lien de référence

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

Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS
Essayez d'utiliser l'API Stream en Java
Essayez d'utiliser l'API Emotion d'Android
Essayez d'utiliser la télécommande Wii en Java
Essayez d'appeler le service CORBA depuis Spring (Java)
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
Sortie de la valeur maximale d'un tableau à l'aide de la sortie standard Java
Essayez d'implémenter le tamis Eratostenes en utilisant la bibliothèque standard de Java
Appelons IBM Watson Assistant 2018-07-10 à partir du SDK Java.
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Essayez d'utiliser RocksDB avec Java
Essayez de gratter en utilisant Java [Note]
Utilisation de Docker depuis Java Gradle
[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque
Comparaison Java à l'aide de la méthode compareTo ()
Essayez d'utiliser Redis avec Java (jar)
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'utiliser le système de messagerie Pulsar
Essayez d'utiliser le traçage de méthode IBM Java
La route de JavaScript à Java
Exemple de code utilisant Minio de Java
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
[Java] Où avez-vous essayé d'utiliser java
[Java] Essayez de résoudre le problème de Fizz Buzz en utilisant un traitement récursif
Essayez de transmettre des valeurs de Java Servlet à l'application iPhone à l'aide de JSON
Essayez d'utiliser le framework Java Nablarch [Application Web]
Essayez d'utiliser || au lieu de l'opérateur ternaire
Essayez d'utiliser le service sur Android Oreo
Formation des nouveaux arrivants à l'aide de la programmation Web-Basic à l'aide de Java-
Kick ShellScript sur le serveur depuis Java
Accédez à l'API REST Salesforce depuis Java
Étude de Java Essayez d'utiliser un scanner ou une carte
Essayez d'utiliser l'API au format JSON en Java
Essayez d'appeler le service CORBA sur Java 11+
Connectez-vous de Java à MySQL à l'aide d'Eclipse
Essayez d'exécuter Kubernetes Job à partir de Java
Essayez d'utiliser l'API REST de JobScheduler - implémentation Java RestClient--
Essayez d'appeler Nim depuis Java via JNI
[Java] Générez une liste restreinte à partir de plusieurs listes à l'aide de l'API Stream
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de Java
Essayez d'appeler Watson NLU qui semble prendre en charge le japonais à partir du SDK Java
[Java] Obtenez et affichez la date 10 jours plus tard à l'aide de l'API Time ajoutée à partir de Java 8.
Essayez d'accéder au système sur site à partir de SAP Cloud Platform --JAVA App Edition
Accédez à Forec.com depuis Java en utilisant Axis2 Enterprise WSDL
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
Essayez d'utiliser la classe de test RestClient de JobScheduler REST-API-Java-
Utilisation de JUnit à partir de la ligne de commande sur Ubuntu
[Java] Réglez l'heure depuis le navigateur avec jsoup
Formation des nouveaux arrivants à l'aide de la programmation / cours Web-Basic en
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez une recherche similaire de recherche d'images à l'aide du SDK Java [Recherche]
Essayez Progate Free Edition [Java II]
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Essayez la communication en utilisant gRPC sur un serveur Android + Java
[Java] Essayez de résoudre le problème de Fizz Buzz