[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Nov 2009
    Beiträge
    222

    Job darf nicht mit anderem laufen

    Guten Tag allerseits,
    wir haben hier 2 jobs die nicht gleichzeitig laufen dürfen.

    job-a wird interaktiv und im batch gerufen, darf nicht mit Job-b zusammen laufen, darf aber mit anderen Job-a Jobs laufen.

    Job-b läuft auch interaktiv und im batch, darf nie mit job-a aber auch nie mit anderen Job-b's laufen.

    Wie kann ich das Bewerkstelligen ohne eine komplexe Verwaltung zu programmieren. (beide jobs können auch von außen 'unschön' beendet werden.

    ach so, da der interaktive Lauf ja irgendwann beendet ist, muß eigendlich nicht auf Job sondern auf aktives Programm geprüft werden!
    Danke
    Dietlinde Beck
    Last edited by dibe; 14-07-11 at 15:01. Grund: fehlte noch was

  2. #2
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Tja die übliche Lösung ist ein Unterprogramm welches testet ob z.B. eine eine dtaara gefüllt ist und dann sagt du darfst laufen oder nicht.

    Sprich am Anfang der Programms testen ob dtaara gefüllt, wenn nicht dann füllen und am Ende wieder leeren. Ist nicht wirklich aufwendig.

    GG

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn der Job aber abnormal gekillt wird, hat die DTAARA den falschen Inhalt.

    Einfacher ist da ein ALCOBJ, der ein jobspezifisches Objekt sperrt, nach Jobende (egal wie) wird die Sperre aufgehoben.

    Im Dialog macht dann ein DLCOBJ auch noch Sinn.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wenn der Job aber abnormal gekillt wird, hat die DTAARA den falschen Inhalt.
    Das ist wohl war, aber ab und zu dürfen die Leute ja auch wissen was sie tun. Und wenn ich den Job kille, sollte ich auch aufräumen. Aber viele Wege führen nach Rom.
    Wobei, ich kenne auch ein Rom im Bergischen Land.......

    GG

  5. #5
    Registriert seit
    Nov 2009
    Beiträge
    222
    Hallo
    das mit aloc versteh ich nicht.
    wenn job-a den aloc setzt, kann job-a doch kein 2. mal laufen
    oder ?

    Leider werden diese jobs gekillt ohne aufzuräumen.
    Das ist eine vorrangsautomatik die sehr komplex ist. Und bisher auch problemlos.

    DiBe

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Am besten ein ALCOBJ und abschließendes DLCOBJ in beiden Programmen auf das selbe Objekt (zum Beispiel einen Datenbereich), im Programm A mit Sperre *SHRRD und in Programm B mit Sperre *EXCL. Dann darf Programm A mehrmals gleichzeitig laufen, Programm B aber immer nur alleine.
    PHP-Code:
    PGM
    ALCOBJ OBJ
    ((Objekt *DTAARA *SHRRD)) WAIT(0)
    MONMSG MSGID(CPF0000EXEC(GOTO CMDLBL(ENDPGM))
    ...
    DLCOBJ OBJ((Objekt *DTAARA *SHRRD))
    ENDPGMENDPGM 
    PHP-Code:
    PGM
    ALCOBJ OBJ
    ((Objekt *DTAARA *EXCL)) WAIT(0)
    MONMSG MSGID(CPF0000EXEC(GOTO CMDLBL(ENDPGM))
    ...
    DLCOBJ OBJ((Objekt *DTAARA *EXCL))
    ENDPGMENDPGM 

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ja stimmt, du hast Recht. Ein ALCOBJ hilft da nicht.
    Da ja der Job selber durchaus mehrmals laufen darf.
    Die Killproblematik ist da natürlich nicht zu verachten.

    Es bleibt dir nur die DTAARA-Variante als Zähler:

    JOBADTA
    JOBBDTA

    Job-A prüft, ob JOBBDTA > 0
    Wenn ja -> Warten oder Ende ?
    Wenn Nein -> JOBADTA += 1, Arbeiten und -= 1

    Job-B macht das dann genauso.
    Du musst dir halt nur noch überlegen, in welchem Job du die DTAARA's wieder auf 0 zurücksetzt.

    Die Frage ist ja noch, wie der Job denn gekillt wird.
    Bei *IMMED hast du ja keine Chance, aber bei *CNTRLD könnte der aktive Job ja den Endestatus in seiner Schleife per RTVJOBA ENDSTS(&STS) abfragen und dann selber aufräumen.
    Oder rennt der Job eh nur einmal durch ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Nov 2009
    Beiträge
    222
    Hallo Picachu,
    das hört sich gut an. Unsere Programmierer habe gesagt, das sie sich noch nie mit den Sperrstufen befasst haben. Wenn Sperre dann *excl. Wir werden das probieren, vielen Dank

    Herr Fuerchau
    ich weis nicht genau, wie sich diese Jobs abmelden. ich weis nur, das es in der vergangenheit IMMER völlig problemlos lief. Diese Sperr Situation ist neu. Wir werden den Vorschlag von Picachu an einem 'Pärchen' ausprobieren

    Vielen Dank

    Dietlinde Beck

  9. #9
    Registriert seit
    Jul 2001
    Beiträge
    2.713
    Zitat Zitat von dibe Beitrag anzeigen
    Hallo Picachu,
    das hört sich gut an. Unsere Programmierer habe gesagt, das sie sich noch nie mit den Sperrstufen befasst haben. Wenn Sperre dann *excl. Wir werden das probieren, vielen Dank
    Hallo Dietlinde,
    zumindest hört es sich so an, als wäre Job-B der Kandidate für eine Exklusive Sperre. Die muss dieser immer prüfen, und dann setzen. Job-A muss diese Sperre auch prüfen. Aber letztlich ist es auch eine Frage des Designs. Geht es um eine Tabelle, die tot umfällt, wenn mehrere Jobs darauf zugreifen?

    -h

  10. #10
    cbe is offline [professional_User]
    Registriert seit
    May 2005
    Beiträge
    392
    Hallo Dietlinde,

    wie wäre es mit folgender Variante:

    Job-A macht immer beim Aufruf:
    ALCOBJ OBJ((D1 *DTAARA *SHRRD)) WAIT(0)
    Wenn es nicht geht, dann Ende.


    Job-B macht immer beim Aufruf:
    ALCOBJ OBJ((D1 *DTAARA *EXCL)) WAIT(0)
    Wenn es nicht geht, dann Ende.

    Job-A kann dann immer laufen, solange kein Job-B läuft,
    und Job-B kann dann immer laufen, solange kein Job-A und kein anderer Job-B läuft.

    Am Ende der Arbeit sollte jeweils noch ein DLCOBJ stehen, damit bei interaktivem Aufruf die Sperre wieder gelöst wird.
    Nach Abbruch des Jobs egal aus welchem Grund ist die Sperre von selbst wieder weg.

    Das ist es doch, was Du wolltest, oder?

    D1 ist irgendein Objekt, ich nehme am liebsten DTAARAs mit sprechendem Namen.

    Gruß, Christian

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das ist ja genau das Problem.
    Sobald ein mal ein ALCOBJ *EXCL abgesetzt wird, ist kein 2. Aufruf möglich.

    Das Szenario ist aber:

    Job-A darf beliebig oft parallel laufen aber nicht wenn Job-B läuft.

    Job-B darf beliebig oft parallel laufen aber nicht wenn Job-A läuft.

    Damit fällt jegliche Exclusiv-Sperre aber weg!
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    cbe is offline [professional_User]
    Registriert seit
    May 2005
    Beiträge
    392
    naja, ich hatte Dietlinde anders verstanden:

    Job-b läuft auch interaktiv und im batch, darf nie mit job-a aber auch nie mit anderen Job-b's laufen.
    und dann gehts, wie ich beschrieben habe.


    Wenn das Szenario so ist, wie Du schreibst, geht es auch, ist allerdings etwas komplizierter:

    Code:
    Job-A:
    versucht ALCOBJ OBJ((D2 *DTAARA *EXCL)) WAIT(0)  
    versucht ALCOBJ OBJ((D1 *DTAARA *SHRRD)) WAIT(0)
    Wenn beides geht, macht er 
    DLCOBJ OBJ((D2 *DTAARA *EXCL))
    startet die Verarbeitung
    und anschl. DLCOBJ OBJ((D1 *DTAARA *SHRRD))
     
    Job-B:
    versucht ALCOBJ OBJ((D1 *DTAARA *EXCL)) WAIT(0)  
    versucht ALCOBJ OBJ((D2 *DTAARA *SHRRD)) WAIT(0)
    Wenn beides geht, macht er 
    DLCOBJ OBJ((D1 *DTAARA *EXCL))
    startet die Verarbeitung
    und anschl. DLCOBJ OBJ((D2 *DTAARA *SHRRD))

Similar Threads

  1. Job überwachen mit anderem Job
    By harkne in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 12-06-08, 11:03
  2. auf aktiven Job prüfen
    By TARASIK in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 26-10-06, 11:07
  3. Fehler in Gesamtsicherung
    By wolfmakiol in forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 21-08-06, 09:10
  4. job läuft zu langsam ...?
    By bode in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 22-07-06, 11:52
  5. Job in SBS beenden
    By hs in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 12-12-01, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •