EDIT: Ich sehe Fuerchau war schneller, dafür gibt's gleich ein Beispiel.
Laut API bieten ProgrammCalls kein Timeout.
Für den genauen Ratschlag müsste ich noch wisssen, ob du das Programm auf der AS/400 oder woanders läuft...
Unabhängig davon, aber die 2 Möglichkeiten:
1. via JDBC-Connection und CallableStatement. Dort gibt es ein Querytimeout. Um das Programm in eine StoredProcedure binden, suche im Forum.
2. einen Überwachungsthread starten
etwas so wie hier:
Hier die Klasse Timeguard:Code:int waitSec = 900; int killTime = 30; Thread timeGuard = new Thread(new TimeGuard(waitSec+killTime, Thread.currentThread())); try { this.log("*** Warte auf Arbeit .... ***"); timeGuard.start(); DQData = dq.read(waitSec); } catch (InterruptedException e ) { this.log ( "TimeOut - Wiederanlauf in 2 Minunten" ); ..... } finally { timeGuard.interrupt(); }
Einschränkung: Wenn man es ganz genau haben will, müsste man noch um ein Syncobject einbauen.Code:public class TimeGuard extends Thread { private long waitTime; private Thread callThread; public TimeGuard (int waitTimeSec, Thread callThread) { this.waitTime = waitTimeSec * 1000; this.callThread = callThread; } public void run() { try { Thread.sleep(waitTime); callThread.interrupt(); // Timeout, Caller unterbrechen } catch (InterruptedException e) { // Normalfall } } }
Ich hab schon irgendwo eine elegantere Lösung gesehen, lebe mit der aber auch ganz gut.
Falls es noch Fragen gibt nur zu.
Robert P.
PS. Wie man an diesem Beispiel sieht, läßt einen das Timeout der DataQueues auch im Stich, wenn der Listener am PC läuft und die AS/400 z.B. niederfährt --> ohne Timeout wartet der Listener dann ewig (auch wenn neue Einträge in die Dataqueue kommen würden)
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks