SlideShare a Scribd company logo
1 of 42
JAVA MESSAGING SERVICE
JMS

 Java API that allows applications to
  create, send, receive, and read messages.
 Designed by Sun and several partner companies

 JMS API defines a common set of interfaces and
  associated semantics that allow programs written in
  the Java programming language to communicate
  with other messaging implementations.
 Minimizes the set of concepts a programmer must
  learn in order to use messaging products but
  provides enough features to support sophisticated
  messaging applications.
MESSAGING

 Method of communication between software
  components or applications.
 Messaging system is a peer-to-peer facility: A
  messaging client can send messages to, and
  receive messages from, any other client.
 Each client connects to a messaging agent that
  provides facilities for
  creating, sending, receiving, and reading
  messages.
MESSAGING

   Messaging enables distributed communication that
    is loosely coupled.
       A component sends a message to a destination
       The recipient can retrieve the message from the
        destination.
       The sender and the receiver do not have to be available
        at the same time in order to communicate
       The sender does not need to know anything about the
        receiver; nor does the receiver need to know anything
        about the sender.
       The sender and the receiver need to know only which
        message format and which destination to use.
MESSAGING

o   Messaging differs from tightly coupled
    technologies, such as Remote Method Invocation
    (RMI), which require an application to know a
    remote application’s methods.
   Messaging also differs from electronic mail
    (email), which is a method of communication between
    people or between software applications and people.
    Messaging is used for communication between software
    applications or software components.
   Using messaging allows the various components to
    interact with one another efficiently, without tying up
    network or other resources.
JMS OVERVIEW

The JMS API enables communication that is not only
  loosely coupled but also
   Asynchronous: A JMS provider can deliver messages
    to a client as they arrive; a client does not have to
    request messages in order to receive them.
   Reliable: The JMS API can ensure that a message is
    delivered once and only once. Lower levels of reliability
    are available for applications that can afford to miss
    messages or to receive duplicate messages.
JMS OVERVIEW

Beginning with the 1.3 release of the Java EE
 platform, the JMS API has been an integral part of
 the platform, and application developers can use
 messaging with Java EE components.
JMS OVERVIEW

An enterprise application provider is likely to choose a
 messaging API over a tightly coupled API, such as
 remote procedure call (RPC), under the following
 circumstances.
   The provider wants the components not to depend on
    information about other components’ interfaces, so that
    components can be easily replaced.
   The provider wants the application to run whether or not
    all components are up and running simultaneously.
   The application business model allows a component to
    send information to another and to continue to operate
    without receiving an immediate response.
JMS OVERVIEW

The JMS API in the Java EE platform has the following
  features.
 Application clients, Enterprise JavaBeans (EJB)
  components, and web components can send or
  synchronously receive a JMS message. Application
  clients can in addition receive JMS messages
  asynchronously.
 Message-driven beans, which are a kind of enterprise
  bean, enable the asynchronous consumption of
  messages. A JMS provider can optionally implement
  concurrent processing of messages by message-driven
  beans.
 Message send and receive operations can participate in
  distributed transactions, which allow JMS operations
  and database accesses to take place within a single
  transaction.
JMS PROVIDERS

 The JMS provider can be integrated with the
  application server using the Java EE Connector
  architecture.
 You access the JMS provider through a resource
  adapter.
       This capability allows vendors to create JMS providers
        that can be plugged in to multiple application
        servers, and it allows application servers to support
        multiple JMS providers.
JMS API ARCHITECTURE

A JMS application is composed of the following parts.
 A JMS provider is a messaging system that implements the JMS
  interfaces and provides administrative and control features. An
  implementation of the Java EE platform includes a JMS provider.

   JMS clients are the programs or components, written in the Java
    programming language, that produce and consume messages. Any
    Java EE application component can act as a JMS client.

   Messages are the objects that communicate information between
    JMS clients.

   Administered objects are preconfigured JMS objects created by an
    administrator for the use of clients. The two kinds of JMS
    administered objects are destinations and connection factories
JMS API ARCHITECTURE
MESSAGING DOMAINS

 Before the JMS API existed, most messaging products
  supported either the point-to-point or the
  publish/subscribe approach to messaging.
 The JMS specification provides a separate domain for
  each approach and defines compliance for each domain.
 A stand-alone JMS provider can implement one or both
  domains. A Java EE provider must implement both
  domains.
 The JMS specification goes one step further: It provides
  common interfaces that enable you to use the JMS API in
  a way that is not specific to either domain.
