Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)

Ein Memorandum zum Aufrufen von Java-Methoden aus ILE RPG. Es wird auch im "IBM Rational Development Studio für i ILE RPG-Programmierhandbuch" (IBM i Version 7.2) beschrieben, aber es wurde nicht sehr detailliert geschrieben, also habe ich es tatsächlich versucht.

Die ausgeführte Umgebung von IBM i ist Version: V5R4, Java: 1.4.2. (Es funktionierte auch unter V7R2 und Java 1.8.0.)

Um es ein wenig praktischer zu machen, habe ich ein Programm erstellt, das den Status laufender Jobs zurückgibt. Übergeben Sie eine Zeichenfolge (Jobname) als Argument und geben Sie die Zeichenfolge (Status) zurück. (Wenn derselbe Jobname mehrmals existiert, wird der Status des ersten erworbenen Jobs zurückgegeben.)

IBM i-Umgebungsprüfung

Es ist in Ordnung, wenn der folgende Befehl die Java-Version zurückgibt.

CHGJOB CCSID(5035)
STRQSH
java -version

Ordnerstruktur

Die Ordnerstruktur von IFS unter IBM i lautet wie folgt.

/Root
  |-JavaApps
     |-/bin
        |-/mypackage
            |-As400Funcs.class
     |-/lib
        |-jt400.jar
     |-/src
        |-/mypackage
            |-As400Funcs.java

Java-Programmvorbereitung

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;
	}
}

Java-Programmkompilierung und Testausführung

Umgebungsvariablen festlegen. (Bitte melden Sie sich einmal ab, um sicherzugehen.)

ADDENVVAR ENVVAR(CLASSPATH) VALUE('/JavaApps/bin:/JavaApps/lib/jt400.jar')

Kompilieren und testen (QSHELL)

javac -d /JavaApps/bin /JavaApps/src/mypackage/As400Funcs.java
java mypackage/As400Funcs

Im Beispiel war der Jobname des Arguments "DSP01". Bitte geben Sie den Job an, der tatsächlich ausgeführt wird. Es ist in Ordnung, wenn Sie den Status korrekt erhalten können.

RPG-Programme vorbereiten und kompilieren

GETJOBSTSR.rpgle


      *                                                                                      
      *Beispielprogramm, das JAVA-Methoden aufruft
      *                                                                                      
                                                                                             
     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')      //Rückgabetyp
     D  string                         O   CLASS(*JAVA:'java.lang.String') Const//Parameter
                                                                                  
     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) 

Führen Sie das RPG-Programm aus

CALL GETJOBSTSR PARM('DSP01') 

Es ist in Ordnung, wenn der Auftragsstatus auf dem Bildschirm angezeigt wird.

Fehler "JAVA-Ausnahme beim Aufrufen der JAVA-Methode empfangen"

java.lang.NoClassDefFoundError

In den meisten Fehlerfällen ist die Umgebungsvariable "CLASSPATH" falsch. Insbesondere sobald RPG ausgeführt wird, beginnt die JVM mit diesem Job und dann

ADDENVVAR ENVVAR(CLASSPATH) VALUE('/JavaApps/bin:/JavaApps/lib/jt400.jar')

** Wird nicht reflektiert ** auch wenn ausgeführt wird. (Es scheint, dass Sie die JVM nicht neu starten können. Sie müssen sich einmal abmelden.)

Recommended Posts

Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Rufen Sie Kotlins versiegelte Klasse von Java aus an
Rufen Sie die Super-Methode in Java auf
Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf
GetInstance () aus einer @ Singleton-Klasse in Groovy aus Java
Rufen Sie Java von JRuby aus auf
So erhalten Sie eine Klasse von Element in Java
Java-Programmierung (Klassenmethode)
[Java] KFunction von Method / Constructor in Java abrufen [Kotlin]
Rufen Sie eine Methode mit Kotlins Rückrufblock von Java aus auf
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
Rufen Sie ein in Swift geschriebenes Programm von Processing (Java) auf.
Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
[Kotlin] Holen Sie sich Java Constructor / Method von KFunction und rufen Sie es auf
Rufen Sie Chain from Chain in Spring Integration auf
[Java] Objektorientierte Syntaxklassenmethode / Argument
Automatische Methode zur Größenänderung von Fotos von Java
Behandeln Sie Ihre eigenen Anmerkungen in Java
StringBuffer- und StringBuilder-Klasse in Java
Rufen Sie die Java-API von TensorFlow von Scala aus auf
[java] Was ich getan habe, als ich Listen in meiner eigenen Klasse verglichen habe
[Java] Wrapper, der die private Methode eines Objekts von außerhalb der Klasse ausführt
Lernen Sie Deep Learning von Grund auf in Java.
[Java] Übergeben Sie Argumente an den Konstruktor in Mockito / Set default call to method an callRealMethod
Java-Methode
Java (Methode)
Rufen Sie die Java-Bibliothek von C mit JNI auf
Rufen Sie die GitHub-API über Javas Socket-API Teil2 auf
Verstehen Sie die Java-Oberfläche auf Ihre eigene Weise
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Parallelitätsmethode in Java mit grundlegendem Beispiel
[Anfänger] Java-Methode / Klasse / externe Bibliothek [Anmerkung 23]
Schlüssel vom Wert in Java Map umkehren
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
Warum nennt Java eine Datei eine Klasse?
Was ist die Hauptmethode in Java?
Java-Methode
Klassenmethode
[Java] -Methode
Abrufen des Verlaufs vom Zabbix-Server in Java
Erstellen einer Matrixklasse in Java Teil 1
[Java Spring MVC] Ich möchte DI in meiner eigenen Klasse verwenden
Rufen Sie die visuelle Erkennung im Watson Java SDK auf
[Java] Instanzmethode, Instanzfeld, Klassenmethode, Klassenfeld, Konstruktorzusammenfassung
Elementoperationsmethode in Appium TIPS (Java)
Beim Aufrufen von println usw. aus einer externen Java-Klassendatei in Processing
[Java] -Methode
Benennen und rufen Sie in Ruby übergeordnete Klassenmethoden explizit auf
Inkrementiert durch das dritte Argument der iterierten Methode der aus Java9 hinzugefügten Stream-Klasse
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
[Java] Behandlung von Java Beans in der Methodenkette
[Java] Dynamischer Methodenaufruf durch Reflektion des Aufzählungstyps (Aufzählung)
Ich habe versucht, eine Java-Methode von ABCL zu verwenden
Textextraktion in Java aus PDF mit pdfbox-2.0.8
[Java SE 11 Silver] Zusammenfassung der Arrays-Klassenmethoden [Java-Anfänger]
Java ab Anfänger, Klassendeklaration / Objekterzeugung