-
RPG-Pgm innerhalb CL-Pgm wird aus Java nicht aufgerufen
Stehe vor großem Rätsel und hoffe auf eure Hilfe.
Ich rufe aus Java ein CL-Pgm auf.
Dieses CL-Pgm enthält seinerseits ein RPG-Programm.
Wenn Aufruf aus Java erfolgt , wird dieses RPG-Pgm nicht aufgerufen ?!?!
Wenn Aufruf aus Befehlszeile erfolgt, dann schon. ?!?!
Das CL-Pgm wird in Java aber sehr wohl aufgerufen, das ist über DMPCLPGM beweisbar.
Hier die java-Zeilen für RPG-Aufruf.
(Java läuft übrigens am PC, nicht auf AS400)
------------------------------------------
// Create the path to the program.
programName = new QSYSObjectPathName("STONESOBJ",
"STONEPRLGC", "PGM");
// Create the program call object.
programCall = new ProgramCall(host);
// Create the parameter list (array).
programCall.setProgram(programName.getPath(), parmlist);
log.info("Programm wird aufgerufen:" + programName.getPath()); // findet sich im Log - siehe unten
if (programCall.run() != true)
{
AS400Message msgList = programCall.getMessageList();
String as400Msg = msgList[0].toString();
log.error("Fehler bei Verarbeitung:" + as400Msg); // kein Eintrag im Log
}
host.disconnectService(AS400.COMMAND);
}
------------------------------------------
Eintrag aus Log:
Programm wird aufgerufen:/QSYS.LIB/STONESOBJ.LIB/STONEPRLGC.PGM
Das CL-Programm STONEPRLGC besteht aus folgenden Zeilen
(Es findet sich im Log, wie erwähnt kein Hinweis auf Fehler bei Aufruf. )
ADDLIBLE LIB(STEINE_TST) POSITION(*AFTER STONESOBJ)
ADDLIBLE LIB(STEINE_95T) POSITION(*AFTER STONESOBJ)
ADDLIBLE LIB(QS36_TST) POSITION(*AFTER STONESOBJ)
ENDDO /* PMODE *EQ 'T' */
CALL PGM(STONEPROLG)
DMPCLPGM
ENDE: ENDPGM
Alles scheinbar so einfach.
Ich konnte es kaum glauben, als ich das "Phänomen" bemerkte.
?!?!?!
Vielen Dank im Voraus für Unterstützung
-
Nach dem DMPCLPGM würde ich malnoch einen DSPJOBLOG machen.
Dann kannst du die Fehler besser nachsehen.
Im aktuellen Job läuft dein Programm nämlich nicht.
-
... ich verfolge mit Interesse die diversen Fragen, scheinbar zum selben Problem: was soll dieser Wackelhaufen mal bezwecken, wenn er denn nicht mehr umfällt???
-
Das Neuprogrammieren denke ich mal.
-
Ist denn die Bibliotheksliste richtig gesetzt?
Birgitta
-
Ich würde mal ganz stark darauf tippen das die LIBL nicht sauber ist, da wahrscheinlich eine andere JOBD verwendet wird.
-
Die Libl wird im CLP ja geändert, der Aufruf direkt funktioniert ja auch.
Das problem ist, dass Java in einem eigenen Job läuft.
Da hilft dann nur das Joblog des Javajob's.
-
Stellt sich die Frage ob der Job-Aufruf überhaupt auf der AS400 ankommt, da wie erwähnt, das Java-Programm auf dem PC läuft.
kf
-
So wie beschrieben wurde das CLP ja ausgeführt da der enthaltene Dump vorhanden ist.
Daran kann es also nicht scheitern.
Der Fehler muss in dem aufgerufenen RPG liegen.
Vielleicht wird es ja aufgerufen macht aber nicht das was es soll (z.B. Prüfungen auf User, Mandant u.ä.).
Dies kann man ggf. per
STRSRVJOB auf den Javajob
STRDBG auf das CLP und RPG
analysieren.
-
addlible immer auf stonesobj?
Hallo zusammen,
sollte man nicht den addlible genauer definieren.
In seinem CL steht immer after stonesobj.
addlible lib(stonesobj)
addlible lib(steine_95) position(*after stonesobj)
addlible lib(steine_96) position(*after steine_95)
etc.
call pgm(stonesobj/stoneprlog)
vielleicht liegt es daran, dass die Libl nicht ganz sauber ist.
Gruss
Thomas
---------------------------------------------------------
 Zitat von hartmuth
Stehe vor großem Rätsel und hoffe auf eure Hilfe.
Ich rufe aus Java ein CL-Pgm auf.
Dieses CL-Pgm enthält seinerseits ein RPG-Programm.
Wenn Aufruf aus Java erfolgt , wird dieses RPG-Pgm nicht aufgerufen ?!?!
Wenn Aufruf aus Befehlszeile erfolgt, dann schon. ?!?!
Das CL-Pgm wird in Java aber sehr wohl aufgerufen, das ist über DMPCLPGM beweisbar.
Hier die java-Zeilen für RPG-Aufruf.
(Java läuft übrigens am PC, nicht auf AS400)
------------------------------------------
// Create the path to the program.
programName = new QSYSObjectPathName("STONESOBJ",
"STONEPRLGC", "PGM");
// Create the program call object.
programCall = new ProgramCall(host);
// Create the parameter list (array).
programCall.setProgram(programName.getPath(), parmlist);
log.info("Programm wird aufgerufen:" + programName.getPath()); // findet sich im Log - siehe unten
if (programCall.run() != true)
{
AS400Message msgList = programCall.getMessageList();
String as400Msg = msgList[0].toString();
log.error("Fehler bei Verarbeitung:" + as400Msg); // kein Eintrag im Log
}
host.disconnectService(AS400.COMMAND);
}
------------------------------------------
Eintrag aus Log:
Programm wird aufgerufen:/QSYS.LIB/STONESOBJ.LIB/STONEPRLGC.PGM
Das CL-Programm STONEPRLGC besteht aus folgenden Zeilen
(Es findet sich im Log, wie erwähnt kein Hinweis auf Fehler bei Aufruf. )
ADDLIBLE LIB(STEINE_TST) POSITION(*AFTER STONESOBJ)
ADDLIBLE LIB(STEINE_95T) POSITION(*AFTER STONESOBJ)
ADDLIBLE LIB(QS36_TST) POSITION(*AFTER STONESOBJ)
ENDDO /* PMODE *EQ 'T' */
CALL PGM(STONEPROLG)
DMPCLPGM
ENDE: ENDPGM
Alles scheinbar so einfach.
Ich konnte es kaum glauben, als ich das "Phänomen" bemerkte.
?!?!?!
Vielen Dank im Voraus für Unterstützung
-
Danke übrigens für die rege Beteiligung.(Über die neuesten Reaktionen habe ich keine Email-Verst. erhalten)
Das Problem hat sich tatsächlich verlagert.
Obwohl lt. CL-Dump die Variable PMod korrekt gesetzt ist, und somit das Ändern der *Libl auslösen müßte, wird die *Libl nicht verändert. Damit wird LEERE Datei verarbeitet und kein Ausdruck produziert, weil das Pgm im Zyklus läuft.
Warum die Bibl.liste nicth geändert wrid, ist mir noch "schleierhaft".
Aber dieses Problem ist mir lieber, weil es sich im CL-Pgm abspielt.
-
Das Ändern der Libl findet wohl unter einer Bedingung statt.
Ggf. stimmt diese nicht oder die Parameterübergabe ist nicht korrekt.
Hier ist zu erwähnen, dass java in Unicode arbeitet und die AS/400 in EBCDIC.
In wie weit eine automatische Umsetzung in Java-Klassen erfolgt weiß ich nicht.
Empfehlenswert ist daher für solche Aktionen das Ganze mit SQL zu machen und ggf. CREATE PROCEDURE für diese Programme durchzuführen.
Die Datenumsetzung wird dann automatisch von SQL erledigt.
Außerdem gestalten sich die Aufrufe erheblich einfacher.
Wenn kein Rückgabewert benötigt wird kann jedes Programm einfach in SQL per CALL aufgerufen werden.
Similar Threads
-
By Josie314 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 24-07-12, 07:21
-
By Vicky-B in forum NEWSboard Java
Antworten: 17
Letzter Beitrag: 06-05-08, 11:05
-
By Badener in forum NEWSboard Java
Antworten: 5
Letzter Beitrag: 13-07-06, 17:09
-
By hoeppe in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 22-07-05, 09:46
-
By PGMR in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 02-02-05, 13:10
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks