Saturday, June 13, 2009

JMS

Q: What is JMS?

A: Java Message Service: An interface implemented by most J2EE containers to provide point-to-point queueing and topic (publish/subscribe) behavior. JMS is frequently used by EJB's that need to start another process asynchronously.

For example, instead of sending an email directly from an Enterprise
JavaBean, the bean may choose to put the message onto a JMS queue to be handled by a Message-Driven Bean (another type of EJB) or another
system in the enterprise. This technique allows the EJB to return to
handling requests immediately instead of waiting for a potentially
lengthy process to complete.

Q: What are major JMS products available in the market?

A: IBM's MQ Series, SonicMQ, iBus etc.

Q:What are the advantages of JMS?

A: You can use it in the context of mutithreading but it means JMS is not meant for Multithreading. Its basically meant for object communication.

It will be useful when you are writing some event based applications
like Chat Server which needs a publish kind of event mechanism to send
messages between the server to the clients who got connected with the server. Moreover JMS gives Loosely-coupled kind of mechanism when compared with
RMI which is tightly-coupled. In JMS there is no need for the destination object to be available online while sending a message from
the client to the server. But in RMI it is necessary. So we can use JMS
in place of RMI where we need to have loosely-coupled mechanism.


Q: What are the different types of messages available in the JMS API?

A: Message, TextMessage, BytesMessage, StreamMessage, ObjectMessage, MapMessage are the different messages available in the JMS API.

Q: What are the different messaging paradigms JMS supports?

A: Publish and Subscribe i.e. pub/suc and Point to Point i.e. p2p.

Q: What are the various message types supported by JMS?

A: Stream Messages -- Group of Java Primitives
Map Messages -- Name Value Pairs. Name being a string& Value being a java primitive
Text Messages -- String messages (since being widely used a separate
messaging Type has been supported)
Object Messages -- Group of serialize able java object
Bytes Message -- Stream of uninterrupted bytes 

Q: What are the types of messaging?

A: There are two kinds of Messaging.
Synchronous Messaging: Synchronous messaging involves a client that
waits for the server to respond to a message.

Asynchronous Messaging: Asynchronous messaging involves a client that does not wait for a message from the server. An event is used to trigger a message from a server.

Q: What are the three components of a Message ?

A: A JMS message consists of three parts:
Message header
For message identification. For example, the header is used to
determine if a given message is appropriate for a "subscriber"

Properties
For application-specific, provider-specific, and optional header fields

Body
Holds the content of the message. Several formats are supported,
including TextMessage, which wrap a simple String, that wrap arbitrary
Java objects (which must be serializable). Other formats are supported
as well.


Q: What kind of information found in the header of a Message ?

A: The header of a message contains message identification and routing information. This includes , but is not limited to :

JMSDestination
JMSDeliveryMode
JMSMessageID
JMSTimeStamp
JMSExpiration
JMSReplyTO
JMSCorrelationID
JMSType
JMSRedelivered


Q: What is the basic difference between Publish Subscribe model and P2P model?

A: Publish Subscribe model is typically used in one-to-many situation. It is unreliable but very fast. P2P model is used in one-to-one situation. It is highly reliable.

Q: What is the difference between BytesMessage and StreamMessage?

A: BytesMessage stores the primitive data types by converting them to their byte representation.
Thus the message is one contiguous stream of bytes. While the
StreamMessage maintains a boundary between the different data types
stored because it also stores the type information along with the value
of the primitive being stored. BytesMessage allows data to be read
using any type. Thus even if your payload contains a long value, you
can invoke a method to read a short and it will return you something.
It will not give you a semantically correct data but the call will
succeed in reading the first two bytes of data. This is strictly
prohibited in the StreamMessage. It maintains the type information of
the data being stored and enforces strict conversion rules on the data
being read.

Q: What is point-to-point messaging?

A: What are the core JMS-related objects required for each JMS-enabled
application?

