/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
***************************************************************************************
*/
package com.espertech.esper.example.terminal.mdb;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJBException;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
@MessageDriven(name = "TerminalMDB", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue_b"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")})
public class TerminalMDB implements MessageListener {
private static OutboundQueueSender outboundQueueSender;
private static EPServiceMDBAdapter mdbAdapter;
private static Boolean isInitialized = new Boolean(false);
public void setMessageDrivenContext(MessageDrivenContext messageDrivenContext) throws EJBException {
// System.out.println(TerminalMDB.class.getName() + "::setMessageDrivenContext invoked");
}
public void ejbCreate() throws EJBException {
// System.out.println(TerminalMDB.class.getName() + "::ejbCreate invoked");
synchronized (isInitialized) {
if (!isInitialized) {
System.out.println(TerminalMDB.class.getName() + "::ejbCreate initializing sender and engine");
// Connect to outbound queue
outboundQueueSender = new OutboundQueueSender();
// Get engine instance - same engine instance for all MDB instances
mdbAdapter = new EPServiceMDBAdapter(outboundQueueSender);
isInitialized = true;
}
}
}
public void ejbRemove() throws EJBException {
System.out.println(TerminalMDB.class.getName() + "::ejbRemove invoked");
}
public void onMessage(Message message) {
Object theEvent = null;
try {
ObjectMessage objMessage = (ObjectMessage) message;
// System.out.println("onMessage received event=" + objMessage.getObject());
theEvent = objMessage.getObject();
} catch (JMSException ex) {
String messageText = "Error sending response message";
System.out.println(messageText + ":" + ex);
return;
}
try {
mdbAdapter.sendEvent(theEvent);
} catch (RuntimeException ex) {
String messageText = "Error processing event, event=" + theEvent;
System.out.println(messageText + ":" + ex);
return;
}
}
}