POINT-TO-POINT MESSAGING DOMAIN

 built on the concept of message
  queues, senders, and receivers.
 Each message is addressed to a specific
  queue, and receiving clients extract messages from
  the queues established to hold their messages.
 Queues retain all messages sent to them until the
  messages are consumed or until the messages
  expire.
POINT-TO-POINT MESSAGING DOMAIN
POINT-TO-POINT CHARACTERISTICS

 Each message has only one consumer.
 A sender and a receiver of a message have no
  timing dependencies. The receiver can fetch the
  message whether or not it was running when the
  client sent the message.
 The receiver acknowledges the successful
  processing of a message.
PUBLISH/SUBSCRIBE MESSAGING DOMAIN

 In a pub/sub product or application, clients address
  messages to a topic, which functions somewhat like a
  bulletin board.
 Publishers and subscribers are generally anonymous and
  can dynamically publish or subscribe to the content
  hierarchy.
 The system takes care of distributing the messages
  arriving from a topic’s multiple publishers to its multiple
  subscribers.
 Topics retain messages only as long as it takes to
  distribute them to current subscribers.
PUBLISH/SUBSCRIBE MESSAGING DOMAIN
PUBLISH/SUBSCRIBE CHARACTERISTICS

 Each message can have multiple consumers.
 Publishers and subscribers have a timing
  dependency. A client that subscribes to a topic can
  consume only messages published after the client
  has created a subscription, and the subscriber must
  continue to be active in order for it to consume
  messages.
PUBLISH/SUBSCRIBE CHARACTERISTICS

 The JMS API relaxes this timing dependency to
  some extent by allowing subscribers to create
  durable subscriptions, which receive messages
  sent while the subscribers are not active.
 Durable subscriptions provide the flexibility and
  reliability of queues but still allow clients to send
  messages to many recipients.
MESSAGE CONSUMPTION

Messaging products are inherently asynchronous ; There is
 no fundamental timing dependency between the
 production and the consumption of a message.
 However, the JMS specification uses this term in a more
 precise sense. Messages can be consumed in either of
 two ways:
   Synchronously
   Asynchronously
MESSAGE CONSUMPTION

 Synchronously: A subscriber or a receiver
  explicitly fetches the message from the destination
  by calling the receive method. The receive method
  can block until a message arrives or can time out if
  a message does not arrive within a specified time
  limit.
 Asynchronously: A client can register a message
  listener with a consumer. A message listener is
  similar to an event listener. Whenever a message
  arrives at the destination, the JMS provider delivers
  the message by calling the listener’s onMessage
  method, which acts on the contents of the
  message.
JMS BASIC BUILDING BLOCKS

 Administered objects: connection factories and
  destinations
 Connections

 Sessions

 Message producers

 Message consumers

 Messages
ADMINISTERED OBJECTS

 Two parts of a JMS application, destinations and
  connection factories, are best maintained
  administratively rather than programmatically
 The technology underlying these objects is likely to
  be very different from one implementation of the
  JMS API to another
 administrator configures administered objects in a
  JNDI namespace, and JMS clients then access
  them by using resource injection.
CONNECTION FACTORIES

 object a client uses to create a connection to a
  provider
 A connection factory encapsulates a set of
  connection configuration parameters that has been
  defined by an administrator.

       @Resource(lookup = "jms/ConnectionFactory")
         private static ConnectionFactory connectionFactory;
DESTINATIONS

 object a client uses to specify the target of
  messages it produces and the source of messages
  it consumes
 In the PTP messaging domain, destinations are
  called queues. In the pub/sub messaging
  domain, destinations are called topics
       @Resource(lookup = "jms/Queue")
         private static Queue queue;

       @Resource(lookup = "jms/Topic")
         private static Topic topic;
CONNECTIONS

 A connection encapsulates a virtual connection
  with a JMS provider
 A connection could represent an open TCP/IP
  socket between a client and a provider service
  daemon
       Connection connection = connectionFactory.createConnection();

 Failure to close a connection after using it can
  cause resources not to be released by the JMS
  provider.
 Closing a connection also closes its sessions and
  their message producers and message consumers
