Un mémorandum pour appeler les méthodes Java de ILE RPG. Il est également décrit dans «IBM Rational Development Studio for i ILE RPG Programmer's Guide» (IBM i version 7.2), mais il n'a pas été écrit en détail, donc je l'ai essayé.
L'environnement d'IBM i qui a été exécuté est la version: V5R4, Java: 1.4.2. (Il a également fonctionné sur V7R2 et Java 1.8.0.)
Pour le rendre un peu plus pratique, j'ai créé un programme qui renvoie l'état des travaux en cours. Passez une chaîne de caractères (nom du travail) comme argument et renvoyez la chaîne de caractères (statut). (Si le même nom de travail existe plusieurs fois, l'état du premier travail acquis est renvoyé.)
Ce n'est pas grave si la commande suivante renvoie la version Java.
CHGJOB CCSID(5035)
STRQSH
java -version
La structure des dossiers d'IFS sur IBM i est la suivante.
/Root
|-JavaApps
|-/bin
|-/mypackage
|-As400Funcs.class
|-/lib
|-jt400.jar
|-/src
|-/mypackage
|-As400Funcs.java
As400Funcs.java
package mypackage;
import com.ibm.as400.access.AS400;
import com.ibm.as400.resource.RJob;
import com.ibm.as400.resource.RJobList;
import com.ibm.as400.resource.ResourceException;
public class As400Funcs {
public static void main(String[] args) {
System.out.println(GetJobSts("DSP01"));
}
public static String GetJobSts(String searchJob) {
AS400 as400 = new AS400("192.168.XXX.XXX" ,"MYUSER" ,"MYPASS");
//init
String resultStatus = "NONE";
//get JobList
RJobList jobList = new RJobList(as400);
try {
jobList.setSelectionValue(RJobList.PRIMARY_JOB_STATUSES, new String[] { RJob.JOB_STATUS_ACTIVE });
jobList.setSelectionValue(RJobList.JOB_NAME,searchJob);
jobList.open();
jobList.waitForComplete();
//Get First Job
long numberOfJobs = jobList.getListLength();
for (long i = 0; i<numberOfJobs; ++i){
RJob ajob = (RJob)jobList.resourceAt(i);
RJob rjob = new RJob(as400,searchJob,(String)ajob.getAttributeValue(RJob.USER_NAME),(String)ajob.getAttributeValue(RJob.JOB_NUMBER));
resultStatus = (String)rjob.getAttributeValue(RJob.ACTIVE_JOB_STATUS);
System.out.println("JOB Status:"+resultStatus);
System.out.println("JOB Name:"+searchJob);
break;
}
} catch (ResourceException e) {
e.printStackTrace();
}
return resultStatus;
}
}
Définissez les variables d'environnement. (Veuillez vous déconnecter une fois pour vous en assurer.)
ADDENVVAR ENVVAR(CLASSPATH) VALUE('/JavaApps/bin:/JavaApps/lib/jt400.jar')
Compilation et exécution de test (QSHELL)
javac -d /JavaApps/bin /JavaApps/src/mypackage/As400Funcs.java
java mypackage/As400Funcs
Dans l'exemple, le nom de travail de l'argument était "DSP01", Veuillez spécifier le travail en cours d'exécution. Ce n'est pas grave si vous pouvez obtenir le statut correctement.
GETJOBSTSR.rpgle
*
*Exemple de programme qui appelle les méthodes JAVA
*
H DFTACTGRP(*NO)
D MAIN PR EXTPGM('GETJOBSTSR')
D 10A
D MAIN PI
D searchJob 10A
D newString PR O ExtProc(*JAVA:
D 'java.lang.String':
D *CONSTRUCTOR)
D Class(*JAVA:'java.lang.String')
D bytes 10A Const Varying
D GetJobSts PR O ExtProc(*JAVA:
D 'mypackage.As400Funcs'
D :'GetJobSts')
D STATIC
D CLASS(*JAVA:'java.lang.String') //Type de retour
D string O CLASS(*JAVA:'java.lang.String') Const//Paramètres
D getBytes PR 10A ExtProc(*JAVA:
D 'java.lang.String':
D 'getBytes')
D Varying
D string1 S O Class(*JAVA:'java.lang.String')
D StringResult S O Class(*JAVA:'java.lang.String')
D StringDisply S 10A Varying
/Free
String1 = newString(searchJob) ;
StringResult = GetJobSts(String1) ;
StringDisply = getBytes(StringResult) ;
dsply StringDisply;
*inLR = *on ;
return ;
/End-Free
CRTBNDRPG PGM(MYLIB/GETJOBSTSR) SRCFILE(MYLIB/MYSRC) DBGVIEW(*SOURCE)
CALL GETJOBSTSR PARM('DSP01')
C'est OK si l'état du travail est affiché à l'écran.
java.lang.NoClassDefFoundError
Dans la plupart des cas d'erreur, la variable d'environnement "CLASSPATH" est incorrecte. Surtout une fois le RPG exécuté, la JVM démarre avec ce travail, puis
ADDENVVAR ENVVAR(CLASSPATH) VALUE('/JavaApps/bin:/JavaApps/lib/jt400.jar')
** N'est pas reflété ** même si est exécuté. (Il semble que vous ne puissiez pas redémarrer la JVM, vous devez vous déconnecter une fois.)
Recommended Posts