When using SOAP/JMS, a JMS URI is used to specify the endpoint's target destination. The JMS URI can also be used to configure JMS connection by appending one or more options to the URI. These options are detailed in the IETF standard, URI Scheme for Java Message Service 1.0. They can be used to configure the JNDI system, the reply destination, the delivery mode to use, and other JMS properties.
As shown in Example 3.2, you can append one or more options
to the end of a JMS URI by separating them from the destination's address with a
question mark(?
). Multiple options are separated by an
ampersand(&
). Example 3.4 shows the syntax
for using multiple options in a JMS URI.
Table 3.2 shows the URI options that affect the JMS transport layer.
Table 3.2. JMS properties settable as URI options
Property | Default | Description |
---|---|---|
deliveryMode | PERSISTENT | Specifies whether to use JMS PERSISTENT or
NON_PERSISTENT message semantics. In the case of
PERSISTENT delivery mode, the JMS broker stores
messages in persistent storage before acknowledging them; whereas
NON_PERSISTENT messages are kept in memory
only. |
replyToName |
Explicitly specifies the reply destination to appear in the
The value of this property has an interpretation that depends on the variant specified in the JMS URI:
| |
priority | 4 | Specifies the JMS message priority, which ranges from 0 (lowest) to 9 (highest). |
timeToLive | 0 | Time (in milliseconds) after which the message will be discarded
by the JMS provider. A value of 0 represents an
infinite lifetime (the default). |
Table 3.3 shows the URI options that can be used to configure JNDI for this endpoint.
Table 3.3. JNDI properties settable as URI options
Property | Description |
---|---|
jndiConnectionFactoryName | Specifies the JNDI name of the JMS connection factory. |
jndiInitialContextFactory | Specifies the fully qualified Java class name of the JNDI
provider (which must be of
javax.jms.InitialContextFactory type). Equivalent
to setting the java.naming.factory.initial Java system
property. |
jndiURL | Specifies the URL that initializes the JNDI provider. Equivalent
to setting the java.naming.provider.url Java system
property. |
The properties, java.naming.factory.initial
and
java.naming.provider.url
, are standard properties, which are
required to initialize any JNDI provider. Sometimes, however, a JNDI provider might
support custom properties in addition to the standard ones. In this case, you can
set an arbitrary JNDI property by setting a URI option of the form
jndi-
.PropertyName
For example, if you were using SUN's LDAP implementation of JNDI, you could set
the JNDI property, java.naming.factory.control
, in a JMS URI as
shown in Example 3.5.
Example 3.5. Setting a JNDI property in a JMS URI
jms:queue:FOO.BAR?jndi-java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
If the JMS provider is not already configured, it is possible
to provide the requisite JNDI configuration details in the URI using options (see
Table 3.3). For example, to configure an
endpoint to use the Apache ActiveMQ JMS provider and connect to the queue called
test.cxf.jmstransport.queue
, use the URI shown in
Example 3.6.
Example 3.6. JMS URI that configures a JNDI connection
jms:jndi:dynamicQueues/test.cxf.jmstransport.queue ?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory &jndiConnectionFactoryName=ConnectionFactory &jndiURL=tcp://localhost:61616