SESSIONS

 a single-threaded context for producing and
  consuming messages
 Creates:
       Message producers
       Message consumers
       Messages
       Queue browsers
       Temporary queues and topics
SESSIONS

 Sessions serialize the execution of message
  listeners
 provides a transactional context with which to group
  a set of sends and receives into an atomic unit of
  work
       Session session =
        connection.createSession(false,Session.AUTO_ACK
        NOWLEDGE);
    The first argument means that the session is
     not transacted; the second means that the
     session automatically acknowledges
     messages when they have been received
     successfully
MESSAGE PRODUCERS

   object that is created by a session and used for
    producing messages to a destination

       MessageProducer producer =
        session.createProducer(dest);
       producer.send(message);
MESSAGE CONSUMERS

 object that is created by a session and used for
  receiving messages sent to a destination
 The JMS provider manages the delivery of
  messages from a destination to the registered
  consumers of the destination
     MessageConsumer consumer =
      session.createConsumer(dest);
     Message m = consumer.receive(1000); // time out after a
      second
    To consume a message asynchronously, you use a message
      listener
JMS MESSAGE LISTENERS

   object that acts as an asynchronous event handler
    for messages
       Listener myListener = new Listener();
       consumer.setMessageListener(myListener);
MESSAGE SELECTORS

 to filter the messages messaging application
  receives
 assign the work of filtering messages to the JMS
  provider rather than to the application
 A message selector is a String that contains an
  expression
 The message consumer then receives only
  messages whose headers and properties match the
  selector
 A message selector cannot select messages on the
  basis of the content of the message body
MESSAGES

   Header(required):contains a number of predefined fields that
    contain values that both clients and providers use to identify and to
    route messages


   Properties : You can use properties to provide compatibility with
    other messaging systems, or you can use them to create message
    selectors


   Body : allow you to send and to receive data in many different
    forms and provide compatibility with existing messaging formats
MESSAGE PROPERTIES


 Properties allow an application, via message
  selectors, to have a JMS provider select, or
  filter, messages on its behalf using application-
  specific criteria.
 When a client receives a message, its properties
  are in read-only mode. If clearProperties is
  called, the properties can now be both read from
  and written to.
MESSAGE BODY

   Stream - A StreamMessage object's message body
    contains a stream of primitive values in the Java
    programming language ("Java primitives"). It is
    filled and read sequentially.

   Map - A MapMessage object's message body
    contains a set of name-value pairs, where names
    are String objects, and values are Java primitives.
    The entries can be accessed sequentially or
    randomly by name.
MESSAGE BODY
   Text - A TextMessage object's message body
    contains a java.lang.String object. This message
    type can be used to transport plain-text
    messages, and XML messages.

   Object - An ObjectMessage object's message body
    contains a Serializable Java object.
MESSAGE BODY
   Bytes - A BytesMessage object's message body
    contains a stream of uninterpreted bytes. This
    message type is for literally encoding a body to
    match an existing message format. In many
    cases, it is possible to use one of the other body
    types, which are easier to use. Although the JMS
    API allows the use of message properties with byte
    messages, they are typically not used, since the
    inclusion of properties may affect the format.
MESSAGE ACKNOWLEDGMENT

Until a JMS message has been acknowledged, it is
 not considered to be successfully consumed
  1.   The client receives the message.
  2.   The client processes the message.
  3.   The message is acknowledged. Acknowledgment is
       initiated either by the JMS provider or by the
       client, depending on the session acknowledgment
       mode.
JMS QUEUE BROWSERS

 inspect the messages in a queue
 display the header values for each message

 The JMS API provides no mechanism for browsing
  a topic
       QueueBrowser browser = session.createBrowser(queue);
DEMO

   The libraries you need to add in eclipse are these:
    ..glassfish3mqlibjms.jar
    ..glassfish3glassfishlibjavaee.jar
    ..glassfish3glassfishlibappserv-rt.jar
    ..glassfish3glassfishlibinstallapplicationsj
    msra*
    ..glassfish3glassfishmodules*

More Related Content

What's hot

15 falko menge--_enterpise_service_bus
15 falko menge--_enterpise_service_bus15 falko menge--_enterpise_service_bus
15 falko menge--_enterpise_service_buslmphuong06
 
