sla*_*iez 2 java jms tibco-ems
我正在编写一个Java批处理,它是从队列(Oracle AQ)侦听消息并将它们发送到另一个队列(Tibco EMS),在那里它们由Tibco进程(BW)处理.
问题是Oracle AQ驱动程序会自动向消息添加一些属性(JMSXGroupID,JMSXGroupSeq),这些属性在由Tibco进程处理时会导致错误,因为它们具有错误值:JMSXGroupSeq应该是int但是设置为null.尝试解析消息属性时,Tibco出错了...
所以我想从所有消息中只删除这两个属性,但似乎jms api只提供了clearProperties()方法,但没有单个属性remove方法(我使用的是javax.jms.Message接口).
现在,我可以看到两个解决方案:
为这两个属性设置正确的值,因为我假设他们不会被Tibco进一步使用
读取所有属性并重建消息,而不会导致问题.但这种做法非常难看......
有没有人有其他解决方案?
sla*_*iez 10
无法编辑/清除某些属性.我们需要调用此处所述的clearProperties方法来获取写访问权限:
生成(发送)消息后,其属性将变为只读; 属性无法更改.虽然消费者可以使用属性访问器方法(getProperty())读取属性,但是他们无法使用任何mutator方法(setProperty())修改属性.如果使用者尝试设置属性,mutator方法将抛出javax.jms.MessageNotWriteableException.
收到消息后,可以更改其属性的唯一方法是使用clearProperties()方法清除所有属性.这将从邮件中删除所有属性,以便添加新邮件.发送邮件后,无法修改或删除单个属性.