user3132568
user3132568

Reputation: 33

Message Driven Bean onMessage() is not invoked in Glassfish

I am new to JMS coding. I am trying to create message from stand-alone java client which creates and send the message to queue and message driven bean is used for further processing of the messages.

I referred the following guidelines : http://techtipsjava.blogspot.de/2013/05/jms-on-glassfish-queue-and-topic-with.html

I am using Glassfish application server (3.1). And setup everything to create JMS message from stand-alone java client.

Here is my code: Client

import java.util.Properties;

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class TruckMonitor {

public static void main(String args[]) {

    try {

    // Provide the details of remote JMS Client
      Properties props = new Properties();
      props.put(Context.PROVIDER_URL, "mq://localhost:7676");

    // Create the initial context for remote JMS server
      InitialContext cntxt = new InitialContext(props);
      System.out.println("Context Created");

      // JNDI Lookup for QueueConnectionFactory in remote JMS Provider
      QueueConnectionFactory qFactory = (QueueConnectionFactory)cntxt.lookup("OmazanQueueConnectionFactory");

      // Create a Connection from QueueConnectionFactory
      Connection connection = qFactory.createConnection();
      System.out.println("Connection established with JMS Provide ");
      connection.start();
      // Initialise the communication session 
      Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
      // Create the message
      TextMessage message = session.createTextMessage();
      message.setJMSDeliveryMode(DeliveryMode.PERSISTENT);


      message.setText(getMessage());

      // JNDI Lookup for the Queue in remote JMS Provider
      Queue queue = (Queue)cntxt.lookup("OmazanQueue");

      // Create the MessageProducer for this communication 
      // Session on the Queue we have
      MessageProducer mp = session.createProducer(queue);

      // Send the message to Queue
      mp.send(message);
      System.out.println("Message Sent: " + getMessage());

      // Make sure all the resources are released 
      mp.close();
      session.close();
      cntxt.close();
  } catch (Exception ex) {
      ex.printStackTrace();
  }

}

private static String getMessage() {
    String msg = null;

    StringBuffer sbExceptionEvent = new StringBuffer("<exceptionEvent>");
    sbExceptionEvent.append("</exceptionEvent>");

    msg = sbExceptionEvent.toString();
    return msg;
}
}

Message Driven Bean:

import java.util.Properties;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;


/** * Message-Driven Bean implementation class for: OmazanMDBean*/ 
@MessageDriven(
    activationConfig = { 
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
            @ActivationConfigProperty(propertyName = "destination", propertyValue = "OmazanQueue"),
            @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
    }, 
    mappedName = "OmazanQueue")
public class OmazanMDBean implements MessageListener {

/**
 * Default constructor. 
 * @throws NamingException 
 * @throws JMSException 
 */
public OmazanMDBean() {
    super();
}

/**
 * @see MessageListener#onMessage(Message)
 */
public void onMessage(Message message) {
    System.out.println("Inside omMessage");
    try {
       message.acknowledge();
      } catch (Exception e) {
       e.printStackTrace();
    }

    TextMessage txtMessage = (TextMessage) message;

    try {
        System.out.println(txtMessage.getText());
    } catch (Exception e) {
       e.printStackTrace();
    }
}

}

The problem is: onMessage() is not getting invoked. Did I miss anything? Please help me.

Upvotes: 1

Views: 1141

Answers (1)

Sunny
Sunny

Reputation: 46

I guess if you remove @ActivationConfigProperty(propertyName = "destination", propertyValue = "OmazanQueue") from you MessageDrivenBean it will work since you have already used mappedName = "OmazanQueue"

Upvotes: 2

Related Questions