JMS Tutorial

download JMS Tutorial

of 13

description

JMS

Transcript of JMS Tutorial

  • JMSTutorialJMS(JavaMessageService)isanAPIthatprovidesthefacilitytocreate,sendandreadmessages.Itprovideslooselycoupled,reliableandasynchronouscommunication.

    JMSisalsoknownasamessagingservice.

    UnderstandingMessagingMessagingisatechniquetocommunicateapplicationsorsoftwarecomponents.

    JMSismainlyusedtosendandreceivemessagefromoneapplicationtoanother.

    RequirementofJMSGenerally,usersendsmessagetoapplication.But,ifwewanttosendmessagefromoneapplicationtoanother,weneedtouseJMSAPI.

    Considerascenario,oneapplicationAisrunninginINDIAandanotherapplicationBisrunninginUSA.TosendmessagefromAapplicationtoB,weneedtouseJMS.

    AdvantageofJMS

    ContentMenu

  • 1)Asynchronous:Toreceivethemessage,clientisnotrequiredtosendrequest.Messagewillarriveautomaticallytotheclient.

    2)Reliable:Itprovidesassurancethatmessageisdelivered.

    MessagingDomainsTherearetwotypesofmessagingdomainsinJMS.

    1. PointtoPointMessagingDomain2. Publisher/SubscriberMessagingDomain

    1)PointtoPoint(PTP)MessagingDomain

    InPTPmodel,onemessageisdeliveredtoonereceiveronly.Here,Queueisusedasamessageorientedmiddleware(MOM).

    TheQueueisresponsibletoholdthemessageuntilreceiverisready.

    InPTPmodel,thereisnotimingdependencybetweensenderandreceiver.

    2)Publisher/Subscriber(Pub/Sub)MessagingDomain

    InPub/Submodel,onemessageisdeliveredtoallthesubscribers.Itislikebroadcasting.Here,Topicisusedasamessageorientedmiddlewarethatisresponsibletoholdanddelivermessages.

  • InPTPmodel,thereistimingdependencybetweenpublisherandsubscriber.

    JMSProgrammingModel

    JMSQueueExample

  • TodevelopJMSqueueexample,youneedtoinstallanyapplicationserver.Here,weareusingglassfish3serverwherewearecreatingtwoJNDI.

    1. CreateconnectionfactorynamedmyQueueConnectionFactory2. CreatedestinationresourcenamedmyQueue

    AftercreatingJNDI,createserverandreceiverapplication.Youneedtorunserverandreceiverindifferentconsole.Here,weareusingeclipseIDE,itisopenedindifferentconsolebydefault.

    1)Createconnectionfactoryanddestinationresource

    OpenserveradminconsolebytheURLhttp://localhost:4848

    Loginwiththeusernameandpassword.

    ClickontheJMSResource>ConnectionFactories>New,nowwritethepoolnameandselecttheResourceTypeasQueueConnectionFactorythenclickonokbutton.

  • ClickontheJMSResource>DestinationResources>New,nowwritetheJNDInameandphysicaldestinationnamethenclickonokbutton.

  • 2)Createsenderandreceiverapplication

    Let'sseetheSenderandReceivercode.NotethatReceiverisattachedwithlistenerwhichwillbeinvokedwhenusersendsmessage.

    File:MySender.java

    . importjava.io.BufferedReader

    . importjava.io.InputStreamReader

  • . importjavax.naming.*

    . importjavax.jms.*

    .

    . publicclassMySender{

    . publicstaticvoidmain(String[]args){

    . try

    . {//Createandstartconnection

    . InitialContextctx=newInitialContext()

    . QueueConnectionFactoryf=(QueueConnectionFactory)ctx.lookup("myQueueConnectionFactory")

    . QueueConnectioncon=f.createQueueConnection()

    . con.start()

    . //2)createqueuesession

    . QueueSessionses=con.createQueueSession(false,Session.AUTO_ACKNOWLEDGE)

    . //3)gettheQueueobject

    . Queuet=(Queue)ctx.lookup("myQueue")

    . //4)createQueueSenderobject

    . QueueSendersender=ses.createSender(t)

    . //5)createTextMessageobject

    . TextMessagemsg=ses.createTextMessage()

    .

    . //6)writemessage

    . BufferedReaderb=newBufferedReader(newInputStreamReader(System.in))

    . while(true)

    . {

    . System.out.println("EnterMsg,endtoterminate:")

    . Strings=b.readLine()

    . if(s.equals("end"))

    . break

    . msg.setText(s)

    . //7)sendmessage

  • . sender.send(msg)

    . System.out.println("Messagesuccessfullysent.")

    . }

    . //8)connectionclose

    . con.close()

    . }catch(Exceptione){System.out.println(e)}

    . }

    . }

    File:MyReceiver.java

    . importjavax.jms.*

    . importjavax.naming.InitialContext

    .

    . publicclassMyReceiver{

    . publicstaticvoidmain(String[]args){

    . try{

    . //1)Createandstartconnection

    . InitialContextctx=newInitialContext()

    . QueueConnectionFactoryf=(QueueConnectionFactory)ctx.lookup("myQueueConnectionFactory")

    . QueueConnectioncon=f.createQueueConnection()

    . con.start()

    . //2)createQueuesession

    . QueueSessionses=con.createQueueSession(false,Session.AUTO_ACKNOWLEDGE)

    . //3)gettheQueueobject

    . Queuet=(Queue)ctx.lookup("myQueue")

    . //4)createQueueReceiver

    . QueueReceiverreceiver=ses.createReceiver(t)

    .

    . //5)createlistenerobject

    . MyListenerlistener=newMyListener()

  • .

    . //6)registerthelistenerobjectwithreceiver

    . receiver.setMessageListener(listener)

    .

    . System.out.println("Receiver1isready,waitingformessages...")

    . System.out.println("pressCtrl+ctoshutdown...")

    . while(true){

    . Thread.sleep(1000)

    . }

    . }catch(Exceptione){System.out.println(e)}

    . }

    .

    . }

    File:MyListener.java

    . importjavax.jms.*

    . publicclassMyListenerimplementsMessageListener{

    .

    . publicvoidonMessage(Messagem){

    . try{

    . TextMessagemsg=(TextMessage)m

    .

    . System.out.println("followingmessageisreceived:"+msg.getText())

    . }catch(JMSExceptione){System.out.println(e)}

    . }

    . }

    RuntheReceiverclassfirstthenSenderclass.

    JMSTopicExample

  • ItissameasJMSQueue,butyouneedtochangeQueuetoTopic,SendertoPublisherandReceivertoSubscriber.

    Youneedtocreate2JNDInamedmyTopicConnectionFactoryandmyTopic.

    File:MySender.java

    . importjava.io.BufferedReader

    . importjava.io.InputStreamReader

    . importjavax.naming.*

    . importjavax.jms.*

    .

    . publicclassMySender{

    . publicstaticvoidmain(String[]args){

    . try

    . {//Createandstartconnection

    . InitialContextctx=newInitialContext()

    . TopicConnectionFactoryf=(TopicConnectionFactory)ctx.lookup("myTopicConnectionFactory")

    . TopicConnectioncon=f.createTopicConnection()

    . con.start()

    . //2)createqueuesession

    . TopicSessionses=con.createTopicSession(false,Session.AUTO_ACKNOWLEDGE)

    . //3)gettheTopicobject

    . Topict=(Topic)ctx.lookup("myTopic")

    . //4)createTopicPublisherobject

    . TopicPublisherpublisher=ses.createPublisher(t)

    . //5)createTextMessageobject

    . TextMessagemsg=ses.createTextMessage()

    .

    . //6)writemessage

    . BufferedReaderb=newBufferedReader(newInputStreamReader(System.in))

  • . while(true)

    . {

    . System.out.println("EnterMsg,endtoterminate:")

    . Strings=b.readLine()

    . if(s.equals("end"))

    . break

    . msg.setText(s)

    . //7)sendmessage

    . publisher.publish(msg)

    . System.out.println("Messagesuccessfullysent.")

    . }

    . //8)connectionclose

    . con.close()

    . }catch(Exceptione){System.out.println(e)}

    . }

    . }

    File:MyReceiver.java

    . importjavax.jms.*

    . importjavax.naming.InitialContext

    .

    . publicclassMyReceiver{

    . publicstaticvoidmain(String[]args){

    . try{

    . //1)Createandstartconnection

    . InitialContextctx=newInitialContext()

    . TopicConnectionFactoryf=(TopicConnectionFactory)ctx.lookup("myTopicConnectionFactory")

    . TopicConnectioncon=f.createTopicConnection()

    . con.start()

    . //2)createtopicsession

  • . TopicSessionses=con.createTopicSession(false,Session.AUTO_ACKNOWLEDGE)

    . //3)gettheTopicobject

    . Topict=(Topic)ctx.lookup("myTopic")

    . //4)createTopicSubscriber

    . TopicSubscriberreceiver=ses.createSubscriber(t)

    .

    . //5)createlistenerobject

    . MyListenerlistener=newMyListener()

    .

    . //6)registerthelistenerobjectwithsubscriber

    . receiver.setMessageListener(listener)

    .

    . System.out.println("Subscriber1isready,waitingformessages...")

    . System.out.println("pressCtrl+ctoshutdown...")

    . while(true){

    . Thread.sleep(1000)

    . }

    . }catch(Exceptione){System.out.println(e)}

    . }

    .

    . }

    File:MyListener.java

    . importjavax.jms.*

    . publicclassMyListenerimplementsMessageListener{

    .

    . publicvoidonMessage(Messagem){

    . try{

    . TextMessagemsg=(TextMessage)m

    .

    . System.out.println("followingmessageisreceived:"+msg.getText())

  • . }catch(JMSExceptione){System.out.println(e)}

    . }

    . }