Mule ESB Interview or Certification questions
Mule ESB Interview or Certification questionsMule ESB Interview or Certification questions
Mule ESB Interview or Certification questionsTechieVarsity
 
Mule healthcare toolkit
Mule healthcare toolkitMule healthcare toolkit
Mule healthcare toolkitD.Rajesh Kumar
 
RaviResume_3Years_new
RaviResume_3Years_newRaviResume_3Years_new
RaviResume_3Years_newRavi D
 
Messaging API (MAPI)
Messaging API (MAPI)Messaging API (MAPI)
Messaging API (MAPI)Harish Kumar
 
Chapter3
Chapter3Chapter3
Chapter3suks_87
 
A dynamic application using jboss
A dynamic application using jbossA dynamic application using jboss
A dynamic application using jbossijcax
 
International Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentInternational Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentIJERD Editor
 
VNSISPL_DBMS_Concepts_ch8
VNSISPL_DBMS_Concepts_ch8VNSISPL_DBMS_Concepts_ch8
VNSISPL_DBMS_Concepts_ch8sriprasoon
 

What's hot (19)

Jms
JmsJms
Jms
 
15 falko menge--_enterpise_service_bus
15 falko menge--_enterpise_service_bus15 falko menge--_enterpise_service_bus
15 falko menge--_enterpise_service_bus
 
Jdbc
JdbcJdbc
Jdbc
 
Mule basics
Mule basicsMule basics
Mule basics
 
Mule ESB Interview or Certification questions
Mule ESB Interview or Certification questionsMule ESB Interview or Certification questions
Mule ESB Interview or Certification questions
 
Mule hct
Mule hctMule hct
Mule hct
 
Mule healthcare toolkit
Mule healthcare toolkitMule healthcare toolkit
Mule healthcare toolkit
 
ISUG SSB Lior King
ISUG SSB Lior KingISUG SSB Lior King
ISUG SSB Lior King
 
RaviResume_3Years_new
RaviResume_3Years_newRaviResume_3Years_new
RaviResume_3Years_new
 
Tamer_Mohamed
Tamer_MohamedTamer_Mohamed
Tamer_Mohamed
 
Mule velocity
Mule velocityMule velocity
Mule velocity
 
integeration
integerationintegeration
integeration
 
Messaging API (MAPI)
Messaging API (MAPI)Messaging API (MAPI)
Messaging API (MAPI)
 
ankush_resume
ankush_resumeankush_resume
ankush_resume
 
Chapter3
Chapter3Chapter3
Chapter3
 
A dynamic application using jboss
A dynamic application using jbossA dynamic application using jboss
A dynamic application using jboss
 
International Journal of Engineering Research and Development
International Journal of Engineering Research and DevelopmentInternational Journal of Engineering Research and Development
International Journal of Engineering Research and Development
 
Eska mmc
Eska mmcEska mmc
Eska mmc
 
VNSISPL_DBMS_Concepts_ch8
VNSISPL_DBMS_Concepts_ch8VNSISPL_DBMS_Concepts_ch8
VNSISPL_DBMS_Concepts_ch8
 

Similar to Jms session (1)

Similar to Jms session (1) (20)

Apache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache CamelApache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache Camel
 
Messaging Frameworks using JMS
Messaging Frameworks using JMS Messaging Frameworks using JMS
Messaging Frameworks using JMS
 
test validation
test validationtest validation
test validation
 
Test DB user
Test DB userTest DB user
Test DB user
 
Jms
JmsJms
Jms
 
ActiveMQ interview Questions and Answers
ActiveMQ interview Questions and AnswersActiveMQ interview Questions and Answers
ActiveMQ interview Questions and Answers
 
JMS - Java Messaging Service
JMS - Java Messaging ServiceJMS - Java Messaging Service
JMS - Java Messaging Service
 
JMS01
JMS01JMS01
JMS01
 
WebLogic JMS System Best Practices
WebLogic JMS System Best PracticesWebLogic JMS System Best Practices
WebLogic JMS System Best Practices
 
Présentation des bus de message broker vs bus
Présentation des bus de message broker vs busPrésentation des bus de message broker vs bus
Présentation des bus de message broker vs bus
 
Mule esb
Mule esbMule esb
Mule esb
 
Mule esb
Mule esbMule esb
Mule esb
 
Mule
MuleMule
Mule
 
