2010-02-12 27 views
0

Je dois me connecter à deux files d'attente Oracle AQ dans différentes bases de données. J'utilise exactement le même code dans les deux cas, sauf pour la chaîne de connexion bien sûr. Une des files d'attente fonctionne bien, mais pas la seconde. Lorsque j'utilise le code pour me connecter à l'AQ qui fonctionne correctement, il imprime correctement le texte inclus dans le message. La deuxième AQ imprime seulement trois guillemets, indépendamment de ce que le message contient. J'utilise aqapi 10.2.0.2 et j'ai testé avec ojdbc14 10.2.0.2.0 et ojdbc5 11.1.0.6.0. AQ qui fonctionne fonctionne sur Oracle 11.1.0.0.0 et celui qui cause les problèmes sur 10.2.0.4.0. J'ai analysé les paquets TNS avec Wireshark, et les paquets contenant les messages AQ ressemblent beaucoup aux deux bases de données.TextMessage reçu d'Oracle AQ à l'aide de JMS contient juste '???'

décharge de réflexion de l'objet TextMessage de l'affaire de travail ressemble à ceci:

{text_[email protected][email protected]_lob=m_boolClass=class java.lang.Booleanm_byteClass=class java.lang.Bytem_shortClass=class java.lang.Bytem_intClass=class java.lang.Integerm_longClass=class java.lang.Longm_floatClass=class java.lang.Floatm_doubleClass=class java.lang.Doublem_strClass=class java.lang.Stringm_systemProperties={JMSXDeliveryCount=class java.lang.Integer, JMS_OracleConnectionID=class java.lang.String, JMSXGroupSeq=class java.lang.Integer, JMSXAppID=class java.lang.String, JMSXRecvTimestamp=class java.lang.Long, JMS_OracleExcpQ=class java.lang.String, JMS_OracleHeaderOnly=class java.lang.String, JMS_OracleOriginalMessageID=class java.lang.String, JMSXGroupID=class java.lang.String, JMSXUserID=class java.lang.String, JMS_OracleDeliveryMode=class java.lang.String, JMS_OracleTimestamp=class java.lang.Long, JMS_OracleDelay=class java.lang.Long, JMSXState=class java.lang.Integer}m_settableSystemProperties=[JMSXGroupID, JMSXGroupSeq][email protected][email protected]_time=1265887454000corr_id=msg_dest=test.myaqdel_mode=2redelivered=trueexpiration=0priority=1msg_properties={[email protected]}access_mode=0prop_read_only=truerecv_time=1265891032384msg_state=0excp_queue=msg_delay=0orig_msg_id=[email protected]a613f8m_hdrOnly=falsem_isjmsbody=truecompliant=falseJMS_REPLY_TO=JMSReplyTo} 

Et celui cassé:

{[email protected][email protected]_lob=m_boolClass=class java.lang.Booleanm_byteClass=class java.lang.Bytem_shortClass=class java.lang.Bytem_intClass=class java.lang.Integerm_longClass=class java.lang.Longm_floatClass=class java.lang.Floatm_doubleClass=class java.lang.Doublem_strClass=class java.lang.Stringm_systemProperties={JMSXDeliveryCount=class java.lang.Integer, JMS_OracleConnectionID=class java.lang.String, JMSXGroupSeq=class java.lang.Integer, JMSXAppID=class java.lang.String, JMSXRecvTimestamp=class java.lang.Long, JMS_OracleExcpQ=class java.lang.String, JMS_OracleHeaderOnly=class java.lang.String, JMS_OracleOriginalMessageID=class java.lang.String, JMSXGroupID=class java.lang.String, JMSXUserID=class java.lang.String, JMS_OracleDeliveryMode=class java.lang.String, JMS_OracleTimestamp=class java.lang.Long, JMS_OracleDelay=class java.lang.Long, JMSXState=class java.lang.Integer}m_settableSystemProperties=[JMSXGroupSeq, JMSXGroupID][email protected][email protected]_time=1265890738000corr_id=msg_dest=test.myaqdel_mode=2redelivered=trueexpiration=0priority=1msg_properties={[email protected]}access_mode=0prop_read_only=truerecv_time=1265891388844msg_state=0excp_queue=msg_delay=0orig_msg_id=[email protected]60e128m_hdrOnly=falsem_isjmsbody=truecompliant=falseJMS_REPLY_TO=JMSReplyTo} 

Répondre

2

J'ai eu le même problème. La seule différence avec les bases de données est le paramètre oracle NLS_CHARACTERSET. si NLS_CHARACTERSET = WE8MSWIN1252 les paramètres du message sont bien reçus. si NLS_CHARACTERSET = CL8MSWIN1251 - les params du message ne contiennent que '???' dans les noms de paramètres.

La solution a été trouvée. L'ajout de orai18n.jar au classpath de l'application serveur Web résout le problème.