PDA

View Full Version : DTAQ MAXLEN und KEY bei KeyedDataQueueEntry.write



alex.kretschmer
28-03-16, 15:19
Hallo Forum,

beim Erstellen von Data Queues mit KEYs beinhaltet die Dtaq-Länge MAXLEN den KEY oder wird der separat geführt?

Schreibe ich mit QSNDDTAQ in eine Dataq von MAXLEN 100 und KEYLEN 26, dann kommen auf der Java-Seite beim KeyedDataQueue.read die 100 an Daten an (richtigerweise ohne KEY-INFO, setze aber mit entsprechnder KEY-Länge auf ).

Schreibe ich dann JAVA-seitig beim KeyedDataQueue.write den Schlüssel mit 26 Zeichen und die Daten mit 100 Zeichen weg erhalte ich einen Fehler:

com.ibm.as400.access.AS400Exception: CPF2498 Ungültige Länge. Die Maximallänge bei Datenwarteschlange WSRQSDQ in ALEXTEST ist 100.
at com.ibm.as400.access.BaseDataQueueImplRemote.build Exception(BaseDataQueueImplRemote.java:386)
at com.ibm.as400.access.BaseDataQueueImplRemote.build Exception(BaseDataQueueImplRemote.java:456)
at com.ibm.as400.access.BaseDataQueueImplRemote.write (BaseDataQueueImplRemote.java:335)
at com.ibm.as400.access.KeyedDataQueue.write(KeyedDat aQueue.java:527)
at com.ibm.as400.access.KeyedDataQueue.write(KeyedDat aQueue.java:556)


Nur wenn ich Daten in Länge abzüglich Schlüssellänge wegschreibe erhalte ich keinen Fehler.

Dann sagt mir der QRCVDTAQ auch eine Datenlänge von 100, obwohl ich JAVA-seitig nur 74 geschrieben habe.

Unterschieldiche Verarbeitung?

System V7R1, JAVA 1.6.0 - Client seitig, JAVA 7 compile nach JAVA 6, JT400.

Fuerchau
29-03-16, 09:50
In der Dokumentation ist das nicht ausdrücklich festgelegt.
Allerdings finde ich die Frage eigentlich nicht relevant.
Ein Eintrag kann bis 32KB lang sein, die DTAQ kann 16MB oder 2GB groß werden.
Die Länge eines Eintrages ist variabel und kann zwischen 0 und X liegen.
Die Länge des Keys sollte immer der erstellten Länge entsprechen da laut Doku sonst unerwartete Ergebnisse auftreten könnten.

alex.kretschmer
30-03-16, 11:14
Hallo Herr Fuerchau!

ja, eigentlich bin ich von ausgegangen, daß der Schlüsselteil und der Datenteil zwei getrennte Bereiche sind.
Beim QSNDDTAQ und beim QRCVDTAQ native-seitig ist das wohl so.

Beim Senden in die Data Queue via o.g. Java-Klasse muß der Datenteil wohl um die Schlüssellänge verkürzt werden, sonst kommt es zu o.g. Exception.
Möglicherweise ein Fehler in der Implementierung - muß man wohl mit leben.

Ich debugge mir aber nochmals den Code durch, ob noch irgendetwas falsch ist...


Trotzdem danke für den Hinweis.

KM
04-04-16, 12:04
eigentlich bin ich von ausgegangen, daß der Schlüsselteil und der Datenteil zwei getrennte Bereiche sind

Das ist ja auch so. Wie schreibst Du denn Java-seitig in die Dataqueue? Poste doch mal etwas Code.
Es sollte so ungefähr aussehen:


dq.write(byteKey, byteData);

Sowohl byteKey als auch byteData sind bei mir byte-Arrays.

Gruß,
KM

alex.kretschmer
14-04-16, 11:05
Ich melde mich nochmals dazu, hatte leider keine Zeit, das nochmals anzugehen.

Danke erstmals für die Infos.