Why do the JMS
dbms_aqadm.remove_subscriber calls sometimes hang when
there are concurrent enqueues or dequeues happening on
the same queue to which these calls are issued?
Add_subscriber and remove_subscriber are
administrative operations on a queue. Though AQ does not
prevent applications from issuing administrative and
operational calls concurrently, they are executed
serially. Both add_subscriber and remove_subscriber will
block until pending transactions that have enqueued or
dequeued messages commit and release the resources they
hold. It is expected that adding and removing
subscribers will not be a frequent event. It will mostly
be part of the setup for the application. The behavior
you observe will be acceptable in most cases. The
solution is to try to isolate the calls to
add_subscriber and remove_subscriber at the setup or
cleanup phase when there are no other operations
happening on the queue. That will make sure that they
will not stay blocked waiting for operational calls to
Why do the
TopicSession.createDurableSubscriber and TopicSession.unubscribe calls raise
JMSException with the message "ORA - 4020 - deadlock detected while trying to
CreateDurableSubscriber and unsubscribe calls require
exclusive access to the Topics. If there are pending JMS operations
(send/publish/receive) on the same Topic before these calls are issued, the ORA
- 4020 exception is raised.
There are two solutions to the problem:
1. Try to isolate the calls to createDurableSubscriber
and unsubscribe at the setup or cleanup phase when there are no other JMS
operations happening on the Topic. That will make sure that the required
resources are not held by other JMS operational calls. Hence the error ORA -
4020 will not be raised.
2. Issue a TopicSession.commit call before calling
createDurableSubscriber and unsubscribe call.
AQ_ADMINISTRATOR_ROLE or AQ_USER_ROLE always work for AQ applications using
In addition to granting the roles, you would also need
to grant execute to the user on the following packages:
* grant execute on sys.dbms_aqin to <userid>
* grant execute on sys.dbms_aqjms to <userid>
Why do I get
java.security.AccessControlException when using JMS MessageListeners from Java
stored procedures inside Oracle8i JServer?
To use MessageListeners inside Oracle8i JServer, you can
do one for the following
1. GRANT JAVASYSPRIV to <userid>
Call dbms_java.grant_permission ('JAVASYSPRIV', 'SYS:java.net.SocketPermission',
What is the use of
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.
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
What is the difference between BytesMessage and
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.
What is object message ?
Object message contains a group of serializeable java
object. So it allows exchange of Java objects between
applications. sot both the applications must be Java
What is text message?
Text messages contains String messages (since being
widely used, a separate messaging Type has been
supported) . It is useful for exchanging textual data
and complex character data like XML.
What is Map message?
map message contains name value Pairs. The values can be
of type primitives and its wrappers. The name is a
What is the difference between queue and topic ?
A topic is typically used for one to many messaging ,
while queue is used for one-to-one messaging. Topic .e.
it supports publish subscribe model of messaging where
queue supports Point to Point Messaging.
Page Numbers : 1