PDA

View Full Version : Wie am besten lösen...



ExAzubi
28-05-14, 07:12
Hallo zusammen,

als junger RPGler (34 :) ) habe ich mich doch sehr an die QTEMP gewöhnt, einfach herrlich da Arbeitsdateien reinzustelen und jeder JOB hat seinen eigenen Bereich ohne das ein anderer stören würde....

Unter JAVA gibt es ja die QTEMP für solche zwecke nicht mehr, da die JAVA-Anwendung ein anderer Job ist, als die DB-Connection.
Somit habe ich das Problem, das ich zwar per CREATE TABLE oder CRTDUPOBJ zwar eine Tabelle in die QTEMP stellen kann, aber der jeweils andere JOB nicht darauf zugreifen kann.

Wie habt Ihr dieses Problem gelöst.

Xanas
28-05-14, 07:30
Ich weis ja nicht welche Art von Java-Anwendung du verwendest, wir haben eine Java Webanwendung und wenn ich da wirklich temporäre Daten in einer Tabelle ablegen müsste, würde ich wahrscheinlich eine Tabelle generieren mit einer Spalte in der die SESSIONID mit geführt würde.

Fuerchau
28-05-14, 07:45
Auch für SQL gilt das selbe.
Du kannst dir in QTEMP auch temporäre Tabellen anlegen, solange du mit SQL darauf zugreifst.
SQL läuft in einem QZDASOINIT-Job.
Wenn du per Java auch AS/400-Programme aufrufst gibt es hier 2 Methoden:
a) per AS400-Programmobject
b) als SQL-Prozedur
Bei a) läuft dies allerdings in einem anderen Service-Job, bei b) läuft es im selben QZDASOINIT-Job.

Das Hauptproblem ist aber, dass du mit Java (oder .NET) in vielen Fällen "offline" arbeitest.
Also
- Open Connection
- mach was mit SQL
- Close Connection
Ist der Connection-Pool aktiviert, bleibt die Verbindung zwar offen, aber die Garantie dass du den selben QZDASOINIT-Job wieder erwischst kann dir keiner geben.

Temporäre Tabellen können also nur kurzfristig (innerhalb einer Aufgabe) verwendet werden.

Sitzungsspezifische Tabellen können das zwar lösen, aber hier benötigst du auf jeden Fall "Aufräumaktionen", die garantiert nicht mehr benötigte Tabellen killen.
Es reicht da nicht in den Destruktoren aufzuräumen schließlich ist keine Software so perfekt dass sie nicht mal unmotiviert abstürzt oder gekillt wird.

Ggf. hilft halt ein Redesign der Anwendung ob temporäre Tabellen nicht mit anderen SQL's oder Methoden (Speichertabellen, Listen u.v.m.) abgelöst werden können.

ExAzubi
28-05-14, 09:19
Das Proble was ich habe ist, das ein ein kleines Progrämmchen zur Auswertung in JAVA verwirklichen will. Die RPG Version ruft zur Datensammlung ein Programm auf, welches in die Arbeitsdatei in die QTEMP schreibt und diese dann nur anzeigt.
Quasi JAVA ne JTABLE aufbauen, aber Datensammler wollte ich das selbe Programm aufrufen --> ISt ja schon da..
Allerdings komme ich in die Problematik QTEMP AS400Call und QZDAOINIT....

Fuerchau
28-05-14, 10:19
An Stelle des AS400Call definiere eine SQL-Prozedur die das RPG dann aufruft.
Per SQL "call myproc (p1, p2, ...pn)" kannst du das Programm dann aufrufen und das Ergebnis aus der QTEMP lesen.
Du kannst allerdings jedes Programm auch ohne Prozedur aufrufen, dabei ist jeder Parameter in genau der Form zu übergeben wie es das Programm erwartet, also:

call myPgm ('XXXX', 12345.12, '123456', ...)

Der erste Parameter ist vom Typ char(4), der 2. vom Typ DEC(7, 2), der 3. entweder char(6) oder Numeric(n, m).
Bei Strukturen als Parameter bist du allerdings verloren, dann benötigst du einen Wrapper der einzelne Parameter erwartet und diese dann in einer Struktur weiterreicht.

BenderD
28-05-14, 11:36
... das ist kein QTEMP Proble, das wird so eh' nix!!!
Anzeige einer JTable kann nicht aus 5250 aufgerufen werden => sinnvolle Synchronisation geht so nicht. Da kriegt dann irgendjemand irgendwas angezeigt, was irgendwer irgendwann irgendwohin geworfen hat.

D*B

ExAzubi
28-05-14, 13:04
Wer hat den von 5250 gesprochen???
Es gibt ein kleines Info-Programm welches die halbe Firma nutzt und nur deshalb ne 5250 Installation hat, für sonst nix. Dieses Info-Programm macht nichts anderes als sich aus gefühlten 4000 Töpfen ein paar Daten zu holen und diese dann aggregiert anzuzeigen.

Ich wil eigentlich nur das Anzeigeprogramm überflüssig machenund somit die 5250 Installationen. Nicht mehr und auch nicht weniger.

Das Anzeigeprgramm macht nicht anderes
1. Selektion eingegen
2. Datensammler aufrufen
3. Ergebnis anzeigen

Ich will nur die Punkte 1 & 3 ablösen und somit die CA-Installationn weitgehenst überflüssig machen.
Meine Intention:

1. JAVA-PGM am PC starten und selektion eingeben
2. RPG-Prgramm arbeiten lassen ==> nicht in JAVA nachturnen bzw. anpassen
3. Ergebnis im JAVA-PGM auf dem PC anzeigen lassen.

Fuerchau
28-05-14, 13:18
Warum sollte das nicht gehen?
Wenn du wie gesagt ein SQL-Call statt AS400Call machst kannst du die Daten aus QTEMP laden.
Wichtig ist natürlich, dass du in der Verbindungsfolge die korrekte Bibliotheksliste definierst, damit dein Programm auch alle Ressourcen findet.

BenderD
28-05-14, 15:45
... da kann man auch gleich eine stored procedure draus machen, die ein resultSet zurückgibt.

D*B