Hallo Zusammen,

ich benötigte mal die Expertise der Gruppe:

Ich habe hier folgendes Konstrukt:
EDISERVER: Eine IBMi mit V7R2 auf der eine EDI-Software läuft.
CLIENTA : Eine IBMi mit V7R3 welche EDI-Belege versenden möchte.
CLIENTB : Eine IBMi mit V7R2 welche EDI-Belede versenden möchte.

Auf Client A+B läuft ein RPGLE-Monitorprogramm mit embedded SQL, welches zyklisch prüft ob ob es neue EDI-Belege zu versenden gibt und überträgt diese dann auf den EDI-Server.
Die EDI-Belege auf den Client bestehen aus DB2-Datensätzen (Kopf/Pos.)
Diese DB2-Datensätze werden via SQL vom Client auf den EDI-Server in identische DB2-Tabellen übertragen.
Der EDI-Server verabeitet die Belege und erstellt Protokollsätze (ebenfalls DB2-Datensätze).
Die EDI-Monitore auf den Clients A+B holen ihre Protokollsätze ab und kopieren
diese in die 'lokalen' Protokolltabellen.

Die EDI-Monitore der Clients greifen somit auf die fernen Tabellen des EDI-Servers zu
(verteile relationale Datenbankanwendung).
Der Zugriff auf den EDI-Server erfolgt vom Client aus über die Zwei-Punkt-Notation (Select * from SYSTEM.Bibliothek.Tabelle).
Es gibt kein CONNECT TO.
Bei Aufrufen des EDI-Monitor-Programms auf dem Client wird automatisch auf dem EDI-Server ein SQL-Paket erstellt (falls vorhanden ausgetauscht).
Ich selber habe bei der Umwandung der Programme mit CRTSQLRPGI nur Standardwerte für die Optionen RDB und SQLPKG angegeben gehabt.
Auch habe mit dem CRTSQLPKG-Befehl keine SQL-Pakete erstellt (weder auf den Clients noch auf dem EDI-Server).

Nun meine Probleme:
  1. Das Programm und das zugehörige SQL-Paket enthalten ein Konsistenztoken, das überprüft wird, wenn das SQL-Paket aufgerufen wird.
    Wenn die Konsistenztoken nicht übereinstimmen, schlägt der Aufruf des Programms mit der Nachricht SQL0818 (Consistency tokens do not match) fehl. Da das Monitor-Programm (durch eine Release-Einspielung) auf den Maschinen von Client A +B unterschliedliche Erstelldaten, dazu noch auf den Clients unterschiedliche OS-versionen laufen, passt das Konsistentoken des SQL-Paketes auf dem EDI-Server immer nur zu EINEM Client.
    Der Benutzer, unter dem der Monitor läuft hat jedoch genügend Rechte um das SQL-Paket ggfls. auf dem EDI-Server austauschen zu dürfen.
    Doch werde ich in Zukunft nicht nur zwei Clients haben, welche auf den EDI-Server zugreifen, sondern 16.
    Die Anwendung muss nicht schnell laufen können, es wäre für mich OK, wenn die Monitore ständig das SQL-Paket austauschen würden.
    Doch habe ich noch das Problem Nummer 2.
  2. Solange der EDI-Monitor (Batchjob) läuft, lockt er das SQL-Paket (QRWTSRVR-Job auf EDI-Server). Andere Monitore können also das "nicht passende" SQL-Paket nicht einfach austauschen.
    Ich habe schon beim Monitorjob die Option DDMCNV(*DROP) eingestellt. Hat jedoch nicht geholfen.
    Ist der Lock nicht mehr vorhanden, kann ein anderer Monitor das Paket erfolgreich austauschen


Fragen:
  1. Wie bekomme ich den Lock auf das SQL-Paket weg, wenn der Monitor gerade auf seinen nächsten Zyklus wartet?
  2. Wartet ein anderer Monitor etwas, wenn er das Paket aufgrund des Locks nicht austauschen kann und versucht es dann nach einer gewissen Zeit nochmal wenn der andere Monitor dann das Paket freigegeben hat?


Habe schon viel gegoogled und IBM-Dokumente gewälzt, habe aber bisher noch keine Lösung gefunden.

Hat einer ne Idee?

Vielen Dank für Eure Mühe.

Grüße
Volker