PDA

View Full Version : Java via QSH - ENDJOB abfragen



alex.kretschmer
28-09-16, 19:39
Hallo Forum,

ich bin gerade beim Testen und es geht natürlich nicht Schulbuchmäßig.

Ein Java-Programm soll in einer Methode das JOB-Ende des aufrufenden Batch-Jobs ermitteln.

Hier der Testcode:


AS400 system = new AS400();
ProgramCall pgm = new ProgramCall(system);
pgm.setThreadSafe(true); // Indicates the program is to be run on-thread.

try {
String jobNbr = pgm.getServerJob().getNumber();
String jobUser = pgm.getServerJob().getUser();
String jobName = pgm.getServerJob().getName();


System.out.println("job: " + jobNbr + " " + jobUser + " " + jobName);


Job job = new Job(system, jobName, jobUser, jobNbr);

while (job.getStatus().equals(Job.JOB_STATUS_ACTIVE)) {

// Wait a while.
Thread.sleep(1000);
// Refresh the attribute values.
job.loadInformation();
System.out.println("Job status is: " + job.getStatus());
}

System.out.println("Job status is: " + job.getStatus());

} catch (AS400SecurityException | ErrorCompletingRequestException | IOException | InterruptedException | ObjectDoesNotExistException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



Das Java Programm wird via QSH mit Java -jar aufgerufen.

Leider wird als Job-Daten nicht der zugehörige Stapeljob ermittelt, der die QSH aufruft, sondern ein QSYSWRK-Job:

266472 QUSER QZRCSRVS

Liegt das am JAR?

Wie bekomme ich den ordentlichen Jobnamen meines OS/400 Stapeljobs, der die QSH aufruft, außer das ich ihn als Parameter übergebe?
Klappt natürlich auch nicht bei interaktiver QSH-Konsole

Viele Grüße

Fuerchau
29-09-16, 08:51
Jede JVM wird in einem eigenen Job gestartet, egal ob aus dem Dialog oder Batch.
Beim Start aus QSH hast du sogar 3 Jobs im Spiel:
- den Aufrufer
- den QSH-Job
- den Java-Job
Welchen willst du denn?
Java kommt an den Aufrufer nicht mehr dran, wenn er über QSH gestartet ist.
Allerdings kann man in Java sich bestimmt an ein zentrales "Ereignis" Anwendungsende hängen.
Da weiß ggf. D*B was oder das Java-Toolkit gibt da was her.

BenderD
29-09-16, 09:43
Ein Java-Programm soll in einer Methode das JOB-Ende des aufrufenden Batch-Jobs ermitteln.


... was soll das denn werden? eh der aufrufende Job fertig ist, sägt er alles runter, was im callstack unter ihm ist.

alex.kretschmer
29-09-16, 10:29
@Fuerchau: Danke für die Info. Der erzeugende Batch-Job würde mit CONTROLLED beendet werden - sorry, das hatte ich nicht erwähnt.
Dann hätte o.g. Abfrage das Potential, noch Prozesse abzuschließen und sauber auszusteigen, wenn z.B. das Subsystem beendet wird (mit controlled).

@Bender: Ja, danke für das Zitat und die super schlaue Frage als Antwort.
Daher würde die Funktion bei gesteuertem Jobende verwendet werden.
Es ist keinesfalls untypisch, Jobende abzufragen und sauber aus Prozessen auszusteigen. Abfrage des Systemende-Anzeigers kann man ja auch aus der native Anwendungen abfragen. Somit kann ich auf das "was soll das denn werden" nicht mehr dazu sagen.

BenderD
29-09-16, 10:46
@Fuerchau: Danke für die Info. Der erzeugende Batch-Job würde mit CONTROLLED beendet werden - sorry, das hatte ich nicht erwähnt.
Dann hätte o.g. Abfrage das Potential, noch Prozesse abzuschließen und sauber auszusteigen, wenn z.B. das Subsystem beendet wird (mit controlled).

@Bender: Ja, danke für das Zitat und die super schlaue Frage als Antwort.
Daher würde die Funktion bei gesteuertem Jobende verwendet werden.
Es ist keinesfalls untypisch, Jobende abzufragen und sauber aus Prozessen auszusteigen. Abfrage des Systemende-Anzeigers kann man ja auch aus der native Anwendungen abfragen. Somit kann ich auf das "was soll das denn werden" nicht mehr dazu sagen.

... eigentlich wollte ich Schlaubergern, die ihre Frage schräg formulieren und dann einen Antworter anraunzen ignorieren, aber seis drum.

Sieh dir mal SecurityManager und checkExit an.

D*B

alex.kretschmer
29-09-16, 10:57
Ja, danke für die Info.

Ich weiß nicht, wo die Schlaubergerei und die Schrägheit in meiner Frage hervorkommt.

Außer daß ich vergessen hatte, Controlled zu erwähnen - hätte sich aber auch selbst erschlossen.

Habe nur auf das "was soll das den werden" geantwortet, die ja eher nach Schlaubergerei klingt.

Na, dann nichts für ungut und weiterhin "dickes Fell".

Ich werde mir Deine Tipps gerne weiterhin ansehen!

BenderD
29-09-16, 11:22
Ja, danke für die Info.

Ich weiß nicht, wo die Schlaubergerei und die Schrägheit in meiner Frage hervorkommt.

Außer daß ich vergessen hatte, Controlled zu erwähnen - hätte sich aber auch selbst erschlossen.

Habe nur auf das "was soll das den werden" geantwortet, die ja eher nach Schlaubergerei klingt.

Na, dann nichts für ungut und weiterhin "dickes Fell".

Ich werde mir Deine Tipps gerne weiterhin ansehen!

... du findest in meinem Open Source Project CommandGate ein Beispiel:
http://appserver4rpg.cvs.sourceforge.net/viewvc/appserver4rpg/appserver4rpg/src/de/bender_dv/commandgate/
im CommandGateHandler, bzw. im ExitPreventer

D*B