IV: Accès à l`AS400 en JAVA : 4.1 Organisation CLIENT

publicité
IV: Accès à l’AS400 en JAVA :
4.1 Organisation CLIENT-SERVEUR de l'AS400
Ressources du système OS400 :
- FILES : fichiers physiques et logiques , ils contiennent les données ainsi que les vues et les
jointures sur ces données ( tables et autres éléments de DB2/400).
- IFS : Integrated File System , c’est un système de fichiers parallèle au précédent , il permet
de manipuler de fichiers organisés sous forme de bytes dans un environnement de type
SHELL-UNIX.Les fichiers de ce système sont organisés en arborescence.
- *DTAQ : data queues ; elles permettent l’échange de données entre programmes .
- Spooled files : fichiers d’impression .
- *PGM : programmes C,COBOL,CL , RPG ou autres
Serveurs du système OS400 :
- DB Server et DDM : serveurs permettant l’accès aux fichiers physiques( en Lecture-mise à
jour-écriture) et logiques ainsi que leur interrogation via des requêtes SQL .
- Byte stream Server : serveur permettant l’accès aux fichiers IFS(lecture-écriture-mise à jour)
.
- Dist Pgm call Server : ce serveur permet l’activation de programmes tournant sur l’AS400 à
partir d’un client distant ainsi que la récupération des messages générés par ce programme .
- DataQ Server : il permet l’accès aux DATAQ
- Signon Server : il gère les connexions à l’AS400(user et mot de passe)
- Network Print Server : il gère les accès aux fichiers d’impression.
Classes et Objets JAVA sur le CLIENT :
- classe AS400 : elle contient en ensemble de sockets(une par serveur) . Il est possible de
créer plusieurs connexions AS400 simultanées dans la même application cliente , mais il est
préférable pour des raisons d’efficacité de ne créer qu’une seule connexion à la fois .
- classe JDBC : JAVA DATA BASE CONNECTIVITY : elle permet l’accès aux DB via des
requêtes SQL .
- classe DataQueue : représente des data queues .
- classe Program : représente un programme activable à distance .
- objets Serveurs : objets prédéfinis représentant un des serveurs de l’OS400.
Remarques :
-Pour les classes et objets mentionnés ci-dessus soient accessibles à partir du client , il faut
installer sur celui-ci le package com.ibm.as400.access . Ce package est distribué gratuitement
par IBM et il s’installe indifféremment sur des plates-formes UNIX,LINUX,MICROSOFT ou
AS400. Ces classes sont regroupées dans une archive intitulée jt400.jar .
-Pour accéder à ce package depuis un environnement Microsoft , il faut enregistrer cette
archive sur le poste client dans un répertoire quelconque de la racine (par exemple packIBM)
et modifier la variable d'environnement classpath :
classpath = . ;c:\packIBM\jt400.jar ;
ou compiler explicitement avec l’option classpath :
java -classpath . ;c:\packIBM\jt400.jar MaClasse.java
ou encore paramétrer les librairies de son environnement de développement
(Jcreator,Jbuilder,Netbeans,Eclipse,Websphere Studio etc…) pour qu’elles pointent sur
l’archive jt400.jar .
Vous trouverez dans le bric-à-brac le package jt400.jar permettant l'accès à l'AS400 en JAVA
4.2 L'Integrated File System(IFS) et le QSHELL
L’ IFS vous permet d’accéder au système de fichiers de l’AS400 selon une organisation en
dossiers à la manière des environnements WINDOWS ou UNIX . La librairie QSYS apparaît
alors sous la forme d’un dossier QSYS.LIB rattaché à la racine .
Pour gérer cet environnement on utilise soit le QSHELL , sorte de shell unix permettant
d’enter des commandes en mode texte , soit le I5 NAVIGATOR, permettant un accès
graphique à l’arborescence à la manière de l’explorateur WINDOWS .
Pour activer le QSHELL à partir de la ligne de commande CL taper : QSH . Pour sortir du
QSHELL taper <F3> .
cd /
$
ls
FICS
ISEtools
QDLS
QFileSvr.400
QIBM
$
QJAVA
QNTC
QOPT
QOpenSys
QSR
QSYS.LIB
QTCPTMM
dev
etc
home
hp
javaIBM
publichtml
tmp
usr
Les principaux répertoires de l’IFS sont :




ROOT  arborescence typée UNIX de l’AS400
o home  répertoires home des utilisateurs (disque Z : )
o QIBM  ensemble de fichiers propres à l’AS400
 fichiers d’entête .h pour le langage C
 archive jt400.jar
 les JDK
 fichiers nécessaires au fonctionnement du serveur websphere
etc..
QSYS.LIB  arborescence classique de l’OS400
QOpenSys
 arborescence du système AIX
QOPT  lecteur de DVD
Pour visionner vos fichiers OS400:
cd /QSYS.LIB
cd J…..LIB
ls

COPIE.PGM
DDSDEG.FILE
DTAQ1.DTAQ
DTAQ2.DTAQ
DTATEST.DTAARA
DTATEST2.DTAARA
DTFACP.FILE
ECR.FILE
ECREX1.FILE
EX1.PGM
EXEMPLE1.FILE
EXEMPLE1.PGM
EXEMPLE1B.FILE
$
OPER.FILE
OPER.PGM
PFVUECLI.FILE
PGMCLI2.PGM
PGMSUB.PGM
PGMSUB2.PGM
PGMSUB3.PGM
PRCLI2.FILE
PRODUP.FILE
PROG.FILE
QCLSRC.FILE
QDDSSRC.FILE
QJAVASRC.FILE
RPGDEG.FILE
RUPTURE.PGM
SNDMES.PGM
SQLAS4002.FILE
SUB1.FILE
TABLE1.FILE
TEST1.PGM
TEST2.PGM
TESTCAT.PGM
TESTDTA.DTAARA
TESTMSG.PGM
VUEPER.FILE
Les droits dans l’espace « ROOT » sont gérés selon un modèle proche de UNIX : on utilise
notamment les droits :
LECTURE-ECRITURE-EXECUTION ainsi que EXCLUDE .
Ces droits sont gérables par I5 Navigator ou par la commande chmod en ligne de commande
QSH .
4.3 Préparation de votre environnement de travail
Modification de votre profil utilisateur :
Vous disposez dans le répertoire home , d’un répertoire personnel correspondant à votre
username (J…) . Pour que la commande QSH vous dirige directement dans ce répertoire ,
vous devez modifier votre profil utilisateur :
(autres paramètres)
- Répertoire Initial : /home/J….
Ce répertoire correspond à votre disque Z:\
Création de votre espace de travail
Dans votre répertoire personnel QSHELL créez un répertoire « mesClasses » à l’aide de la
commande mkdir .
Préparation de votre .profile
Toujours en mode CL :
EDTF <F4>
 Stream File : /home/J…./.profile
Vous accédez alors à un éditeur type SEU , à l’aide duquel vous introduisez :
export -s
CLASSPATH=.:/home/j…/mesClasses:/home/classesJava:/home/classe
sJava/jt400.jar
echo "Bienvenue dans l'environnement QSHELL de l'I5 "
Le positionnement de la variable CLASSPATH vous permettra d’activer les différentes
classes JAVA nécessaires à votre application à partir de l’environnement QSH . Vous devez
également positionner cette variable à partir de l’environnement CL .
Positionnement de CLASSPATH en mode CL :
En mode CL :
ADDENVVAR ENVVAR(CLASSPATH)
VALUE('=.:/home/j…/mesClasses:/home/classesJava:/home/classesJava/jt400.jar
')
Cette variable d’environnement est liée au JOB interactif dans lequel elle est positionnée , elle
ne subsiste donc pas d’une session à l’autre . Il est donc conseillé d’intégrer la commande cidessus dans un petit programme CL que l’on appellera lors de l’entrée en session grâce à
l’option « programme initial à appeler » du profil utilisateur .
PGM
ADDENVVAR CLASSPATH '.:/home/j0001/mesClasses+
/home/classesJava:/home/classesJava/jt400.jar’
ENDPGM
4.4 Création de sources JAVA
Pour créer des sources java sur l’AS400 on peut :
-encoder le programme depuis une plate-forme LINUX ou WINDOWS puis le transférer par
FTP (il faut se connecter sur son home directory)
-idem mais utiliser le copier-coller pour transférer le fichier à l’aide de I5 NAVIGATOR .
-encoder le programme à l’aide de l’utilitaire EDTF sur l’AS400 .
-paramétrer son environnement de développement afin qu’il dépose ses sources dans le
répertoire Z : \mesClasses
4.5Compilation des sources java et exécution
1°) en mode QSH  javac etc…
on peut alors lancer l’application par la commande java etc…
2°) optimisation
Afin d’accélérer l’exécution des applications JAVA ,l’environnement AS400 offre la
possibilité de créer des programmes optimisés basés sur les classes java obtenues par
compilation classique . Il existe quatre niveaux d’optimisation :
 pas d’optimisation
*INTERPRET
code
10
20
30
40
 optimisation faible
 optimisation moyenne
 optimisation forte
 optimisation totale
appel à la JVM pour interpréter le
full debuggable
debuggage partiel
debuggage partiel
debuggage impossible
Il convient de mettre au point les classes en mode *INTERPRET , puis seulement de les
optimiser .
Pour créer un programme optimisé :
En mode CL  CRTJVAPGM CLSF(‘/home/j…/SQLAS4001.CLASS’)
OPTIMIZE(40)
Remarques :
-La compilation et l’optimisation peuvent être également réalisées à partir du menu contextuel
de l’I5 Navigator .
-La compilation peut également être lancée à partir de votre environnement de développement
Microsoft , il faut alors paramétrer celui-ci afin qu’il utilise une JDK1.4 afin que les classes
générées soient compatibles avec la JDK de l’AS400.
3°)Exécution
en mode CL  RUNJVA CLASS(SQLAS4001)
JAVA
Remarque : Destruction d’un pgm java optimisé :
DLTJVAPGM
CLSF(‘home/j…/SQLAS4001.class’)
Le .class original n’est pas effacé .
4.6 Lancement d'une application JAVA en mode Batch
SBMJOB CMD(JAVA CLASS(SQLAS4001)) CPYENVVAR(*YES)
L’option CPYENVVAR permet de communiquer au batch les variables d’environnement
nécessaires à l’exécution de la commande JAVA ( variable CLASSPATH) .
Les sorties sur le périphérique standard (System.out.println) sont envoyées dans le spoole
d’impression .
4.7 Communication simple avec les DataQueues
Les DataQueues sont objets permettant des canaux de communication entre programmes de
même type ou de types différents (JAVA avec CL par exemple) .
PGM A : msg4 |msg3 |msg2 |msg1| : PGM B
DTAQ
On distingue les DTAQ FIFO : réception de msg1 puis msg2 ,3,4 ,
les DTAQ LIFO : réception de msg4 puis msg 3,2,1 ,
et les KEYED DTAQ qui permettent d'accéder à un message donné suivant une clé .
Sous OS400 , pour créer une file de données :
CRTDTAQ <F4>
Indiquez vos choix, puis appuyez sur ENTREE.
File d'attente de données . . .
Bibliothèque . . . . . . . . .
Type . . . . . . . . . . . . . .
Longueur maximale de poste . .
Forcer sur mémoire secondaire .
Séquence . . . . . . . . . . . .
EMISSION Nom
*CURLIB
Nom, *CURLIB
*STD
*STD, *DDM
10000
1-64512
*NO
*NO, *YES
*FIFO *FIFO, *LIFO, *KEYED
Nous créons ainsi dans la librairie J0001 , deux DATAQUEUES :EMISSION et
RECEPTION .
Nous créons dans les espaces J0001 et J0002 deux programmes java , respectivement
réception et émission .
J0002
J0001
msg
RECEP
RECEPTION.CLASS
EMISSION.CLASS
ack
PROGRAMME D’EMISSION
import com.ibm.as400.access.*;
import clavier.*;
public class Emission {
private static AS400 as400;
private static DataQueue dqInput;
private static DataQueue dqOutput;
public static void main(String args[]) {
try {
as400 = new AS400("localhost","*CURRENT","*CURRENT");
//ou bien "as400i.lan","J0002","mot_de_passe"
dqOutput = new
com.ibm.as400.access.DataQueue(as400,"/QSYS.LIB/J0001.LIB/RECEPTION.DTAQ");
dqInput = new
com.ibm.as400.access.DataQueue(as400,"/QSYS.LIB/J0001.LIB/EMISSION.DTAQ");
String msg;
do{
System.out.print("message (*STOP pour stopper) :");
msg = Lecture.lireString();
dqOutput.write(msg);
DataQueueEntry de = dqInput.read(60); //temps max d’attente
String ack = de.getString();//récupération de l'acusé de réception
if(ack.equals(msg)) System.out.println("message bien envoyé");
}while(!msg.equals("*STOP"));
as400.disconnectAllServices();
System.out.println("déconnexion reussie");
}
catch (Exception e) {System.out.println("erreur ="+e);
}
}
}
PROGRAMME DE RECEPTION
import com.ibm.as400.access.*;
public class Reception {
private static AS400 as400;
private static DataQueue dqInput;
private static DataQueue dqOutput;
public static void main(String args[]) {
try {
as400 = new AS400("localhost","*CURRENT","*CURRENT");//ou bien
"as400i.lan","J0001","mot_de_passe"
dqInput = new
com.ibm.as400.access.DataQueue(as400,"/QSYS.LIB/J0001.LIB/RECEPTION.DTAQ");
dqOutput = new
com.ibm.as400.access.DataQueue(as400,"/QSYS.LIB/J0001.LIB/EMISSION.DTAQ");
String msg;
dqInput.clear();
dqOutput.clear();
//mise à blanc des deux dataqueues
do{
DataQueueEntry de = dqInput.read( -1); //temps d’attente négatif ==>
attente infinie
msg = de.getString(); //récupération du String reçu
System.out.println("reception de : " + msg);
dqOutput.write(msg);
}while(!msg.equals("*STOP"));
as400.disconnectAllServices();
System.out.println("déconnxion reussie");
}
catch (Exception e) {System.out.println("erreur ="+e);
}
}
}
Remarque :
Les deux programmes ci-dessus peuvent très bien tourner sur une machine locale , il suffit
d’indiquer le nom du serveur (as400i.lan ou informatique.hepmbc.be) plutôt que « localhost »
et d’utiliser un username et un password explicite .
Téléchargement