package com.sap.nwce.ra.edm.ejb.services;
import javax.annotation.Resource; import javax.ejb.ActivationConfigProperty; import javax.ejb.EJB; import javax.ejb.EJBException; import javax.ejb.MessageDriven; import javax.ejb.MessageDrivenContext; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Session; import javax.jms.TemporaryQueue; import javax.jms.TextMessage;
import com.sap.nwce.ra.edm.util.DataResetResult; import com.sap.nwce.ra.edm.util.ReferenceApplicationEJBLogger;
/** * The MessageBean class is a message-driven bean. It implements * the javax.jms.MessageListener interface. It is defined as public * (but not final or abstract). */ @MessageDriven( activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "appResetQueue"), @ActivationConfigProperty(propertyName = "connectionFactoryName", propertyValue = "EDMQueueConnectionFactory") })
public class ApplicationResetReceiverBean implements MessageListener {
@Resource public MessageDrivenContext mdc;
@EJB private DataResetServiceLocal dataServiceFacade;
@Resource(name="EDMQueueConnectionFactory") private ConnectionFactory queueConnectionFactory;
/** * Constructor, which is public and takes no arguments. */ public ApplicationResetReceiverBean() { }
public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException{ this.mdc = ctx; }
/** * onMessage method, declared as public (but not final or * static), with a return type of void, and with one argument * of type javax.jms.Message. * * Casts the incoming Message to a TextMessage and displays * the text. * * @param inMessage the incoming message */ public void onMessage(Message inMessage) { TextMessage msg = null; DataResetResult dataResetResult; try { if (inMessage instanceof TextMessage) { msg = (TextMessage) inMessage; ReferenceApplicationEJBLogger.logInfo("MESSAGE BEAN: Message received: " + msg.getText()); if (msg.getText().equals("reset")){ dataResetResult = dataServiceFacade.resetContent(); processNotification((TemporaryQueue) msg.getJMSReplyTo(), dataResetResult); }else{ ReferenceApplicationEJBLogger.logInfo("MESSAGE BEAN: Message received: " + msg.getText() + " but nothing to do!"); } } else { ReferenceApplicationEJBLogger.logInfo("Message of wrong type: " + inMessage.getClass().getName()); } } catch (JMSException jmsExc) { ReferenceApplicationEJBLogger.logException(jmsExc); mdc.setRollbackOnly(); } catch (Throwable te) { ReferenceApplicationEJBLogger.logThrowable(te); } }
private void processNotification(TemporaryQueue queue, DataResetResult result) throws JMSException{ Session jmsSession = null; MessageProducer queueSender = null; Connection connection = null;
try { connection = queueConnectionFactory.createConnection(); jmsSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); queueSender = jmsSession.createProducer(queue); ObjectMessage msg = jmsSession.createObjectMessage(); msg.setObject(result); queueSender.send(msg); } finally { if (connection != null) { connection.close(); } } } }
|