2009-11-19 14 views
0

J'utilise l'interface Oracle Java pour AQ et je souhaite supprimer les messages. Ces messages se composent de deux champs:Interface Java Oracle AQ et types de messages personnalisés

  • Un identifiant de ligne unique.
  • ID non unique.

Je décodée avec succès des messages en utilisant une seule charge utile RAW comme ceci:

AQDequeueOption option = new AQDequeueOption(); 
option.setDequeueMode(AQDequeueOption.DEQUEUE_REMOVE); 

AQMessage message = queue.dequeue(option); 
RAW raw = new RAW(message.getRawPayload().getBytes()); 

Integer rowId = Integer.valueOf(raw.stringValue()); 

Je me souviens avoir lu STH. le long des lignes que les types personnalisés ne sont pas pris en charge dans l'interface Java. Est-ce vrai? A quoi ressemblerait l'appel correspondant AQQueueTableProperty ou dois-je créer la table de file d'attente et de file d'attente dans SQL? Le résultat de l'opération de suppression de la file d'attente ne peut-il pas être mappé à une représentation Java à l'aide des opérations JDBC ResultSet habituelles?

Répondre

0

Je ne suis pas sûr de la partie Java, mais j'ai beaucoup utilisé AQ. Si vous êtes vraiment aux prises avec la partie Java, pourquoi ne pas créer une procédure PLSQL simple qui encapsule dequeue plsql api call et génère des paramètres dans un format que Java peut gérer. Ensuite, vous pouvez simplement appeler le wrapper à partir de Java. Désolé, je ne peux pas être plus utile sur le côté Java des choses.

+0

Mon approche actuelle pour résoudre le problème du 'message futur' (http://stackoverflow.com/questions/1763970/oracle-aq-dequeue-order) consiste à appeler une procédure de paquetage pendant la déqueue, alors oui, je n'ai probablement pas le choix autre que l'utilisation d'une procédure PL/SQL. JDBC-sage le résultat d'une telle file d'attente serait un 'ResultSet 'ordinaire, correct? – yawn