Q: What is JMS?
A:
JMS is an acronym used for Java Messaging Service. It is Java's answer to
creating software using asynchronous messaging. It is one of the official
specifications of the J2EE technologies and is a key technology.
Q: How JMS is
different from RPC?
A:
In RPC the method invoker waits for the method to finish execution and return
the control back to the invoker. Thus it is completely synchronous in nature.
While in JMS the message sender just sends the message to the destination and
continues it's own processing. The sender does not wait for the receiver to
respond. This is asynchronous behavior.
Q: What are the
advantages of JMS?
A:
JMS is asynchronous in nature. Thus not all the pieces need to be up all the time
for the application to function as a whole. Even if the receiver is down the
MOM will store the messages on its behalf and will send them once it comes back
up. Thus at least a part of application can still function as there is no
blocking.
Q: Are you aware of
any major JMS products available in the market?
A:
IBM's MQ Series is one of the most popular product used as Message Oriented
Middleware. Some of the other products are SonicMQ, iBus etc. Weblogic
application server also comes with built in support for JMS messaging.
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 is the
difference between topic and queue?
A:
A topic 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 is the role
of JMS in enterprise solution development?
A:
JMS is typically used in the following scenarios
1.
Enterprise
Application Integration: - Where a legacy application is integrated with a new
application via messaging.
2.
B2B or Business to Business: - Businesses can interact with each other via
messaging because JMS allows organizations to cooperate without tightly
coupling their business systems.
3.
Geographically dispersed units: - JMS can ensure safe exchange of data amongst
the geographically dispersed units of an organization.
4.
One-to-many applications: - The applications that have to push data in packet
to huge number of clients in a one-to-many fashion are good candidates for the
use JMS. Typical such applications are Auction Sites, Stock Quote Services etc.
Q:
What is the use of Message object?
A:
Message is a light weight message having only header and properties and no payload.
When the receivers are to be notified about an event, and no data needs to be
exchanged then using message can be very efficient.
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 use
of BytesMessage?
A:
BytesMessage contains an array of primitive bytes in its 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 its 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 convenient methods for reading the data stored in the payload.
However StreamMessage prevents reading a long value as short, something that is
allowed in case of BytesMessage. This is so because the StreamMessage also
writes the type information along with 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 its 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 class
path of both, the sender and the consumer, manually by the developer.
Q: What is the use
of MapMessage?
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 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 which 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.
No comments:
Post a Comment