Each JMS-enabled client must
establish the following:
• A connection object provided by the JMS server (the message broker)
• Within a connection, one or more sessions, which provide a context
for message sending and receiving
• Within a session, either a queue or ic object representing the
destination (the message staging area) within the message broker
• Within a session, the appropriate sender or publisher or receiver or
subscriber object (depending on whether the client is a message
producer or consumer and uses a point-to-point or publish/subscribe
strategy, respectively)
Within a session, a message object (to send or to receive)


Q: What is the difference between ic and queue?

A: A ic is typically used for one to many messaging i.e. it supports publish subscribe model of messaging. While queue is used for one-to-one messaging i.e. it supports Point to Point Messaging.


Q)What are the core JMS-related objects required for each JMS-enabled application?

A: : Each JMS-enabled client must establish the following:
• A connection object provided by the JMS server (the message broker)
• Within a connection, one or more sessions, which provide a context for message sending and receiving
• Within a session, either a queue or topic object representing the destination (the message staging area) within the message broker
• Within a session, the appropriate sender or publisher or receiver or subscriber object (depending on whether the client is a message producer or consumer and uses a point-to-point or publish/subscribe strategy, respectively)
Within a session, a message object (to send or to receive)


Q : What is the use of Message object?

A: Message is a light weight message having only header and properties and no payload. Thus if theIf the receivers are to be notified abt an event, and no data needs to be exchanged then using Message can be very efficient.

Q: What is the use of BytesMessage?

A: BytesMessage contains an array of primitive bytes in it's payload. Thus it can be used for transfer of data between two applications in their native format which may not be compatible with other Message types. It is also useful where JMS is used purely as a transport between two systems and the message payload is opaque to the JMS client. Whenever you store any primitive type, it is converted into it's byte representation and then stored in the payload. There is no boundary line between the different data types stored. Thus you can even read a long as short. This would result in erroneous data and hence it is advisable that the payload be read in the same order and using the same type in which it was created by the sender.

Q: What is the use of StreamMessage?

A: StreamMessage carries a stream of Java primitive types as it's payload. It contains some conveient methods for reading the data stored in the payload. However StreamMessage prevents reading a long value as short, something that is allwed in case of BytesMessage. This is so because the StreamMessage also writes the type information alonwgith the value of the primitive type and enforces a set of strict conversion rules which actually prevents reading of one primitive type as another.

Q: What is the use of TextMessage?

A: TextMessage contains instance of java.lang.String as it's payload. Thus it is very useful for exchanging textual data. It can also be used for exchanging complex character data such as an XML document.

Q: What is the use of ObjectMessage?

A: ObjectMessage contains a Serializable java object as it's payload. Thus it allows exchange of Java objects between applications. This in itself mandates that both the applications be Java applications. The consumer of the message must typecast the object received to it's appropriate type. Thus the consumer should before hand know the actual type of the object sent by the sender. Wrong type casting would result in ClassCastException. Moreover the class definition of the object set in the payload should be available on both the machine, the sender as well as the consumer. If the class definition is not available in the consumer machine, an attempt to type cast would result in ClassNotFoundException. Some of the MOMs might support dynamic loading of the desired class over the network, but the JMS specification does not mandate this behavior and would be a value added service if provided by your vendor. And relying on any such vendor specific functionality would hamper the portability of your application. Most of the time the class need to be put in the classpath of both, the sender and the consumer, manually by the developer.

Q: What is the use of MapMessage?

A: A MapMessage carries name-value pair as it's payload. Thus it's payload is similar to the java.util.Properties object of Java. The values can be Java primitives or their wrappers.

Q: What is MDB and What is the special feature of that?

A: MDB is Message driven bean, which very much resembles the Stateless session bean. The incoming and out going messages can be handled by the Message driven bean. The ability to communicate asynchronously is the special feature about the Message driven bean.

No comments:

Post a Comment

 
Your Ad Here ]]>