JMS Tutorial
-
Upload
anonymous-uhyf8qlli -
Category
Documents
-
view
232 -
download
0
description
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)}
. }
. }