Java Message Service
Java Message ServiceJava Message Service
Java Message Service
 
Jms topics
Jms topicsJms topics
Jms topics
 
test
testtest
test
 
test
testtest
test
 
test
testtest
test
 
test
testtest
test
 
test
testtest
test
 

Jms session (1)

  • 2. JMS  Java API that allows applications to create, send, receive, and read messages.  Designed by Sun and several partner companies  JMS API defines a common set of interfaces and associated semantics that allow programs written in the Java programming language to communicate with other messaging implementations.  Minimizes the set of concepts a programmer must learn in order to use messaging products but provides enough features to support sophisticated messaging applications.
  • 3. MESSAGING  Method of communication between software components or applications.  Messaging system is a peer-to-peer facility: A messaging client can send messages to, and receive messages from, any other client.  Each client connects to a messaging agent that provides facilities for creating, sending, receiving, and reading messages.
  • 4. MESSAGING  Messaging enables distributed communication that is loosely coupled.  A component sends a message to a destination  The recipient can retrieve the message from the destination.  The sender and the receiver do not have to be available at the same time in order to communicate  The sender does not need to know anything about the receiver; nor does the receiver need to know anything about the sender.  The sender and the receiver need to know only which message format and which destination to use.
  • 5. MESSAGING o Messaging differs from tightly coupled technologies, such as Remote Method Invocation (RMI), which require an application to know a remote application’s methods.  Messaging also differs from electronic mail (email), which is a method of communication between people or between software applications and people. Messaging is used for communication between software applications or software components.  Using messaging allows the various components to interact with one another efficiently, without tying up network or other resources.
  • 6. JMS OVERVIEW The JMS API enables communication that is not only loosely coupled but also  Asynchronous: A JMS provider can deliver messages to a client as they arrive; a client does not have to request messages in order to receive them.  Reliable: The JMS API can ensure that a message is delivered once and only once. Lower levels of reliability are available for applications that can afford to miss messages or to receive duplicate messages.
  • 7. JMS OVERVIEW Beginning with the 1.3 release of the Java EE platform, the JMS API has been an integral part of the platform, and application developers can use messaging with Java EE components.
  • 8. JMS OVERVIEW An enterprise application provider is likely to choose a messaging API over a tightly coupled API, such as remote procedure call (RPC), under the following circumstances.  The provider wants the components not to depend on information about other components’ interfaces, so that components can be easily replaced.  The provider wants the application to run whether or not all components are up and running simultaneously.  The application business model allows a component to send information to another and to continue to operate without receiving an immediate response.
  • 9. JMS OVERVIEW The JMS API in the Java EE platform has the following features.  Application clients, Enterprise JavaBeans (EJB) components, and web components can send or synchronously receive a JMS message. Application clients can in addition receive JMS messages asynchronously.  Message-driven beans, which are a kind of enterprise bean, enable the asynchronous consumption of messages. A JMS provider can optionally implement concurrent processing of messages by message-driven beans.  Message send and receive operations can participate in distributed transactions, which allow JMS operations and database accesses to take place within a single transaction.
  • 10. JMS PROVIDERS  The JMS provider can be integrated with the application server using the Java EE Connector architecture.  You access the JMS provider through a resource adapter.  This capability allows vendors to create JMS providers that can be plugged in to multiple application servers, and it allows application servers to support multiple JMS providers.
  • 11. JMS API ARCHITECTURE A JMS application is composed of the following parts.  A JMS provider is a messaging system that implements the JMS interfaces and provides administrative and control features. An implementation of the Java EE platform includes a JMS provider.  JMS clients are the programs or components, written in the Java programming language, that produce and consume messages. Any Java EE application component can act as a JMS client.  Messages are the objects that communicate information between JMS clients.  Administered objects are preconfigured JMS objects created by an administrator for the use of clients. The two kinds of JMS administered objects are destinations and connection factories
  • 13. MESSAGING DOMAINS  Before the JMS API existed, most messaging products supported either the point-to-point or the publish/subscribe approach to messaging.  The JMS specification provides a separate domain for each approach and defines compliance for each domain.  A stand-alone JMS provider can implement one or both domains. A Java EE provider must implement both domains.  The JMS specification goes one step further: It provides common interfaces that enable you to use the JMS API in a way that is not specific to either domain.
  • 14. POINT-TO-POINT MESSAGING DOMAIN  built on the concept of message queues, senders, and receivers.  Each message is addressed to a specific queue, and receiving clients extract messages from the queues established to hold their messages.  Queues retain all messages sent to them until the messages are consumed or until the messages expire.
  • 16. POINT-TO-POINT CHARACTERISTICS  Each message has only one consumer.  A sender and a receiver of a message have no timing dependencies. The receiver can fetch the message whether or not it was running when the client sent the message.  The receiver acknowledges the successful processing of a message.
  • 17. PUBLISH/SUBSCRIBE MESSAGING DOMAIN  In a pub/sub product or application, clients address messages to a topic, which functions somewhat like a bulletin board.  Publishers and subscribers are generally anonymous and can dynamically publish or subscribe to the content hierarchy.  The system takes care of distributing the messages arriving from a topic’s multiple publishers to its multiple subscribers.  Topics retain messages only as long as it takes to distribute them to current subscribers.
  • 19. PUBLISH/SUBSCRIBE CHARACTERISTICS  Each message can have multiple consumers.  Publishers and subscribers have a timing dependency. A client that subscribes to a topic can consume only messages published after the client has created a subscription, and the subscriber must continue to be active in order for it to consume messages.
  • 20. PUBLISH/SUBSCRIBE CHARACTERISTICS  The JMS API relaxes this timing dependency to some extent by allowing subscribers to create durable subscriptions, which receive messages sent while the subscribers are not active.  Durable subscriptions provide the flexibility and reliability of queues but still allow clients to send messages to many recipients.
  • 21. MESSAGE CONSUMPTION Messaging products are inherently asynchronous ; There is no fundamental timing dependency between the production and the consumption of a message. However, the JMS specification uses this term in a more precise sense. Messages can be consumed in either of two ways:  Synchronously  Asynchronously
  • 22. MESSAGE CONSUMPTION  Synchronously: A subscriber or a receiver explicitly fetches the message from the destination by calling the receive method. The receive method can block until a message arrives or can time out if a message does not arrive within a specified time limit.  Asynchronously: A client can register a message listener with a consumer. A message listener is similar to an event listener. Whenever a message arrives at the destination, the JMS provider delivers the message by calling the listener’s onMessage method, which acts on the contents of the message.
  • 23. JMS BASIC BUILDING BLOCKS  Administered objects: connection factories and destinations  Connections  Sessions  Message producers  Message consumers  Messages
  • 24.
  • 25. ADMINISTERED OBJECTS  Two parts of a JMS application, destinations and connection factories, are best maintained administratively rather than programmatically  The technology underlying these objects is likely to be very different from one implementation of the JMS API to another  administrator configures administered objects in a JNDI namespace, and JMS clients then access them by using resource injection.
  • 26. CONNECTION FACTORIES  object a client uses to create a connection to a provider  A connection factory encapsulates a set of connection configuration parameters that has been defined by an administrator.  @Resource(lookup = "jms/ConnectionFactory") private static ConnectionFactory connectionFactory;
  • 27. DESTINATIONS  object a client uses to specify the target of messages it produces and the source of messages it consumes  In the PTP messaging domain, destinations are called queues. In the pub/sub messaging domain, destinations are called topics  @Resource(lookup = "jms/Queue") private static Queue queue;  @Resource(lookup = "jms/Topic") private static Topic topic;
  • 28. CONNECTIONS  A connection encapsulates a virtual connection with a JMS provider  A connection could represent an open TCP/IP socket between a client and a provider service daemon  Connection connection = connectionFactory.createConnection();  Failure to close a connection after using it can cause resources not to be released by the JMS provider.  Closing a connection also closes its sessions and their message producers and message consumers
  • 29. SESSIONS  a single-threaded context for producing and consuming messages  Creates:  Message producers  Message consumers  Messages  Queue browsers  Temporary queues and topics
  • 30. SESSIONS  Sessions serialize the execution of message listeners  provides a transactional context with which to group a set of sends and receives into an atomic unit of work  Session session = connection.createSession(false,Session.AUTO_ACK NOWLEDGE); The first argument means that the session is not transacted; the second means that the session automatically acknowledges messages when they have been received successfully
  • 31. MESSAGE PRODUCERS  object that is created by a session and used for producing messages to a destination  MessageProducer producer = session.createProducer(dest);  producer.send(message);
  • 32. MESSAGE CONSUMERS  object that is created by a session and used for receiving messages sent to a destination  The JMS provider manages the delivery of messages from a destination to the registered consumers of the destination  MessageConsumer consumer = session.createConsumer(dest);  Message m = consumer.receive(1000); // time out after a second To consume a message asynchronously, you use a message listener
  • 33. JMS MESSAGE LISTENERS  object that acts as an asynchronous event handler for messages  Listener myListener = new Listener();  consumer.setMessageListener(myListener);
  • 34. MESSAGE SELECTORS  to filter the messages messaging application receives  assign the work of filtering messages to the JMS provider rather than to the application  A message selector is a String that contains an expression  The message consumer then receives only messages whose headers and properties match the selector  A message selector cannot select messages on the basis of the content of the message body
  • 35. MESSAGES  Header(required):contains a number of predefined fields that contain values that both clients and providers use to identify and to route messages  Properties : You can use properties to provide compatibility with other messaging systems, or you can use them to create message selectors  Body : allow you to send and to receive data in many different forms and provide compatibility with existing messaging formats
  • 36. MESSAGE PROPERTIES  Properties allow an application, via message selectors, to have a JMS provider select, or filter, messages on its behalf using application- specific criteria.  When a client receives a message, its properties are in read-only mode. If clearProperties is called, the properties can now be both read from and written to.
  • 37. MESSAGE BODY  Stream - A StreamMessage object's message body contains a stream of primitive values in the Java programming language ("Java primitives"). It is filled and read sequentially.  Map - A MapMessage object's message body contains a set of name-value pairs, where names are String objects, and values are Java primitives. The entries can be accessed sequentially or randomly by name.
  • 38. MESSAGE BODY  Text - A TextMessage object's message body contains a java.lang.String object. This message type can be used to transport plain-text messages, and XML messages.  Object - An ObjectMessage object's message body contains a Serializable Java object.
  • 39. MESSAGE BODY  Bytes - A BytesMessage object's message body contains a stream of uninterpreted bytes. This message type is for literally encoding a body to match an existing message format. In many cases, it is possible to use one of the other body types, which are easier to use. Although the JMS API allows the use of message properties with byte messages, they are typically not used, since the inclusion of properties may affect the format.
  • 40. MESSAGE ACKNOWLEDGMENT Until a JMS message has been acknowledged, it is not considered to be successfully consumed 1. The client receives the message. 2. The client processes the message. 3. The message is acknowledged. Acknowledgment is initiated either by the JMS provider or by the client, depending on the session acknowledgment mode.
  • 41. JMS QUEUE BROWSERS  inspect the messages in a queue  display the header values for each message  The JMS API provides no mechanism for browsing a topic  QueueBrowser browser = session.createBrowser(queue);
  • 42. DEMO  The libraries you need to add in eclipse are these: ..glassfish3mqlibjms.jar ..glassfish3glassfishlibjavaee.jar ..glassfish3glassfishlibappserv-rt.jar ..glassfish3glassfishlibinstallapplicationsj msra* ..glassfish3glassfishmodules*

