Using Message Driven Beans Gerald.Loeffler@sun.com
Contents JMS - Java Messaging Service EJBs - Enterprise Java Beans MDBs - Message Driven Beans MDB Usage Szenarios 2002-04-22 Gerald.Loeffler@sun.com 2
JMS Messaging Publish / Subscribe Point-to-Point Destinations Message Types Code: Message Producer Code: Message Consumer 2002-04-22 Gerald.Loeffler@sun.com 3
Messaging Sun ONE Messaging Server BEA WebLogic JMS IBM WebSphere MQ Fiorano MQ Softwired ibus Message Producer + Msg. Acknowledgement + Msg. Persistence + Msg. Selectors Message Consumer 2002-04-22 Gerald.Loeffler@sun.com 4
Publish/Subscribe Topic Topic Publishers + Durable Subscribers Topic Subscribers 2002-04-22 Gerald.Loeffler@sun.com 5
Point-to-Point Queue Queue Senders Queue Receivers 2002-04-22 Gerald.Loeffler@sun.com 6
Destinations 2002-04-22 Gerald.Loeffler@sun.com 7
Message Types + Properties 2002-04-22 Gerald.Loeffler@sun.com 8
JMS Message Producer public class QueueSender { public static void main(string[] args) throws Exception { InitialContext ctx = new InitialContext(); QueueConnectionFactory cf = (QueueConnectionFactory) ctx.lookup("helloqcf"); QueueConnection c = cf.createqueueconnection(); QueueSession s = c.createqueuesession(false, Session.AUTO_ACKNOWLEDGE); Queue q = (Queue) ctx.lookup("helloq"); QueueSender snd = s.createsender(q); TextMessage msg = s.createtextmessage(); msg.settext("hello JMS World!"); snd.send(msg); snd.close(); s.close(); c.close(); 2002-04-22 Gerald.Loeffler@sun.com 9
JMS Message Consumer public class QueueReceiver implements MessageListener { public void onmessage(message msg) { try { String msgtext = ((TextMessage) msg).gettext(); System.out.println("Message Received: "+ msgtext ); catch (Exception e) { e.printstacktrace(); public static void main(string[] args) throws Exception { InitialContext ctx = new InitialContext(); QueueConnectionFactory cf = (QueueConnectionFactory) ctx.lookup("helloqcf"); QueueConnection c = cf.createqueueconnection(); QueueSession s = c.createqueuesession(false, Session.AUTO_ACKNOWLEDGE); Queue q = (Queue) ctx.lookup("helloq"); QueueReceiver rcv = s.createreceiver(q); rcv.setmessagelistener(new QueueReceiver()); c.start(); while (true); 2002-04-22 Gerald.Loeffler@sun.com 10
EJBs on One Slide Application Server - EJB Container Security - TX Mgmt. - Thread Allocation Java Code - Deployment Descriptor(s) Packaging - Deployment 2002-04-22 Gerald.Loeffler@sun.com 11
MDBs MDB Characteristics MDB Life Cycle Transaction Handling Code: EchoMDB Code: EJB Deployment Descriptor Code: WLS Deployment Descriptor Szenario 1: Backend Connectivity Szenario 2: Job Scheduling 2002-04-22 Gerald.Loeffler@sun.com 12
MDB Characteristics Asynch Message Consumer Currently JMS-Based Stateless Anonymous to Client No Home or Component Interface Container-Supplied Bean Context 2002-04-22 Gerald.Loeffler@sun.com 13
MDB Life Cycle does not exist ejbremove() 1. newinstance() 2. setmessagedrivencontext() 3. ejbcreate() method-ready pool onmessage() 2002-04-22 Gerald.Loeffler@sun.com 14
Transaction Handling No Client TX Context Bean or Container Managed Container Managed: Required (incl. Message Receipt & Ackn.) NotSupported Bean Managed: Excl. Message Receipt & Acknowledge AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE 2002-04-22 Gerald.Loeffler@sun.com 15
JMS Message Consumer public class QueueReceiver implements MessageListener { public void onmessage(message msg) { try { String msgtext = ((TextMessage) msg).gettext(); System.out.println("Message Received: "+ msgtext ); catch (Exception e) { e.printstacktrace(); public static void main(string[] args) throws Exception { InitialContext ctx = new InitialContext(); QueueConnectionFactory cf = (QueueConnectionFactory) ctx.lookup("helloqcf"); QueueConnection c = cf.createqueueconnection(); QueueSession s = c.createqueuesession(false, Session.AUTO_ACKNOWLEDGE); Queue q = (Queue) ctx.lookup("helloq"); QueueReceiver rcv = s.createreceiver(q); rcv.setmessagelistener(new QueueReceiver()); c.start(); while (true); 2002-04-22 Gerald.Loeffler@sun.com 16
MDB public class MessageTraderBean implements MessageDrivenBean, MessageListener { private MessageDrivenContext ctx; public void ejbcreate() { public void ejbremove() { public void setmessagedrivencontext(messagedrivencontext ctx) { this.ctx = ctx; public void onmessage(message msg) { try { String msgtext = ((TextMessage) msg).gettext(); System.out.println("Message Received: "+ msgtext ); catch (Exception e) { e.printstacktrace(); 2002-04-22 Gerald.Loeffler@sun.com 17
EJB Deployment Descriptor <ejb-jar> <enterprise-beans> <message-driven> <ejb-name>echo-mdb</ejb-name> <ejb-class>com.sun.echomdb</ejb-class> <security-identity> <run-as>sepp</run-as> </security-identity> <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>echo-mdb</ejb-name> <method-name>onmessage</method-name> </method> <trans-attribute>required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> 2002-04-22 Gerald.Loeffler@sun.com 18
WLS Deployment Descriptor <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>echo-mdb</ejb-name> <jndi-name>ejb/echomdb</jndi-name> <message-driven-descriptor> <destination-jndi-name>helloq</destination-jndi-name> <connection-factory-jndi-name>helloqcf</connection-factory-jndi-name> </message-driven-descriptor> </weblogic-enterprise-bean> </weblogic-ejb-jar> 2002-04-22 Gerald.Loeffler@sun.com 19
Szenario 1: Backend Connectivity Backend Service SB RequestQ ResultQ ResponseQ Backend Collector MDB Application Server Backend System 2002-04-22 Gerald.Loeffler@sun.com 20
Szenario 2: Job Scheduling Scheduler SB InputQ ResultQ Executor MDB Application Server 2002-04-22 Gerald.Loeffler@sun.com 21
Thanks for your Attention! Gerald.Loeffler@sun.com