This FAQ addresses frequently asked questions relating
to Java Message Service aspects of Oracle Application Server Containers
for J2EE
10g (9.0.4) and contains the following questions:
Oracle offers two JMS providers; OJMS (AQ/JMS)
and OC4J/JMS. Which one should I be using?
OJMS and OracleAS JMS are both J2EE 1.3 compliant JMS providers from
Oracle. OJMS has been integrated into OracleAS 10g using the JCA
adapter while at the same time leveraging Advanced Queuing in
the Oracle Database for persistence and recoverability.
If database recoverability guarantees, SQL queriability, transparent application
failover, message transformation, propagation are required then Oracle
recommends using OJMS as the JMS provider. OracleAS JMS is a lightweight, in-memory/file based queuing system that
provides a complete J2EE 1.3 JMS implementation. It is suited for applications
that do not require Oracle specific JMS extensions or the recoverability
guarantees that OJMS provides. The following table summarizes a feature
comparison between OJMS and OracleAS JMS:
OJMS vs OracleAS JMS
|
OJMS
|
OracleAS
JMS
|
JMS API version
|
1.02 b
|
1.02 b
|
J2EE 1.3 Certified
|
Yes
|
Yes
|
Persistent Message Storage
|
Yes, in Oracle
database
|
Yes, in
File system
|
In-Memory Message Storage
|
No
|
Yes |
Exception Queue Handling
|
Yes, 1 Exception
Queue per Queue table
|
1
system wide Exception Queue
|
Transport (used by remote clients)
|
JDBC, HTTP
|
Proprietary
socket based
|
Message Types supported
|
Standard JMS types,
Oracle ADTs, XML type, RAW
|
Standard
JMS types
|
Message Transformations
|
Yes
|
No
|
Auditing and Alerts
|
Yes
|
No
|
Language Support
|
Java, PL/SQL, OCI
|
Java
|
Admininstration
|
Command Line, GUI,
Manual
|
Command
Line, Manual
|
| Dynamic Creation of Queues and Topics |
Yes, Programatic,
GUI, Manual |
No,
changes take effect only on server restart |
Access Control
|
Authentication and
Authorization
|
Authentication
|
Message Propogation
|
Yes, native to
another Oracle database
To 3rd party JMS systems using Messaging Gateway
|
No
|
High Availability
|
Robust, using RAC
database
|
Server
restart using OPMN
|
Distributed Transactions
|
Emulated XA used
when using emulated datasources
Full 2pc support when using non-emulated datasources
|
2pc
support only when using OracleAS JMS resources
2pc not supported when both OracleAS JMS and non-OracleAS JMS
resources are participating in the same transaction
|
Recoverability
|
2pc recovery when
using non-emulated datasources
and Oracle DB as Transaction Coordinator
|
2pc
recovery only if all resources used in transaction are OracleAS JMS
resources.
1pc recovery only otherwise.
|
DMS Instrumentation
|
No
|
Yes
|
Can a delay be set on the time a JMS message
is delivered? In other words, can a certain amount of time
be set between when a message is published and when it is available to
subscribers?
Yes, a time delay is supported as an Oracle specific JMS extension to
OJMS. You can set the delay on a given OJMS JMS message instance using
the "void setDelay(int delay)" method which
sets the JMS_OracleDelay message property. Message delay is not supported
by OracleAS JMS.
Is a distributed two-phase commit (2PC) required
when combining JMS and Database operations within a Message Driver Bean
(MDB)?
No, as long as the business logic inside the MDB uses the same Data
Source and username/password, all DS.getConnection calls return the same
physical connection. Therefore, at commit time only one resource
is enlisted with JTA so one-phase commit is performed.
Can multiple JMS message types be enqueued to
the same OJMS/AQ queue? In other words, can a JMSText and a JMSByte
message reside on the same queue?
Yes, when using the AQ$_JMS_MESSAGE data type when creating an AQ queue.
This type of queue can then hold any of the five JMS message types.
Do OJMS and OracleAS JMS support XA?
OracleAS JMS implements the optional (per the JMS specification)
javax.jms.XA* interfaces and thus supports standard JMS based XA.
OJMS libraries that ship with OracleAS 10g do not implement the
optional javax.jms.XA* interfaces. This support will be available in OracleAS
10gR3. However one can accomplish similar XA compliant behavior by extracting
the jdbc connection that underlies a given JMS session and then use the
jdbc XA interfaces to perform XA operations.
Also be aware that full CMT and BMT support is provided when
using both OJMS as well as OracelAS JMS in conjunction with OC4J.
Do OJMS and OracleAS JMS support DMS?
OracleAS JMS provides a whole range of DMS metrics during it's normal course of operation.
See the Oracle Application Server Performance Guide for a detailed description
of metrics.
OJMS that ships with the 10g Database does not provide detailed
DMS metrics. Complete DMS support for OJMS is slated for 10g R3. |