Editor's Notes

  1. Administrative tools allow you to bind destinations and connection factories into a JNDI namespace. A JMS client can then use resource injection to access the administered objects in the namespace and then establish a logical connection to the same objects through the JMS provider
  2. Java EE Product ProviderThe Java EE product provider is the company that designs and makes available for purchase the Java EE platform APIs and other features defined in the Java EE specification. Product providers are typically application server vendors that implement the Java EE platform according to the Java EE 6 Platform specification.
  3. JMS clients access these objects through interfaces that are portable, so a client application can run with little or no change on more than one implementation of the JMS API. Ordinarily, an administrator configures administered objects in a JNDI namespace, and JMS clients then access them by using resource injection.With GlassFish Server, you can use the asadmin create-jms-resource command or the Administration Console to create JMS administered objects in the form of connector resources. You can also specify the resources in a file named glassfish-resources.xml that you can bundle with an application.
  4. At the beginning of a JMS client program, you usually inject a connection factory resource into a ConnectionFactory object. For example, the following code fragment specifies a resource whose JNDI name is jms/ConnectionFactory and assigns it to a ConnectionFactory object:@Resource(lookup = "jms/ConnectionFactory") private static ConnectionFactoryconnectionFactory;In a Java EE application, JMS administered objects are normally placed in the jms naming subcontext.
  5. In addition to injecting a connection factory resource into a client program, you usually inject a destination resource. Unlike connection factories, destinations are specific to one domain or the other. To create an application that allows you to use the same code for both topics and queues, you assign the destination to a Destination object.
  6. Before your application can consume messages, you must call the connection’s start method; for details, see JMS Message Consumers. If you want to stop message delivery temporarily without closing the connection, you call the stop method.
  7. To create a transacted session, use the following code:Session session = connection.createSession(true, 0);Here, the first argument means that the session is transacted; the second indicates that message acknowledgment is not specified for transacted sessions. For more information on transactions, see Using JMS API Local Transactions. For information about the way JMS transactions work in Java EE applications, see Using the JMS API in Java EE Applications.Instead of using local transactions, you use container-managed transactions for bean methods that perform sends or receives, allowing the EJB container to handle transaction demarcation. Because container-managed transactions are the default, you do not have to use an annotation to specify them.You can use bean-managed transactions and the javax.transaction.UserTransaction interface’s transaction demarcation methods, but you should do so only if your application has special requirements and you are an expert in using transactions. Usually, container-managed transactions produce the most efficient and correct behavior. This tutorial does not provide any examples of bean-managed transactions.Local TransactionA local transaction represents a unit of work on a single connection to a data source managed by a resource manager. In JMS, we can use the JMS API to get a transacted session and call methods for commit or rollback for the relevant transaction objects. This is managed internal to a resource manager. There is no external transaction manager involved in the coordination of such transactions.
  8. You use the Session.createDurableSubscriber method to create a durable topic subscriber. This method is valid only if you are using a topic. For details, see Creating Durable Subscriptions.After you have created a message consumer, it becomes active, and you can use it to receive messages. You can use the close method for a MessageConsumer to make the message consumer inactive. Message delivery does not begin until you start the connection you created by calling its start method. (Remember always to call the start method; forgetting to start the connection is one of the most common JMS programming errors.)
  9. After you register the message listener, you call the start method on the Connection to begin message delivery. (If you call start before you register the message listener, you are likely to miss messages.)Your onMessage method should handle all exceptions. It must not throw checked exceptions, and throwing a RuntimeException is considered a programming error.The session used to create the message consumer serializes the execution of all message listeners registered with the session. At any time, only one of the session’s message listeners is running.
  10. The syntax of the expression is based on a subset of the SQL92 conditional expression syntax. The message selector in the example selects any message that has a NewsType property that is set to the value 'Sports' or 'Opinion':NewsType = ’Sports’ OR NewsType = ’Opinion’The createConsumer and createDurableSubscriber methods allow you to specify a message selector as an argument when you create a message consumer.
  11. The JMS API provides methods for creating messages of each type and for filling in their contents. For example, to create and send a TextMessage, you might use the following statements:TextMessage message = session.createTextMessage(); message.setText(msg_text); // msg_text is a String producer.send(message);At the consuming end, a message arrives as a generic Message object and must be cast to the appropriate message type. You can use one or more getter methods to extract the message contents. The following code fragment uses the getText method:Message m = consumer.receive(); if (m instanceofTextMessage) { TextMessage message = (TextMessage) m; System.out.println("Reading message: " + message.getText()); } else { // Handle error }
  12. A property value may duplicate a value in a message's body, or it may not. Although JMS does not define a policy for what should or should not be made a property, application developers should note that JMS providers will likely handle data in a message's body more efficiently than data in a message's properties. For best performance, applications should use message properties only when they need to customize a message's header. The primary reason for doing this is to support customized message selection. In addition to the type-specific set/get methods for properties, JMS provides the setObjectProperty and getObjectProperty methods. These support the same set of property types using the objectified primitive values. Their purpose is to allow the decision of property type to made at execution time rather than at compile time. They support the same property value conversions. To iterate through a message's property values, use getPropertyNames to retrieve a property name enumeration and then use the various property get methods to retrieve their values.
  13. The JMS API provides no mechanism for browsing a topic. Messages usually disappear from a topic as soon as they appear: if there are no message consumers to consume them, the JMS provider removes them. Although durable subscriptions allow messages to remain on a topic while the message consumer is not active, no facility exists for examining them.