Spring : Browsing Oracle AQ (XMLType) using Spring JMS
A tutorial showing how to browse Oracle AQ (XMLType) using Spring JMS -
<beans ...>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="oracleAqConnFactory" />
<property name="defaultDestination" ref="destination" />
</bean>
</beans>
package com.sachinhandiekar.oracle.aq;
import java.util.Enumeration;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.Session;
import oracle.jms.AQjmsAdtMessage;
import oracle.jms.AQjmsQueueBrowser;
import oracle.jms.AQjmsSession;
import oracle.sql.ORADataFactory;
import oracle.xdb.XMLType;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.SessionCallback;
public class OracleAQQueueBrowser {
private JmsTemplate jmsTemplate;
public void browseMessages() {
Integer count = (Integer) jmsTemplate.execute(new SessionCallback() {
public Object doInJms(Session session) throws JMSException {
int count = 0;
Queue queue = (Queue) jmsTemplate.getDefaultDestination();
QueueBrowser browser = ((AQjmsSession) session).createBrowser(queue, null, XMLType.getORADataFactory(),
true);
Enumeration messages = browser.getEnumeration();
while (messages.hasMoreElements()) {
count++;
Message message = (Message) messages.nextElement();
displayMessage(message);
}
return new Integer(count);
}
private void displayMessage(Message message) {
try {
XMLType xmlMsg = (XMLType) ((AQjmsAdtMessage) message).getAdtPayload();
System.out.println("Message ==> " + xmlMsg.getStringVal());
System.out.println();
}
catch (Exception e) {
e.printStackTrace();
}
}
}, true);
System.out.println("Number of Messages : " + count);
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
}