WebLogic + JMS Example

Setting up JMS in WebLogic

  • Open the Weblogic Console Window:
    e.g. http://localhost:7001/console
  • Create a persistent JMS store for persistent messages:
    e.g. MyDomain > Services > JMS > Stores
  • Create a new JMS Server:
    e.g. MyDomain > Services > JMS > Servers
  • Create a new JMS Connection Factory:
    e.g. MyDomain > Services > JMS > Connection Factories
  • Create a new JMS Queue

Implement a Message-Driven-Bean (MDB)

  • Create new EJB Project in Eclipse

public class MyMessageBean implements MessageDrivenBean, MessageListener {
//
private Logger log = SystemLogger.getDebugLogger(MyMessageBean.class.getName());
//
private MessageDrivenContext messageContext;
//
public MyMessageBean() {
}
public void ejbRemove() throws EJBException {
messageContext = null;
}
public void setMessageDrivenContext(MessageDrivenContext messageContext)
throws EJBException {
this.messageContext = messageContext;
}
public void onMessage(Message message) {
// do what ever you want to do with the message
log.debug("Message Driven Bean got message: " + message);
}
public void ejbCreate() {
}
}

Add Message-Driven-Bean to Deployment Descriptors

  • ejb-jar.xml:


<enterprise-beans>

<message-driven>
<ejb-name>My</ejb-name>
<ejb-class>com.mydomain.ejb.MyMessageBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
</enterprise-beans>

<assembly-descriptor>

<container-transaction>
<method>
<ejb-name>My</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>

  • weblogic-ejb-jar.xml


<weblogic-enterprise-bean>
<ejb-name>My</ejb-name>
<message-driven-descriptor>
<destination-jndi-name>com.mydomain.jms.mydomainJmsQueue</destination-jndi-name>
</message-driven-descriptor>
<enable-call-by-reference>True</enable-call-by-reference>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>

Implement JMS Client
...
private void sendJms(String message) {
try {
Context ctx = new InitialContext();
QueueConnectionFactory connectionFactory = (QueueConnectionFactory)         ctx.lookup("com.mydomain.jms.mydomainJmsConnectionFactory");
QueueConnection qconn = connectionFactory.createQueueConnection();
QueueSession qsession = qconn.createQueueSession(false, QueueSession.DUPS_OK_ACKNOWLEDGE);
Queue queue = (Queue) ctx.lookup("com.mydomain.jms.mydomainJmsQueue");
//
QueueSender sender = qsession.createSender(queue);
Message msg = qsession.createTextMessage(message);
qconn.start();
sender.send(msg);
log.debug("JMS Message send...");
sender.close();
qsession.close();
qconn.close();
} catch (JMSException ex) {
SystemLogger.getExceptionLogger(1).error("JMSException during sending JMS message.",ex);
} catch (NamingException ex) {
SystemLogger.getExceptionLogger(1).error("NamingException during sending JMS message.",ex);
}
}

Leave a Comment