|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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 it's 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.
|
|
[
Received from Sandesh Sadhale]
|
|
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.All the J2EE compliant application servers come built with thier own implementation of JMS.
|
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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 need 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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
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. |
|
[
Received from Sandesh Sadhale]
|
|
|
|