Tib Ems Users Guide
Tib Ems Users Guide
Service™
User’s Guide
Software Release 4.0.0
February 2004
Important Information
SOME TIBCO SOFTWARE EMBEDS OR BUNDLES OTHER TIBCO SOFTWARE. USE OF SUCH
EMBEDDED OR BUNDLED TIBCO SOFTWARE IS SOLELY TO ENABLE THE FUNCTIONALITY
(OR PROVIDE LIMITED ADD-ON FUNCTIONALITY) OF THE LICENSED TIBCO SOFTWARE.
THE EMBEDDED OR BUNDLED SOFTWARE IS NOT LICENSED TO BE USED OR ACCESSED BY
ANY OTHER TIBCO SOFTWARE OR FOR ANY OTHER PURPOSE.
USE OF TIBCO SOFTWARE AND THIS DOCUMENT IS SUBJECT TO THE TERMS AND
CONDITIONS OF A LICENSE AGREEMENT FOUND IN EITHER A SEPARATELY EXECUTED
SOFTWARE LICENSE AGREEMENT, OR, IF THERE IS NO SUCH SEPARATE AGREEMENT,
THE CLICKWRAP END USER LICENSE AGREEMENT WHICH IS DISPLAYED DURING
DOWNLOAD OR INSTALLATION OF THE SOFTWARE (AND WHICH IS DUPLICATED IN THE
TIBCO ENTERPRISE MESSAGE SERVICE USER’S GUIDE). USE OF THIS DOCUMENT IS
SUBJECT TO THOSE TERMS AND CONDITIONS, AND YOUR USE HEREOF SHALL
CONSTITUTE ACCEPTANCE OF AND AN AGREEMENT TO BE BOUND BY THE SAME.
This document contains confidential information that is subject to U.S. and international copyright
laws and treaties. No part of this document may be reproduced in any form without the written
authorization of TIBCO Software Inc.
TIB, TIBCO, Information Bus, The Power of Now, TIBCO ActiveEnterprise, TIBCO Adapter, TIBCO
Hawk, TIBCO Rendezvous, TIBCO Enterprise, TIBCO Enterprise Message Service, and the TIBCO
logo are either registered trademarks or trademarks of TIBCO Software Inc. in the United States
and/or other countries.
EJB, J2EE, JMS and all Java-based trademarks and logos are trademarks or registered trademarks of
Sun Microsystems, Inc. in the U.S. and other countries.
All other product and company names and marks mentioned in this document are the property of
their respective owners and are mentioned for identification purposes only.
This software may be available on multiple operating systems. However, not all operating system
platforms for a specific software version are released at the same time. Please see the readme.txt file
for the availability of this software version on a specific operating system platform.
THIS DOCUMENT IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
THIS DOCUMENT COULD INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL
ERRORS. CHANGES ARE PERIODICALLY ADDED TO THE INFORMATION HEREIN; THESE
CHANGES WILL BE INCORPORATED IN NEW EDITIONS OF THIS DOCUMENT. TIBCO
SOFTWARE INC. MAY MAKE IMPROVEMENTS AND/OR CHANGES IN THE PRODUCT(S)
AND/OR THE PROGRAM(S) DESCRIBED IN THIS DOCUMENT AT ANY TIME.
Copyright © 1999–2004 TIBCO Software Inc. ALL RIGHTS RESERVED.
TIBCO Software Inc. Confidential Information
| iii
Contents
Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Related Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
TIBCO Enterprise Message Service Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
Other TIBCO Product Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
Third Party Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
How to Contact TIBCO Customer Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii
Chapter 1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
JMS Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
JMS Message Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Point-to-Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Publish and Subscribe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Bridges Between Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Controlling the Flow of Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Performance Features of Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Additional Queue and Topic Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Client APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
TIBCO Rendezvous Java Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
String Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Message Tracing and Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Sample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Administering the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
User and Group Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Using TIBCO Hawk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Fault Tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Integrating With Third-Party Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Transaction Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Figures
Tables
Preface
TIBCO Enterprise Message Service™ software lets you send messages from your
applications according to the Java Messaging Service (JMS) protocol. It also
integrates with TIBCO Rendezvous and TIBCO SmartSockets message products.
Topics
Related Documentation
For comments or problems with this manual or the software it addresses, please
contact TIBCO Support Services as follows.
• For an overview of TIBCO Support Services, and information about getting
started with TIBCO Product Support, visit this site:
http://www.tibco.com/services/support/default.jsp
• If you already have a valid maintenance or support contract, visit this site:
http://support.tibco.com
Entry to this site requires a username and password. If you do not have a
username, you can request one.
Chapter 1 Overview
This chapter contains a general overview of Java Message Service (JMS) and
TIBCO Enterprise Message Service™ (EMS) concepts.
Topics
JMS Overview
Java Message Service 1.1 (JMS) is a Java framework specification for messaging
between applications. Sun Microsystems developed this specification, in
conjunction with TIBCO and others, to supply a uniform messaging interface
among enterprise applications.
Using a message service allows you to integrate the applications within an
enterprise. For example, you may have several applications: one for customer
relations, one for product inventory, and another for raw materials tracking. Each
application is crucial to the operation of the enterprise, but even more crucial is
communication between the applications to ensure the smooth flow of business
processes. Message-oriented-middleware (MOM) creates a common
communication protocol between these applications and allows you to easily
integrate new and existing applications in your enterprise computing
environment.
The JMS framework (an interface specification, not an implementation) is
designed to supply a basis for MOM development. TIBCO Enterprise Message
Service implements and integrates several message services, including JMS. This
chapter describes the concepts of JMS and its implementation in TIBCO
Enterprise Message Service. For more information on JMS requirements and
features, the following sources are recommended:
• Java Message Service specification, available through
http://java.sun.com/products/jms/index.html.
• Java Message Service by Richard Monson-Haefel and David A. Chappell,
O’Reilly and Associates, Sebastopol, California, 2001.
JMS is based on creation and delivery of messages. Messages are structured data
that one application sends to another. The creator of the message is known as the
producer and the receiver of the message is known as the consumer. The TIBCO
EMS server acts as an intermediary for the message and sends it to the correct
destination. The server also provides enterprise-class functionality such as
fault-tolerance, message routing, and communication with other messaging
systems, such as TIBCO Rendezvous™ and TIBCO SmartSockets™.
Figure 1 illustrates an application producing a message, sending it by way of the
server, and a different application receiving the message.
Point-to-Point
Point-to-point messaging has one producer and one consumer per message. This
style of messaging uses a queue to store messages until they are received. The
message producer sends the message to the queue; the message consumer
retrieves messages from the queue and sends acknowledgement that the message
was received.
More than one producer can send messages to the same queue, and more than
one consumer can retrieve messages from the same queue. The queue can be
configured to be exclusive, if desired. If the queue is exclusive, then all queue
messages can only be retrieved by the first consumer specified for the queue.
Exclusive queues are useful when you want only one application to receive
messages for a specific queue. If the queue is not exclusive, any number of
receivers can retrieve messages from the queue. Non-exclusive queues are useful
for balancing the load of incoming messages across multiple receivers. Regardless
of whether the queue is exclusive or not, only one consumer can ever retrieve
each message that is placed on the queue.
Figure 2 illustrates point-to-point messaging using a non-exclusive queue. Each
message consumer receives a message from the queue and acknowledges receipt
of the message. The message is taken off the queue so that no other consumer can
receive it.
TIBCO EMS
Server
Message
Message Queue Receive Message Consumers
Producer Send Message
Acknowledge
EMS Clients
EMS Client
TIBCO EMS
Server
Subscribe to
Topic Message
Message Consumers
Producer Publish Message Topic
Deliver Message
Acknowledge EMS Clients
EMS Client (if necessary)
There can be a time dependency in the publish and subscribe model. By default,
subscribers only receive messages when they are active. If messages are delivered
when the subscriber is not available, the subscriber does not receive those
messages. JMS specifies a way to remove part of the timing dependency by
allowing subscribers to create durable subscriptions. Messages for durable
subscriptions are stored on the server until the message expires or the storage
limit is reached. Subscribers can receive messages from a durable subscription
even if the subscriber was not available when the message was originally
delivered.
Client APIs
Java applications use the javax.jms package to send or receive JMS messages.
This is a standard set of interfaces, specified by the JMS specification, for creating
the connection to the EMS server, specifying the type of message to send, and
creating the destination (topic or queue) to send to or receive from. You can find a
description of the javax.jms package in TIBCO Enterprise Message Service Java
API Reference included in the online documentation. Because TIBCO Enterprise
Message Service implements the JMS standard, you can also view the
documentation on these interfaces along with the JMS specification at
java.sun.com/products/jms/index.html.
TIBCO Enterprise Message Service includes a parallel API for C client programs;
see TIBCO Enterprise Message Service C API Reference (online documentation).
TIBCO Enterprise Message Service includes a parallel API for .NET client
programs; see TIBCO Enterprise Message Service .NET API Reference.
Messages
JMS messages have a standard structure. This structure includes the following
sections:
• Header (required)
• Properties (optional)
• Body (optional)
The JMS specification details a standard format for the header and body of a
message. Properties are provider-specific and can include information on specific
implementations or enhancements to JMS functionality. Table 1 describes the
message properties available with TIBCO Enterprise Message Service.
More
Property Description
Info
JMS_TIBCO_COMPRESS Allows messages to be 59
compressed for more efficient
storage.
More
Property Description Info
JMS_TIBCO_SENDER Contains the user name of the 62
message sender.
The JMS standard specifies two delivery modes for messages, PERSISTENT and
NON_PERSISTENT. TIBCO Enterprise Message Service also includes
RELIABLE_DELIVERY. This delivery mode eliminates some of the overhead
associated with the other delivery modes.
For consumer sessions, you can also specify that consumers do not need to
acknowledge receipt of messages, if desired.
See Chapter 4, Working With Messages, on page 49 for more information about
working with messages. Also, more information about properties specific to
TIBCO Enterprise Message Service can be found in the TIBCO Enterprise Message
Service Java API Reference included in the online documentation.
String Encoding
TIBCO Enterprise Message Service Java and C clients can use the functions and
libraries provided for handling strings with specific character encodings. This is
important for applications handling international data or any non-ASCII
characters. See Character Encoding in Messages on page 54 for more information
about character encoding in TIBCO Enterprise Message Service clients.
Sample Code
Administration
The server can provide various statistics Chapter 10, Monitoring Server
at the desired level of detail. Activity, on page 207
Fault Tolerance
You can configure TIBCO Enterprise Message Service servers as primary and
backup servers to provide fault tolerance for your environment. The primary and
backup servers act as a pair, with the primary server accepting client connections
and performing the work of handling messages, and the secondary server acting
as a backup in case of failure. When the active server fails, the backup server
assumes operation and becomes the primary active server.
See Chapter 13, Making the Server Fault-Tolerant, on page 265 for more
information about the fault-tolerance features of TIBCO Enterprise Message
Service.
Routing
TIBCO Enterprise Message Service provides the ability for servers to route
messages between each other. Topic messages can be routed across multiple hops,
provided there are no cycles (that is, the message can not be routed to any server
it has already visited). Queue messages can travel at most one hop to any other
server from the server that owns the queue.
TIBCO Enterprise Message Service stores and forwards messages in most
situations to provide operation when a route is not connected.
See Chapter 14, Working With Routes, on page 277 for more information about
the routing features of TIBCO Enterprise Message Service.
SSL
Secure Sockets Layer (SSL) is a protocol for transmitting encrypted data over the
Internet or an internal network. SSL works by using public and private keys to
encrypt data that is transferred over the SSL connection. Most web browsers
support SSL, and many Web sites and Java applications use the protocol to obtain
confidential user information, such as credit card numbers.
TIBCO Enterprise Message Service supports SSL. SSL is supported between the
following components:
• between an EMS Java client and the TIBCO Enterprise Message Service server
• between an EMS C or C# client and the TIBCO Enterprise Message Service
server
• between the administration tool and the TIBCO Enterprise Message Service
server
• between routed servers
• between fault-tolerant servers
The TIBCO Enterprise Message Service server and the EMS C and C# client
libraries use OpenSSL for SSL support. You can find out more about OpenSSL at
www.openssl.org. TIBCO Enterprise Message Service can also be used with
Ingrian Accelerator products to enhance the performance of SSL communication.
See Chapter 12, Using the SSL Protocol, on page 241 for more information about
SSL support in TIBCO Enterprise Message Service.
Transaction Support
TIBCO Enterprise Message Service can integrate with Java Transaction API (JTA)
compliant transaction managers. TIBCO Enterprise Message Service implements
all interfaces necessary to be JTA compliant.
Topics
API Overview
Java applications use the javax.jms package to send or receive messages. This is
a standard set of interfaces, specified by the JMS specification, for creating the
connection to the EMS server, specifying the type of message to send, and creating
the destination (topic or queue) to send to or receive from. You can find a
description of the javax.jms package in TIBCO Enterprise Message Service Java
API Reference included in the online documentation.
The JMS specification also allows vendor-specific implementations of several
features. TIBCO Enterprise Message Service provides a package containing
classes and constants for all TIBCO-specific aspects of TIBCO Enterprise Message
Service. See the description of the com.tibco.tibems package in TIBCO
Enterprise Message Service Java API Reference included in the online documentation.
Programming Model
Figure 4 illustrates the interfaces involved in the EMS API.
ConnectionFactory
Creates
Connection
Creates
Session Message
Creates
Creates
MessageProducer MessageConsumer
Registers With
Sends To Receives From
MessageListener
Topic or Queue
Applications using the point to point (queues) or publish and subscribe (topics)
models use the same interfaces to create objects. The JMS specification refers to
these interfaces as common facilities because these interfaces create objects that can
be used for either topics or queues.
Previous versions of the JMS specification defined specific interfaces for topics
and for queues. While these interfaces continue to be supported, they may be
deprecated in future releases of the JMS specification. You should use the
common facilities in your new EMS applications and upgrade old applications to
use the common facilities at your earliest convenience.
The JMS API interfaces prior to the JMS 1.1 specification have the same structure
as the common facilities, but the interfaces are specific to topics or queues.
Figure 5 illustrates the previous interface model used by the JMS API.
QueueConnectionFactory
or
TopicConnectionFactory
Creates
QueueConnection
or
TopicConnection
Creates
QueueSession
or Message
TopicSession
Creates
Creates
QueueReceiver,
QueueSender QueueBrowser,
or or
TopicPublisher TopicSubscriber
Registers With
Sends To Receives From
MessageListener
Queue
or
Topic
Common Facilities
Interfaces Specific Interfaces Description
Common Facilities
Interfaces Specific Interfaces Description
The following sections describe many of the API interfaces. Queues and Topics
are described in Chapter 3, Working With Destinations, on page 29. Messages are
described in Chapter 4, Working With Messages, on page 49.
ConnectionFactory
See Using JNDI with TIBCO Enterprise Message Service on page 232 for more
information about using JNDI with TIBCO Enterprise Message Service.
Connection
A connection is a fairly heavyweight object, and therefore most clients will use
one connection for all messaging. You may create multiple connections, if needed
by your application.
Before consuming messages, the application must call the start() method on the
connection. See MessageConsumer on page 27 for more details about
MessageConsumers. If you wish to temporarily suspend message delivery, call
the stop() method on the connection.
When a client application completes, all open connections must be closed.
Unused open connections are eventually closed, but they do consume resources
that could be used for other applications. Closing a connection also closes any
Sessions created by the Connection. To close a connection, use the close()
method. For example:
myConnection.close();
Session
MessageProducer
Once you have created a MessageProducer, you can use it to send messages. See
Chapter 4, Working With Messages, on page 49 for more information about
creating messages. For example, the following sends a message using the
queueSender created above:
myQueueSender.send(message);
You can create MessageProducers that do not identify a destination. When the
sender or publisher does not specify a destination, you must specify the
destination when you send or publish a message as the first parameter of the
send() or publish() method.
MessageConsumer
For queues, messages remain on the queue until they are consumed by a
MessageConsumer, the message expiration time has been reached, or the
maximum size of the queue is reached.
The following sections describe how message consumers can obtain messages.
MessageListener
Topics
Destination Overview
See Using JNDI with TIBCO Enterprise Message Service on page 232 for more
information about using JNDI with TIBCO Enterprise Message Service.
Dynamic queues and topics inherit properties from their respective parents.
When shown by the administration tool, properties of a queue or topic may have
an asterisk (*) character in front of its name. This means that this property was
inherited from the parent queue or topic and cannot be changed. For more
information, refer to Inheritance of Properties on page 41 and Wildcards * and >
on page 39.
Destination Bridges
You can create server-based bridges between destinations. This allows all
messages delivered to one destination to also be delivered to the bridged
destination. You can bridge between different destination types, between the
same destination type, or to more than one destination. For example, you can
create a bridge between a topic and a queue or from a topic to another topic.
See Destination Bridges on page 43 for more information about destination
bridging.
Destination Properties
This section contains a description of properties for topics and queues. Table 4
lists the properties that can be assigned to topics and queues. The following
sections describe each property.
export 36 Yes No
maxRedelivery 37 No Yes
exclusive 37 No Yes
prefetch 38 No Yes
Deprecated Properties
The following properties are available for backward-compatibility with
previous versions. The functionality of these properties is replaced with the
import and export properties.
tibrvcm_export — Yes No
failsafe
TIBCO Enterprise Message Service provides two modes for persisting
topic/queue messages in external storage. These two modes are:
• normal
• failsafe
Normal mode writes all messages into the file on disk in asynchronous mode. In
this mode, the data may remain in system buffers for a short time before it is
written to disk.
Asynchronous mode storage includes a small probability that, in case of software
or hardware failure, some data may be lost without the possibility of recovery. In
many applications, when a rare loss of a few messages is acceptable, this mode
provides the best combination of performance and reliability.
For situations in which any loss of data is not acceptable, the administrator
should set the failsafe property for the topic or the queue. In failsafe mode, all
data for that queue or topic are written into external storage in synchronous
mode. In synchronous mode, a write operation is not complete until the data is
physically recorded on the external device.
The failsafe property ensures that no messages are ever lost in case of server
failure. Although failsafe mode guarantees no messages are lost, it also
significantly affects the performance.
secure
The secure property, when set on a destination, specifies permissions should be
checked for that destination. When a topic or a queue does not have the secure
property turned on, any authenticated user can perform any actions with that
topic or queue. When the property is turned on, the administrator can assign
permissions to the users.
The secure property does not mean SSL-level security. secure only controls basic
authentication and permission verification using unencrypted, non-secure
communication between the clients and the server.
maxbytes
Topics and queues can specify the maxbytes property in the form:
maxbytes=NNNNN where NNNN is the number of bytes.
For queues, maxbytes defines the maximum size (in bytes) of all messages that
can be waiting in the queue. By default, or if maxbytes is set to 0, there is no limit
to the size of a queue. If a receiver is off-line for a long time, maxbytes limits the
memory allocation for the receiver’s pending messages. Messages that would
exceed the limit will not be accepted into storage and an error is returned to the
message producer.
For topics, maxbytes limits the total size (in bytes) of all messages waiting for
delivery to each durable subscriber on that topic. The limit applies separately to
each durable subscriber on the topic. For example, when a durable subscriber is
off-line for a long time, pending messages accumulate in the server; maxbytes
limits the memory allocation for those pending messages for the subscriber; when
the subscriber consumes messages (freeing storage) the topic can deliver
additional messages.
global
Messages destined for a topic or queue with the global property set are routed to
the other servers that are participating in routing with this server. For further
information on routing between servers, see Chapter 14, Working With Routes, on
page 277.
sender_name
The sender_name property specifies that the server may include the sender’s
username for messages sent to this destination. When this property is enabled, the
server takes the user name supplied by the message producer when the
connection is established and places that user name into the JMS_TIBCO_SENDER
property in the message.
The message producer can override this behavior by specifying a property on a
message. If a message producer sets the JMS_TIBCO_DISABLE_SENDER property to
true for a message, the server overrides the sender_name property and does not
add the sender name to the message.
If authentication for the server is turned off, the server places whatever user name
the message producer supplied when the message producer created a connection
to the server. If authentication for the server is enabled, the server authenticates
the user name supplied by the connection and the user name placed in the
message property will be an authenticated user. If SSL is used, the SSL connection
protocol guarantees the client is authenticated using the client’s digital certificate.
sender_name_enforced
The sender_name_enforced property specifies that messages sent to this
destination must include the sender’s user name. The server retrieves the user
name of the message producer using the same procedure described in the
sender_name property above. However, unlike, the sender_name property, there
is no way for message producers to override this property.
If the sender_name property is also set on the destination, this property overrides
the sender_name property.
In some business situations, clients may not be willing to disclose the username of
their message producers. If this is the case, these clients may wish to avoid
sending messages to destinations that have the sender_name or
sender_name_enforced properties enabled.
In these situations, the operator of the EMS server should develop a policy for
disclosing a list of destinations that have these properties enabled. This will allow
clients to avoid sending messages to destinations that would cause their message
producer usernames to be exposed.
flowControl
The flowControl property specifies the target maximum size the server can use
to store pending messages for the destination. This is useful when message
producers send messages much more quickly than message consumers can
consume them. Using this property can prevent the pending messages from
consuming too many machine resources.
The value specified for this property is in bytes, unless you specify the units for
the amount of storage using KB, MB, or GB. For example, flowControl=60MB
specifies the target maximum storage for pending messages of the destination is
60 Megabytes. You can specify the flowControl property without a value to set it
to the default of 256KB.
Flow control must be enabled for the server before the value in this property is
enforced by the server. See Flow Control on page 46 for more information about
flow control.
trace
Specifies that tracing should be enabled for this destination. This property can be
specified as either trace or trace=body. Specifying trace (without =body),
generates trace messages that include only the message sequence and message ID.
Specifying trace=body generates trace messages that include the message body.
See Message Tracing on page 213 for more information about message tracing.
import
The import property allows messages published by an external system to be
received by a TIBCO Enterprise Message Service destination (a topic or a queue),
as long as the transport to the external system is configured. Currently you can
configure transports for TIBCO Rendezvous reliable and certified messaging
protocols. You can specify the name of one or more transports of the same type in
the import property.
You must purchase, install, and configure the external system (for example,
Rendezvous) before configuring topics with the import property. Also, you must
configure the communication parameters to the external system by creating a
named transport in the transports.conf file.
For complete details about external message services, see these chapters:
• Chapter 5, Working With TIBCO Rendezvous, on page 67
• Chapter 6, Working With TIBCO SmartSockets, on page 87
export
The export property allows messages published by a client to a topic to be
exported to the external systems with configured transports. Currently you can
configure transports for Rendezvous reliable and certified messaging protocols.
You can specify the name of one or more transports of the same type in the export
property.
You must purchase, install, and configure the external system (for example,
Rendezvous) before configuring topics with the export property. Also, you must
configure the communication parameters to the external system by creating a
named transport in the transports.conf file.
For complete details about external message services, see these chapters:
• Chapter 5, Working With TIBCO Rendezvous, on page 67
• Chapter 6, Working With TIBCO SmartSockets, on page 87
maxRedelivery
The maxRedelivery property specifies the number of attempts the server should
make to redeliver a message sent to a queue. The value of this parameter can be
set to an integer between 2 and 255. Once the server has attempted to deliver the
message the specified number of times, the message is either destroyed or it is
placed on the undelivered queue, if the JMS_TIBCO_PRESERVE_UNDELIVERED
property on the message is set to true.
For messages that have been redelivered, the JMSRedelivered header property is
set to true and the JMSXDeliveryCount property is set to the number of times the
message has been delivered to the queue. If the server restarts, the current
number of delivery attempts in the JMSXDeliveryCount property is not retained.
For more information about undelivered messages, see Undelivered Message
Queue on page 61.
exclusive
The exclusive property is set on queues only. It defines how the server delivers
messages to queue consumers when multiple queue consumers are present. In
exclusive mode, the first queue consumer receives all of the messages until the
consumer fails. At that point, messages are delivered to the next consumer.
The first queue consumer is the first-activated queue receiver. When that receiver
fails in any way, the messages are delivered to the receiver which was activated
next. Note that these activations may be in the past; that is, the first-activated and
the second-activated are determined at the onset of receiver activation, not at the
onset of first-receiver failure.
Non-exclusive queues cause messages to be delivered in a round-robin fashion to
the set of queue receivers. This prevents a large buildup of messages at one
receiver and thereby balances the load of incoming messages across all queue
receivers.
If a message cannot be delivered to a queue receiver (because its pre-fetch limit is
reached), TIBCO Enterprise Message Service attempts to deliver the message to
the next queue receiver. If the server attempts to deliver the message to all
registered queue receivers and none of them can accept the new message, the
message is returned to the queue and message delivery is paused until a queue
receiver reports that it can accept the message.
prefetch
Prefetch applies only to queues. Prefetch sets the maximum number of messages
a receiver can receive in the background from the server at any point in time. A
message is considered prefetched when it leaves the server. It is no longer
considered prefetched when it is delivered to the application by way of the
receive method or by callback.
For example, if the prefetch is set to 7, the server ensures that at most 7 messages
are prefetched into the client. The prefetch value is the maximum number of
messages, not a strict amount. Therefore, as the application receives the messages,
the server sends more messages to the client but not necessarily one message for
each message received. That is, the server can batch the delivery of messages.
With multiple receivers, the prefetch value is the maximum and should not be
used to force a particular delivery pattern. There are too many variable conditions
to accurately predict a delivery pattern.
Assigning a larger prefetch number can improve performance by decreasing
return message traffic.
You can set the prefetch property to none to disable prefetching messages. When a
queue has prefetch=none specified, the server sends only one message at a time
to a receiver. That is, a message is only sent by the server when a receiver calls the
receive methods or when the receiver returns from the callback processing the
current message. Queues with prefetch=none receive messages more slowly
than queues where prefetch is set to a positive integer.
Setting prefetch=0 or not specifying any prefetch property specifies that the
queue should inherit the prefetch value of its parent. If there are no parents or the
parents do not have prefetch set, prefetch is set to the default value of 5.
Setting prefetch=none is not the same as setting prefetch=0.
expiration
The expiration property overrides the expiration property of messages. It
applies to queues and topics.
When this property is set for a destination, and the server delivers a message to it,
the server replaces the producer’s expiration value with this value.
Specify this value as an integer with units. Legal units are msec, sec, min, hour
and day. For example, expiration=10min. When units are absent, the default
unit is seconds.
Zero is a special value, which indicates that messages to the destination never
expire.
Wildcards
Static queues and topics are assigned certain properties in the configuration file.
These static queues and topics become the parents of dynamic queues and topics,
which inherit properties from the parents. You must understand wildcards to
understand the inheritance rules.
Wildcards in Topics
TIBCO Enterprise Message Service enables you to use wildcards in topic names in
some situations:
• You can subscribe to wildcard topics.
If you subscribe to a topic containing a wildcard, you will receive any message
published to a matching topic. For example, if you subscribe to foo.* you will
receive messages published to a topic named foo.bar.
You can subscribe to a wildcard topic (for example foo.*), whether or not
there is a matching topic in the configuration file (for example, foo.*, foo.>,
or foo.bar). However, if there is no matching topic name in the configuration
file, no messages will be published on that topic, so it is not useful to subscribe
to the wildcard topic in that case.
• You cannot publish to wildcard topics.
• If foo.bar is not in the configuration file, then you can publish to foo.bar if
foo.* or foo.> exists in the configuration file.
Wildcards in Queues
TIBCO Enterprise Message Service enables you to use wildcards in queue names
in some situations. You can not send or receive to wildcard queue names.
However, you can use wildcard queue names in the configuration files. The
wildcard queue names in the configuration files must have non-wildcard children
to send and receive messages.
For example, if the queue configuration file includes a line:
foo.*
then users can create queues foo.bar, foo.bob, and so forth, but not
foo.bar.bob.
Inheritance
This section describes the inheritance of properties and permissions. For more
information on wildcards, refer to Wildcards on page 39. For more information on
properties, refer to Destination Properties on page 32. For more information on
permissions, refer to Chapter 9, Authentication and Permissions, on page 179.
Inheritance of Properties
All properties are inheritable for both topics and queues. This means that a
property set for a destination is inherited by all destinations with matching
names. For example, if topic foo.* is failsafe, then topics foo.bar and
foo.bob inherit failsafe from foo.*.
you make every topic failsafe, regardless of additional entries. This might
require a great deal of memory for storage and greatly decrease the system
performance.
• If there is not a direct property value for the child, the most liberal (largest) of
the parent or ancestor property values is used.
• The child value, which is directly assigned to the child, overrides any values
assigned to ancestors.
Inheritance of Permissions
Inheritance of permissions is similar to inheritance of properties. If the parent has
a permission, then the child inherits that permission. For example, if Bob belongs
to GroupA, and GroupA has publish permission on a topic, then Bob has
publish permission on that topic.
Permissions for a single user are the union of the permissions set for that user, and
of all permissions set for every group in which the user is a member. These
permission sets are additive. Permissions have positive boolean inheritance. Once
a permission right has been granted through inheritance, it can not be removed.
All rules for wildcards apply to inheritance of permissions. For example, if a user
has permission to publish on topic foo.*, the user also has permission to publish
on foo.bar and foo.new. For more information on wildcards, refer to Wildcards
on page 39. For more information on permissions, refer to Chapter 9,
Authentication and Permissions, on page 179.
Destination Bridges
Some applications require the same message to be sent to more than one
destination, possibly of different types. For example, an application may send
messages to a queue for distributed load balancing. That same application,
however, may also need the messages to be published to several monitoring
applications. Another example is an application that publishes messages to
several topics. All messages however, must also be sent to a database for backup
and for data mining. A queue is used to collect all messages and send them to the
database.
An application can process messages so that they are sent multiple times to the
required destinations. However, such processing requires significant coding effort
in the application. TIBCO Enterprise Message Service provides a server-based
solution to this problem. You can create bridges between destinations so that
messages sent to one destination are also delivered to all bridged destinations.
Bridges are created between one destination and one or more other destinations
of the same or of different types. That is, you can create a bridge from a topic to a
queue or from a queue to a topic. You can also create a bridge between one
destination and multiple destinations. For example, you can create a bridge from
topic a.b to queue q.b and topic a.c.
When specifying a bridge, you can specify a particular destination name, or you
can use wildcards. For example, if you specify a bridge on topic foo.* to queue
foo.queue, messages delivered to any topic matching foo.* are sent to
foo.queue.
Queue
Consumer
queue.B
Queue Topic
Subscriber
queue.B C.B
Consumer
Bridges are not transitive. That is, messages sent to a destination with a bridge are
only delivered to the specified bridged destinations and are not delivered across
multiple bridges. For example, topic A.B has a bridge to queue Q.B. Queue Q.B
has a bridge to topic B.C. Messages delivered to A.B are also delivered to Q.B, but
not to B.C.
Creating a Bridge
Bridges are configured in the bridges.conf configuration file. You specify a
bridge using the following syntax:
[<destinationType>:<destinationName>]
<destinationType>=<destinationToBridgeTo> selector="<messageSelector>"
For detailed information about message selector syntax, see documentation for
the Message class in TIBCO Enterprise Message Service Java API Reference.
Transactions
When a message producer sends a message within a transaction, all messages
sent across a bridge are part of the transaction. Therefore, if the transaction
succeeds, all messages are delivered to all bridged destinations. If the transaction
fails, no consumers for bridged destinations receive the messages.
If a message cannot be delivered to a bridged destination because the message
consumer does not have the correct permissions for the bridged destination, the
transaction cannot complete, and therefore fails and is rolled back.
Flow Control
In some situations, message producers may send messages more rapidly than
message consumers can receive them. The pending messages for a destination are
stored by the server until they can be delivered, and the server can potentially
exhaust its storage capacity if the message consumers do not receive messages
quickly enough. To avoid this, TIBCO Enterprise Message Service allows you to
control the flow of messages to a destination. Each destination can specify a target
maximum size for storing pending messages. When the target is reached, TIBCO
Enterprise Message Service blocks message producers when new messages are
sent. This effectively slows down message producers until the message
consumers can receive the pending messages.
When the storage for pending messages is near the specified limit, the server
blocks all new calls to send a message from message producers. The calls do not
return until the storage has decreased below the specified limit. Once message
consumers have received messages and the pending message storage goes below
the specified limit, the server allows the send message calls to return to the caller
and the message producers can continue processing.
If there are no message consumers for a destination, the server does not enforce
flow control for the destination. That is, if a queue has no started receivers, the
server cannot enforce flow control for that queue. Also, if a topic has inactive
durable subscriptions or no current subscribers, the server cannot enforce flow
control for that topic. For topics, if flow control is set on a specific topic (for
example, foo.bar), then flow control is enforced as long as there are subscribers
to that topic or any parent topic (for example, if there are subscribers to foo.*).
This chapter describes JMS messages and how to work with them in a client
program.
Topics
Header Fields
The header contains ten predefined fields that contain values used to route and
deliver messages. Table 5 describes the message header fields.
JMSExpiration sendor publish Length of time that message will live before
method expiration. If set to 0, message does not expire.
The time-to-live is specified in milliseconds.
JMSTimestamp sendor publish Timestamp of time when message was handed off
method to a provider to be sent. Message may actually be
sent later than this timestamp.
JMSRedelivered JMS provider If this field is set, it is possible that the message
was delivered to the client earlier, but not
acknowledged at that time.
Properties
In the properties area, applications, vendors, and administrators on JMS systems
can add optional properties. The properties area is optional, and can be left empty.
TIBCO Enterprise Message Service includes several vendor-specific properties in
this area. TIBCO-specific property names begin with JMS_TIBCO. These properties
are described in subsequent sections in this chapter.
Message Bodies
A JMS message has one of several types of message bodies, or no message body at
all.
The types of messages are described in Table 6.
Message Persistence
JMS defines two message delivery modes, persistent and non-persistent. This
mode is set by the message sender or publisher in the JMSDeliveryMode message
header field. Non-Persistent messages are never written to persistent storage.
Persistent messages are logged to persistent storage when they are sent.
Messages with the persistent delivery mode are always written to persistent
storage, except when they are published to a topic that has no durable
subscribers. When a topic has no durable subscribers, there are no subscribers
that need messages resent in the event of a server failure. Therefore, messages do
not need to be saved, and performance is improved because disk I/O is not
required.
This behavior is consistent with the JMS specification because durable subscribers
for a topic cause published messages to be saved. However, non-durable
subscribers that re-connect after a server failure are considered newly created
subscribers and are not entitled to receive any messages created prior to the time
they are created (that is, messages published before the subscriber re-connects are
not resent).
The TIBCO Enterprise Message Service C# API has not implemented the
mechanisms for specifying character encodings for this release. A future release
will contain this functionality in the C# API.
Java clients use these canonical character encoding names when setting or
retrieving the character encoding names. C clients have a list of macros that
correspond to these canonical names. See the C API references for a list of
supported character encodings in these interfaces.
Sending Messages
When a client sends a message, the message stores the character encoding name
used for strings in that message. Java clients represent strings using Unicode. A
message created by a Java client that does not specify an encoding will use UTF-8
as the named encoding within the message. UTF-8 uses up to four bytes to
represent each character, so a Java client can improve performance by explicitly
using a single-byte character encoding, if possible.
Java clients can globally set the encoding to use with the setEncoding method or
the client can set the encoding for each message with the setMessageEncoding
method. For more information about these methods, see the TIBCO Enterprise
Message Service Java API Reference.
Typically, C clients manipulate strings using the character encoding of the
machine on which they are running. TIBCO Enterprise Message Service provides
a character encoding library for C clients to determine the encoding in messages
and convert strings to and from Unicode. C clients should explicitly set the
character encoding they are using when they create and send a message. For more
information, see TIBCO Enterprise Message Service C API Reference.
Figure 8 illustrates TIBCO Enterprise Message Service clients sending messages
encoded in UTF-8. Java clients use this encoding by default. C clients must
explicitly set this encoding and convert strings from the local encoding to UTF-8
before sending the message.
...
Receiving Messages
Each message stores the name of the character encoding the sender used. A
message receiver can use this information to decode the strings in the message, if
necessary.
Java automatically performs any necessary conversion and represents strings in
Unicode. Java clients do not need to explicitly perform any operations to display
strings stored in a message.
C clients must compare the encoding used for the message with the encoding of
the local machine. If the encodings match, the C client can display the string
without conversion. If the encodings do not match, the C client must use the
tibconv library functions to convert the string to the local encoding before the
string can be displayed.
Message
Encoding: UTF-8 C EMS Client
name XXXXXXX
address XXXXXXX ...
... tibconv_GetDefaultEncoding(
defEncoding);
tibjmsMsg_GetEncoding(message,
msgEncoding);
C clients must compare the encoding of
...
the message to the local machine's default
tibjmsMapMsg_GetString(message,
encoding. If the message's encoding is the
"name", name);
same as the local encoding, the client can
tibjmsMapMsg_GetString(message,
retrieve strings from the message and
"address", addr);
display them. If the encodings are different,
...
the client must convert the message
strings into the local encoding using
functions in tibconv before displaynig the
strings.
Message Compression
Compressed messages are handled transparently. The client code only sets the
JMS_TIBCO_COMPRESS property. The client code does not need to take any other
action.
Message Confirmation
The interface specification for JMS requires that message delivery be guaranteed
under many, but not all, circumstances. The specification defines three levels of
acknowledgement:
• DUPS_OK_ACKNOWLEDGE, for consumers that are tolerant of duplicate
messages.
• AUTO_ACKNOWLEDGE, in which the session automatically acknowledges
a client’s receipt of a message.
• CLIENT_ACKNOWLEDGE, in which the client acknowledges the message
by calling the message’s acknowledge method.
Figure 11 illustrates the basic structure of message delivery and
acknowledgement.
3
1 Message
Message
4
Message TIBCO EMS Acknowledgement Message
Producer 2 Server Consumer
Confirmation 5 Confirmation of
acknowledgement
If a message is to be removed from the system in any way besides being properly
consumed by a message consumer, the server checks the message for the
JMS_TIBCO_PRESERVE_UNDELIVERED property.
You can only set the undelivered property on individual messages, there is no
way to set the undelivered message queue as an option at the per-topic or
per-queue level.
You should create a queue receiver to receive and handle messages as they arrive
on the undelivered message queue. If you wish to remove messages from the
undelivered message queue without receiving them, you can purge the
$sys.undelivered queue with the administration tool, using the purge queue
command described under Command Listing on page 151. You can also remove
the message using the administrative API included with TIBCO Enterprise
Message Service.
Within a message, TIBCO Enterprise Message Service can supply the user name
given by the message producer when a connection is created. The sender_name
and sender_name_enforced properties on the destination determine whether the
message producer’s user name is included in the sent message.
When a user name is included in a message, a message consumer can retrieve that
user name by getting the string message property named JMS_TIBCO_SENDER.
The following illustrates retrieving the property:
userID = message.getStringProperty("JMS_TIBCO_SENDER");
MapMessage Extensions
TIBCO Enterprise Message Service extends the MapMessage body type in two
ways. These extensions allow TIBCO Enterprise Message Service to exchange
messages with TIBCO Rendezvous and ActiveEnterprise formats that have
certain features not available within the JMS MapMessage. TIBCO Enterprise
Message Service adds two extensions to the MapMessage body type:
• You can insert another MapMessage instance as a submessage into a
MapMessage, generating a series of nested messages, instead of a flat
message.
• You can use arrays as well as primitive types for the values.
These extensions add considerable flexibility to the MapMessage body type.
However, they are extensions and therefore not compliant with JMS
specifications. Extended MapMessages are tagged as extensions with the vendor
property tag JMS_TIBCO_MSG_EXT.
For more information on MapMessage compatibility with Rendezvous messages,
see Message Body on page 81.
• Set the delivery mode for the message producer using the following
expression:
messageProducer.setDeliveryMode(
com.tibco.tibjms.Tibjms.RELIABLE_DELIVERY);
When you use the reliable delivery mode, the client application does not receive
any response from the server. Therefore, all publish calls will always succeed (not
throw an exception) unless the connection to the server has been terminated.
In some cases a message published in reliable mode may be disqualified and not
handled by the server because the destination is not valid or access has been
denied. In this case, the message is not sent to any message consumer. However,
unless the connection to the server has been terminated, the publishing
application will not receive any exceptions, despite the fact that no consumer
received the message.
Topics
• Overview, page 68
• Configuring Transports for Rendezvous, page 70
• Topics, page 73
• Queues, page 75
• Import Issues, page 77
• Export Issues, page 78
• Message Translation, page 79
• Pure Java Rendezvous Programs, page 84
Overview
TIBCO Enterprise Message Service (release 4 and later) can exchange messages
with TIBCO Rendezvous (release 6.9 and later).
Scope • EMS can import and export messages to an external system through an EMS
topic.
• EMS can import messages from an external system to an EMS queue (but
queues cannot export).
EMS Server
Export
TIBCO Rendezvous
EMS Topic Translation tibrv
Transport
Message Translation
EMS and Rendezvous use different formats for messages and their data. When
tibemsd imports or exports a messages, it translates the message and its data to
the appropriate format; for details, see Message Translation on page 101.
Configuration
tibemsd uses definitions and parameters in four configuration files to guide the
exchange of messages with Rendezvous.
For details, see Topics on page 95, and Queues on page 97.
RVCM Listeners When exporting messages on a transport configured for certified message
delivery, you can pre-register RVCM listeners in the file tibrvcm.conf.
For details, see tibrvcm on page 142, and Certified Messages on page 78
You may continue to use the deprecated properties with this release, but you
should switch to using the new approach as soon as possible. For lists of
deprecated parameters and properties, see TIBCO Rendezvous Parameters—
Deprecated on page 132, and Deprecated Properties on page 32.
Transport Definitions
transports.conf contains zero or more transport definitions. Each definition
begins with the name of a transport, surrounded by square brackets. Subsequent
lines set the parameters of the transport.
Parameter Description
type Required. For Rendezvous transports, the value must be either tibrv or
tibrvcm.
Rendezvous Parameters
The syntax and semantics of these parameters are identical to the corresponding parameters in
Rendezvous clients. For full details, see the Rendezvous documentation set.
network When absent, the default value is the host computer’s primary network.
daemon When absent, the default value is an rvd process on the local host
computer.
To connect to a non-default daemon, supply hostname:protocol:port. You
may omit any of the three parts. The default hostname is the local host
computer. The default protocol is tcp. The default port is 7500.
Parameter Description
rv_tport Required. Each RVCM transport depends in turn upon an ordinary
Rendezvous transport. Set this parameter to the name of a Rendezvous
transport (type tibrv) defined in the EMS configuration file
transports.conf.
sync_ledger true or false. If true, operations that update the ledger do not return
until changes are written to the storage medium.
default_ttl This parameter sets default CM time limit (in seconds) for all CM
messages exported on this transport.
explicit_config_only true or false. If true, tibemsd allows RVCM listeners to register for
certified delivery only if they are configured in advance with the EMS
server (either in tibrvcm.conf or using the create rvcmlistener
command). That is, tibemsd ignores registration requests from
non-configured listeners.
If false (the default), tibemsd allows any RVCM listener to register.
EMS Parameters
topic_import_dm EMS sending clients can set the JMSDeliveryMode header field for each
message. However, Rendezvous clients cannot set this header. Instead,
queue_import_dm
these two parameters determine the delivery modes for all topic
messages and queue messages that tibemsd imports on this transport.
TIBEMS_PERSISTENT | TIBEMS_NON_PERSISTENT | TIBEMS_RELIABLE
export_headers When true, tibemsd includes JMS header fields in exported messages.
When false, tibemsd suppresses JMS header fields in exported
messages.
When absent, the default value is true.
Parameter Description
export_properties When true, tibemsd includes JMS properties in exported messages.
When false, tibemsd suppresses JMS properties in exported messages.
When absent, the default value is true.
Example
These examples from transports.conf illustrate the syntax of transport
definitions.
[RV01]
type = tibrv
topic_import_dm = TIBEMS_RELIABLE
queue_import_dm = TIBEMS_PERSISTENT
service = 7780
network = lan0
daemon = tcp:host5:7885
[RV02]
type = tibrv
service = 7890
network = lan0
daemon = tcp:host5:7995
[RVCM01]
type = tibrvcm
export_headers = true
export_properties = true
rv_tport = RV02
cm_name = RVCMTrans1
ledger_file = ledgerFile.store
sync_ledger = true
request_old = true
default_ttl = 600
Topics
Topics can both export and import messages. Accordingly, you can configure
topic definitions (in the configuration file topics.conf) with import and export
properties that specify one or more external transports:
import • import instructs tibemsd to import messages that arrive on those transports
from Rendezvous, and deliver them to the EMS destination.
export • export instructs tibemsd to take messages that arrive on the EMS destination,
and export them to Rendezvous via those transports.
The EMS server never re-exports an imported message on the same topic.
(For general information about topics.conf syntax and semantics, see topics on
page 136. You can also configure topics using the administration tool command
addprop topic.)
Example For example, the following tibemsadmin commands configure the topic
myTopics.news to import messages on the transports RV01 and RV02, and to
export messages on the transport RV02.
addprop topic myTopics.news import="RV01,RV02"
addprop topic myTopics.news export="RV02"
Wildcards
Wildcards in the import and export properties obey EMS syntax and semantics
(which is identical to Rendezvous syntax and semantics); see Destination Name—
Syntax and Semantics on page 93.
Certified Messages
You can import and export TIBCO Rendezvous certified messages (tibrvcm
transport) to EMS topics. Rendezvous certified transports guarantee message
delivery.
RVCM Ledger tibrvcm transports can store information about subjects in a ledger file. You can
review the ledger file using an administration tool command; see show
rvcmtransportledger on page 175).
For more information about ledger files, see TIBCO Rendezvous documentation.
Queues
Configuration
You can configure queue definitions (in the configuration file queues.conf) with
the import property that specify one or more external transports.
• import instructs tibemsd to import messages that arrive on those transports
from Rendezvous, and deliver them to the EMS destination.
(For general information about queues.conf syntax and semantics, see queues on
page 136. You can also configure queues using the administration tool command
addprop queue.)
Example For example, the following tibemsadmin command configures the queue
myTopics.news to import messages on the transports RV01 and RV02.
Wildcards
Wildcards in the import property obey EMS syntax and semantics (not
Rendezvous syntax and semantics); see Destination Name—Syntax and
Semantics on page 93.
EMS clients cannot subscribe to wildcard queues—however, you can define
wildcards queues in the EMS server for the purpose of property inheritance. That
is, you can configure a static queue named foo.* and set properties on it, so that
child queues named foo.bar and foo.baz will both inherit those properties.
If you define a queue that imports foo.*, tibemsd begins importing all matching
messages from Rendezvous. As messages arrive, tibemsd creates dynamic child
queues (for example, foo.bar and foo.baz) and delivers the messages to them.
Notices that tibemsd delivers messages to these dynamic child queues even
when no subscribers exist to drain them.
Import Issues
This section presents issues associated with importing messages to EMS from
Rendezvous—whether on a topic or a queue.
When a topic and a queue share the same name, at most one of them may set the
import property. For example, if a topic foo.bar and a queue foo.bar are both
defined, only one may specify the import property.
JMSReplyTo
When tibemsd imports and translates a Rendezvous message, it sets the
JMSReplyTo field of the EMS message to the value of the Rendezvous reply
subject, so that EMS clients can reply to the message.
Usually this value represents a Rendezvous subject. You must explicitly configure
tibemsd to create a topic with a corresponding name, which exports messages to
Rendezvous.
Guaranteed Delivery
For full end-to-end certified delivery from Rendezvous to EMS, all three of these
conditions must be true:
• Rendezvous senders must send labeled messages on RVCM transports.
• The transport definition must set topic_import_dm or queue_import_dm (as
appropriate) to TIBEMS_PERSISTENT.
• A durable subscription for the EMS topic or queue must exist.
Export Issues
This section presents issues associated with exporting messages from EMS to
Rendezvous.
JMSReplyTo
Topics Consider an EMS message in which the field JMSReplyTo contains a topic. When
exporting such a message to Rendezvous, you must explicitly configure tibemsd
to import replies from Rendezvous to that reply topic.
Temporary Topics Consider an EMS message in which the field JMSReplyTo contains a temporary
topic. When tibemsd exports such a message to Rendezvous, it automatically
arranges to import replies to that temporary topic from Rendezvous; you do not
need to configure it explicitly.
Certified Messages
RVCM When an RVCM listener receives its first labeled message, it registers to receive
Registration subsequent messages as certified messages. Until the registration is complete, it
receives labeled messages as reliable messages. When exporting messages on a
tibrvcm transport, we recommend either of two actions to ensure certified
delivery for all exported messages:
• Create the RVCM listener before sending any messages from EMS clients.
• Pre-register an RVCM listener, either with the administration tool (see create
rvcmlistener on page 154), or in the configuration file tibrvcm.conf (see
tibrvcm on page 142).
Guaranteed Delivery
For full end-to-end certified delivery to Rendezvous from EMS, the following
condition must be true:
• EMS senders must send persistent messages.
Message Translation
Import When importing a Rendezvous message to an EMS message, tibemsd does not
set any JMS header fields, except for the special cases noted above.
Export When exporting an EMS message to a Rendezvous message, tibemsd groups all
the JMS header fields (except for the special cases noted above) into a single
submessage within the Rendezvous message. The field JMSHeaders contains that
submessage. Fields of the submessage map the names of JMS header fields to
their values.
tibemsd ignores any JMS header fields that are null or absent—it omits them
from the exported message.
You can instruct tibemsd to suppress the entire header submessage in all
exported messages by setting the transport property export_headers = false.
Table 8 presents the mapping of JMS header fields to Rendezvous data types (that
is, the type of the corresponding field in the exported message).
JMSPriority TIBRVMSG_U8
JMSTimestamp TIBRVMSG_U64
JMSExpiration TIBRVMSG_U64
JMSType TIBRVMSG_STRING
JMSMessageID TIBRVMSG_STRING
JMSCorrelationID TIBRVMSG_STRING
Import RVCM In addition to the two fields described above, when tibemsd imports a certified
message on a tibrvcm transport, it can also set these properties (if the
corresponding information is set in the Rendezvous message):
• JMS_TIBCO_CM_PUBLISHER gets a string value indicating the correspondent
name of the Rendezvous CM transport that sent the message (that is, the
sender name).
• JMS_TIBCO_CM_SEQUENCE gets a long value indicating the CM sequence
number of the message.
Export When exporting an EMS message to a Rendezvous message, tibemsd groups all
the JMS property fields into a single submessage within the Rendezvous message.
The field JMSProperties contains that submessage. Fields of the submessage
map the names of JMS property fields to their values.
tibemsd ignores any JMS property fields that are not set, or are set to null—it
omits them from the exported message.
You can instruct tibemsd to suppress the entire properties submessage in the
exported message by setting the transport property
export_properties = false.
Message Body
tibemsd can export messages with any JMS message body type to TIBCO
Rendezvous. Conversely, tibemsd can import messages with any message type
from TIBCO Rendezvous.
For information about JMS body types, see Message Bodies on page 51.
For information about the structure of messages, see JMS Message Structure on
page 50.
JMSObject JMSObjectMessage
JMSStream JMSStreamMessage
JMSText JMSTextMessage
StreamMessage The message data translates to a byte array that encodes the objects in the
original EMS message.
The field JMSStream receives this data. It has type TIBRVMSG_OPAQUE.
TextMessage The message data translates to a UTF-8 string corresponding to the text of the
original EMS message.
The field JMSText receives this data. It has type TIBRVMSG_STRING.
MapMessage The message data fields map directly to top-level fields in the Rendezvous
message. The fields retain the same names as in the original EMS message.
See also, MapMessage Extensions on page 63.
Data Types
Table 11 presents the mapping between EMS datatypes and Rendezvous
datatypes. The mapping is bidirectional, except for the Rendezvous types that
have no corresponding EMS type (for these types the mapping is marked as
unidirectional in the middle column of Table 11).
Byte TIBRVMSG_I8
Short TIBRVMSG_I16
Integer TIBRVMSG_I32
Float TIBRVMSG_F32
Double TIBRVMSG_F64
MapMessage TIBRVMSG_MSG
byte[] TIBRVMSG_OPAQUE
java.lang.String TIBRVMSG_STRING
short[] TIBRVMSG_I16ARRAY
int[] TIBRVMSG_I32ARRAY
long[] TIBRVMSG_I64ARRAY
float[] TIBRVMSG_F32ARRAY
double[] TIBRVMSG_F64ARRAY
TIBCO Enterprise Message Service is shipped with the tibrvjms.jar file that
you can include in your TIBCO Rendezvous applications. This JAR file includes
the implementation of the com.tibco.tibrv.TibrvJMSTransport class. This
class extends the com.tibco.tibrv.TibrvNetTransport class and allows your
pure Java Rendezvous programs to communicate directly with the EMS server
instead of through rva.
To use the TibrvJMSTransport class, your application must include
tibrvjms.jar (included with TIBCO Enterprise Message Service) and
tibrvjweb.jar (included with TIBCO Rendezvous).
TibrvJMSTransport(
If no parameters are passed, the
String serverURL) transport assumes the server is
throws TibrvException running on the same machine with the
default listener port.
TibrvJMSTransport( You can also pass the serverURL to
String serverURL,
String clientId, connect to the TIBCO Enterprise
String userName, Message Service server at the specified
String password) location.
throws TibrvException
You may also pass the clientID of
your client connection, and a username
and a password to use to connect to the
server.
Topics
• Overview, page 88
• Configuring Transports for SmartSockets, page 90
• Topics, page 95
• Queues, page 97
• Import Issues, page 99
• Export Issues, page 100
• Message Translation, page 101
Overview
TIBCO Enterprise Message Service (release 4 and later) can exchange messages
with TIBCO SmartSockets (release 6.5 and later).
Scope • EMS can import and export messages to an external system through an EMS
topic.
• EMS can import messages from an external system to an EMS queue (but
queues cannot export).
EMS Server
Export
TIBCO SmartSockets
EMS
EMS
Topic
Topic Translation
Translation tibss
Transport
EMSEMS
EMS
Destination Translation
Translation tibss Import
Destination
(Topic
Destination
or Queue) Transport
(Topic or Queue)
Message Translation
EMS and SmartSockets use different formats for messages and their data. When
tibemsd imports or exports a messages, it translates the message and its data to
the appropriate format; for details, see Message Translation on page 101.
Configuration
tibemsd uses definitions and parameters in three configuration files to guide the
exchange of messages with SmartSockets.
Transports Transport definitions (in the configuration file transports.conf) specify the
communication protocol between EMS and the external system; for details, see
Configuring Transports for SmartSockets on page 90.
For details, see Topics on page 95, and Queues on page 97.
Transport Definitions
transports.conf contains zero or more transport definitions. Each definition
begins with the name of a transport, surrounded by square brackets. Subsequent
lines set the parameters of the transport.
Parameter Description
type Required. For SmartSockets transports, the value must be tibss.
SmartSockets Parameters
The syntax and semantics of these parameters are identical to the corresponding parameters in
SmartSockets clients. For full details, see the SmartSockets documentation set.
Parameter Description
delivery_mode This parameter determines the quality of service with which delivers
messages to the SmartSockets server over this transport:
best_effort | gmd_all | gmd_some | ordered
override_lb_mode enable instructs the RTserver to deliver all messages on this client
connection—even if other clients participate in load balancing. For
example, even though many order-processing clients might share the load
of order messages, a message logging facility would require all order
messages, rather than a subset.
disable informs the RTserver that this client (that is, the EMS server)
participates in load balancing (for example, sharing the load with other
EMS servers).
When absent, the default is enable.
gmd_file_delete SmartSockets clients keep data for guaranteed message delivery (GMD) in a
store file.
disable instructs tibemsd to open the existing GMD store file.
enable instructs tibemsd to delete the GMD store file and create a new one
when creating this transport.
When absent, the default is disable.
EMS Parameters
topic_import_dm EMS sending clients can set the JMSDeliveryMode header field for each
message. However, SmartSockets clients cannot set this header. Instead,
queue_import_dm
these two parameters determine the delivery modes for all topic messages
and queue messages that tibemsd imports on this transport.
TIBEMS_PERSISTENT | TIBEMS_NON_PERSISTENT | TIBEMS_RELIABLE
Parameter Description
export_headers When true, tibemsd includes JMS header fields in exported messages.
When false, tibemsd suppresses JMS header fields in exported messages.
When absent, the default value is true.
subscribe_mode • When subscriptions do not collide, specify exact, for best performance.
• When subscriptions collide, specify all, for correct semantics.
Example
These examples from transports.conf illustrate the syntax of transport
definitions.
[SS01]
type = tibss
server_names = rtHost1
username = emsServer6
password = myPasswd
project = sales_order_entry
[SS02]
type = tibss
server_names = tcp:rtHost2A:5555, ssl:rtHost2B:5571
username = emsServer6
password = myPasswd
project = mfg_process_control
override_lb_mode = enable
delivery_mode = gmd_some
Subscribe Mode
Both EMS and SmartSockets allow wildcard subscriptions to collide (for example,
in EMS syntax, foo.* collides with foo.bar; and foo.* collides with *.bar).
The transport parameter subscribe_mode governs SmartSockets message
filtering when EMS wildcard subscriptions collide. This section describes the
mechanisms of subscription, and the results when import subscriptions collide.
exact exact instructs tibemsd to pass subscriptions to the RTserver exactly as the EMS
subscribers specify. As a result, subject filtering occurs on the RTserver.
Consequently, the RTserver delivers each SmartSockets message with subject
/foo/bar to this client (tibemsd) twice—once for the subscription to foo.*, and
once for the subscription to foo.bar. However, tibemsd does not recognize these
duplicates as redundant, and delivers two copies to each subscriber. It is illegal to
configure exact when EMS subscriptions collide.
all all instructs tibemsd to pass the subscription /... to the RTserver. As a result, the
RTserver delivers all messages to this client (only once)—letting tibemsd filter the
messages. tibemsd delivers messages to each subscriber as appropriate, so EMS
subscribers do not receive duplicate messages. Because tibemsd requests all
messages from SmartSockets, an all connection carries more data than an exact
connection.
Wildcard Star Although both EMS and SmartSockets both interpret the star (*) character as a
wildcard, they differ in its semantics. In this aspect, the mapping is not
one-to-one.
In EMS, star can match any whole token of a name, but not part of a token. In
SmartSockets, star can match part of an token—for example, /foo/b*/baz
matches /foo/bar/baz and /foo/box/baz.
If you are familiar with SmartSockets wildcards but not EMS wildcards, see
Wildcards on page 39.
Trailing Wildcard In EMS the greater-than (>) character is a wildcard that matches any number of
trailing tokens. In SmartSockets a string of three dots (...) signifies identical
semantics.
Topics
Topics can both export and import messages. Accordingly, you can configure
topic definitions (in the configuration file topics.conf) with import and export
properties that specify one or more external transports:
import • import instructs tibemsd to import messages that arrive on those transports
from SmartSockets, and deliver them to the EMS destination.
export • export instructs tibemsd to take messages that arrive on the EMS destination,
and export them to SmartSockets via those transports.
The EMS server never re-exports an imported message on the same topic.
(For general information about topics.conf syntax and semantics, see topics on
page 136. You can also configure topics using the administration tool command
addprop topic.)
Example
For example, the following tibemsadmin commands configure the topic
myTopics.news to import and export messages on three transports.
Wildcards
Wildcards in the import and export properties obey EMS syntax and semantics
(not SmartSockets syntax and semantics); see Destination Name—Syntax and
Semantics on page 93.
Queues
Configuration
You can configure queue definitions (in the configuration file queues.conf) with
the import property that specify one or more external transports.
• import instructs tibemsd to import messages that arrive on those transports
from SmartSockets, and deliver them to the EMS destination.
(For general information about queues.conf syntax and semantics, see queues on
page 136. You can also configure queues using the administration tool command
addprop queue.)
Example For example, the following tibemsadmin command configures the queue
myTopics.news to import messages on the transports SS01 and SS02.
Wildcards
Wildcards in the import property obey EMS syntax and semantics (not
SmartSockets syntax and semantics); see Destination Name—Syntax and
Semantics on page 93.
EMS clients cannot subscribe to wildcard queues—however, you can define
wildcards queues in the EMS server for the purpose of property inheritance. That
is, you can configure a static queue named foo.* and set properties on it, so that
child queues named foo.bar and foo.baz will both inherit those properties.
If you define a queue that imports foo.*, tibemsd begins importing all matching
messages from SmartSockets. As messages arrive, tibemsd creates dynamic child
queues (for example, foo.bar and foo.baz) and delivers the messages to them.
Notices that tibemsd delivers messages to these dynamic child queues even
when no subscribers exist to drain them.
Import Issues
This section presents issues associated with importing messages to EMS from
SmartSockets—whether on a topic or a queue.
When a topic and a queue share the same name, at most one of them may set the
import property. For example, if a topic foo.bar and a queue foo.bar are both
defined, only one may specify the import property.
JMSReplyTo
When tibemsd imports and translates a SmartSockets message, it sets the
JMSReplyTo field of the EMS message to the value of the SmartSockets reply_to
header, so that EMS clients can reply to the message.
Usually this value represents a SmartSockets subject. You must explicitly
configure tibemsd to create a topic with a corresponding name, which exports
messages to SmartSockets.
Guaranteed Delivery
For full end-to-end guaranteed delivery from SmartSockets to EMS, all three of
these conditions must be true:
• SmartSockets senders must send messages with guaranteed message delivery
(GMD).
• The transport definition must set topic_import_dm or queue_import_dm (as
appropriate) to TIBEMS_PERSISTENT.
• A durable subscription for the EMS topic or queue must exist.
Export Issues
This section presents issues associated with exporting messages from EMS to
SmartSockets.
JMSReplyTo
Topics Consider an EMS message in which the field JMSReplyTo contains a topic. When
exporting such a message to SmartSockets, you must explicitly configure tibemsd
to import replies from SmartSockets to that reply topic.
Temporary Topics Consider an EMS message in which the field JMSReplyTo contains a temporary
topic. When tibemsd exports such a message to SmartSockets, it automatically
arranges to import replies to that temporary topic from SmartSockets; you do not
need to configure it explicitly.
Wildcard Subscriptions
Star Wildcard Both EMS and SmartSockets interpret the star character (*) as a wildcard—but
with different semantics. EMS accepts star only as a whole element, which
matches a whole element. In contrast, SmartSockets accepts star as part of an
element, matching a substring within the element.
When a SmartSockets client subscribes to foo.bar*, then configure tibemsd to
export the superset foo.*; RTserver narrows the set by delivering only messages
that match subscribers.
For a full discussion of the differences between EMS and SmartSockets wildcards,
see Destination Name—Syntax and Semantics on page 93.
Guaranteed Delivery
For full end-to-end guaranteed delivery to SmartSockets from EMS, both of these
conditions must be true:
• EMS senders must send persistent messages.
• The transport definition must set delivery_mode to gmd_some or gmd_all (as
appropriate).
Message Translation
Import When importing a SmartSockets message to an EMS message, tibemsd does not
set any JMS header fields, except for the special cases noted above.
Export When exporting an EMS message to a SmartSockets message, tibemsd groups all
the JMS header fields (except for the special cases noted above) into a single
submessage within the SmartSockets message. The field JMSHeaders contains
that submessage. Fields of the submessage map the names of JMS header fields to
their values.
tibemsd ignores any JMS header fields that are null or absent—it omits them
from the exported message.
You can instruct tibemsd to suppress the entire header submessage in all
exported messages by setting the transport property export_headers = false.
Export When exporting an EMS message to a SmartSockets message, tibemsd groups all
the JMS property fields into a single submessage within the SmartSockets
message. The field JMSProperties contains that submessage. Fields of the
submessage map the names of JMS property fields to their values.
tibemsd ignores any JMS property fields that are not set, or are set to null—it
omits them from the exported message.
You can instruct tibemsd to suppress the entire properties submessage in the
exported message by setting the transport property
export_properties = false.
Message Body
tibemsd can export messages with any JMS message body type to TIBCO
SmartSockets. Conversely, tibemsd can import messages with any message type
from TIBCO SmartSockets.
For information about JMS body types, see Message Bodies on page 51.
For information about the structure of messages, see JMS Message Structure on
page 50.
Export When exporting an EMS message, tibemsd translates it to one of six SmartSockets
message types (see Table 14) with the following structure:
• The named field JMSHeaders is the first field (omitted when the transport
parameter export_headers is false). It contains a submessage; see JMS
Header Fields on page 101.
• The named field JMSProperties is the next field (omitted when the transport
parameter export_properties is false). It contains a submessage; see JMS
Property Fields on page 101.
• The data fields follow the JMS headers and properties (when present). For
details about field names and types, see the third column of Table 14.
SmartSockets
JMS Message Type Message Type Data Fields
Data Types
Table 15 presents the mapping between EMS datatypes and SmartSockets
datatypes. The mapping is bidirectional, except for a few SmartSockets types that
have no corresponding EMS type (for these types the mapping is marked as
unidirectional in the middle column of Table 15).
Byte T_MSG_FT_CHAR
Character T_MSG_FT_INT2
Short T_MSG_FT_INT2
Integer T_MSG_FT_INT4
Float T_MSG_FT_REAL4
Double T_MSG_FT_REAL8
String T_MSG_FT_STR
Map Message
(See Import on page 102.)
Destination Names
tibemsd automatically translates destination names when importing or exporting
a message; see Slash & Dot Separators on page 93.
When importing, it translates names in the SmartSockets subject and reply_to
fields. When exporting, it translates names in the EMS JMSDestination and
JMSReplyTo fields.
Topics
The main configuration file controls the characteristics of the TIBCO Enterprise
Message Service server. This file is usually named tibemsd.conf, but you can
specify another file name when starting the server. You can find more information
about starting the server in the section Running the Server on page 226.
An example of the tibemsd.conf file is included in the bin directory of TIBCO
Enterprise Message Service. You can edit this configuration file with a text editor.
There are a few configuration items that can be altered using the administration
tool, but most configuration parameters must be set by editing the file. See
Chapter 8, Using the Administration Tool, on page 145 for more information
about using the administration tool.
Several parameters accept boolean values. In the description of the parameter, one
specific set of values is given (for example, enable and disable), but all
parameters that accept booleans can have the following values:
• enable, enabled, true, yes, on
Storage Files
Example
store = /usr/tmp
Example
store_minimum = 32MB
Flow Control
Example
max_msg_memory = 512MB
Example
listen=tcp://localhost:7222
Authorization
See Chapter 9, Authentication and Permissions, on page 179 for more information about these
parameters.
Example
authorization= disabled
Routing
See Chapter 14, Working With Routes, on page 277 for more information about routing.
Example
routing = enabled
Example
ft_activation = 60
ft_ssl_ciphers Specifies the cipher suites used by the server; each suite
in the list is separated by a colon (:). This parameter can
use the OpenSSL name for cipher suites or the longer,
more descriptive names.
See Specifying Cipher Suites on page 258 for more
information about the cipher suites available in TIBCO
Enterprise Message Service and the OpenSSL names
and longer names for the cipher suites.
TIBCO Rendezvous
See also, Chapter 5, Working With TIBCO Rendezvous, on page 67.
TIBCO SmartSockets
See also, Chapter 6, Working With TIBCO SmartSockets, on page 87.
Examples
log_trace=ACL
server_rate_interval Sets the interval (in seconds) over which overall server
statistics are averaged. This parameter can be set to any
positive integer greater than zero.
Overall server statistics are always gathered, so this
parameter cannot be set to zero. By default, this
parameter is set to 1.
Setting this parameter allows you to average message
rates and message size over the specified interval.
rate_interval Sets the interval (in seconds) over which statistics for
routes, destinations, producers, and consumers are
averaged. By default, this parameter is set to 3 seconds.
Setting this parameter to zero disables the average
calculation.
Examples
detailed_statistics = NONE
statistics_cleanup_interval Specifies how long (in seconds) the server should keep
detailed statistics if the destination has no activity. This
is useful for controlling the amount of memory used by
detailed statistic tracking. When the specified interval
is reached, statistics for destinations with no activity
are deleted.
ssl_server_ciphers Specifies the cipher suites used by the server; each suite
in the list is separated by a colon (:). This parameter
must follow the OpenSSL cipher string syntax.
For example, you can enable two cipher suites with the
following setting:
ssl_server_ciphers = RC4-MD5:RC4-SHA
ldap_url URL of the external directory server. This can take the
following forms:
LDAP://<host>:<tcp_port>
or
LDAPS://<host>:<ssl_port>
For example:
LDAP://myLdapServer:1855
• HIGH:MEDIUM
ldap_user_attribute Name of the attribute on the user object class that holds
the name of the user.
Example
tcp:hostname:7500
In addition to the main configuration file, there are several other configuration
files used for various purposes. They control configuration for the following:
• users
• groups
• topics
• queues
• access lists
• destination bridges
• routes
• connection factories
• transports
• RVCM listeners
• durable subscribers
These configuration files can be edited by hand, but you can also use the
administration tool or the administration API to modify some of these files. See
Chapter 8, Using the Administration Tool, on page 145 for more information
about using the administration tool.
The following sections describe the configuration files.
users
This file defines all users. The format of the file is:
<username>:<password>:"<description>"
Item Description
<username> The name of the user
Item Description
<password> Leave this item blank when creating a new user. This
is assigned by the system when the user chooses a
password. For example:
bob::"Bob Smith"
Example
admin: $1$urmKVgq78:"Administrator"
Bob::"Bob Smith"
Bill::"Bill Jones"
groups
This file defines all groups. The format of the file is:
<group-name1>:"<description>"
<user-name1>
<user-name2>
<group-name2>:"<description>"
<user-name1>
<user-name2>
Item Description
<group-name> The name of the group.
Example
administrators: "TIBCO Enterprise Message Service administrators"
admin
Bob
topics
This file defines all topics. The format of the file is:
<topic-name> <property1>, <property2>, ...
Only topics listed in this file or topics with names that match the topics listed in
this file can be created by the applications. For example, if topic foo.* is listed in
this file, topics foo and foo.bar can be created by the application.
Properties of the topic are inherited by all static and dynamic topics with
matching names. For example, if test.* has the property secure, then test.1
and test.foo are also secure. For information on properties that can be assigned
to topics, see Destination Properties on page 32.
For further information on the inheritance of topic properties, refer to Wildcards *
and > on page 39 and Inheritance of Properties on page 41.
queues
This file defines all queues. The format of the file is:
<queue-name> <property1>, <property2>, ...
Only queues listed in this file or topics with names that match the topics listed in
this file can be created by the applications. For example, if queue foo.* is listed in
this file, queues foo and foo.bar can be created by the application.
Properties of the queue are inherited by all static and dynamic queues with
matching names. For example, if test.* has the property secure, then test.1
and test.foo are also secure. For information on properties that can be assigned
to queues, see Destination Properties on page 32.
In the sample file, a > wildcard at the beginning of the file allows the applications
to create valid queues with any name. A > at the beginning of the queue (or topic)
configuration file means that name-matching is not required for creation of
queues (or topics).
acl
This file defines all permissions on topics and queues for all users and groups.
The format of the file is:
TOPIC=<topic> USER=<user> PERM=<permissions>
TOPIC=<topic> GROUP=<group> PERM=<permissions>
QUEUE=<queue> USER=<user> PERM=<permissions>
QUEUE=<queue> GROUP=<group> PERM=<permissions>
ADMIN USER=<user> PERM=<permissions>
ADMIN GROUP=<group> PERM=<permissions>
Item Description
TOPIC Name of the topic to which you wish to add
permissions.
Item Description
PERM Permissions to add.
The permissions which can be assigned to queues
are send, receive and browse. The permissions
which can be assigned to topics are publish,
subscribe and durable. For information about
these permissions, refer to When Permissions Are
Checked on page 195 and Inheritance of Permissions
on page 41.
Administration permissions are granted to users to
perform administration activities. See Administrator
Permissions on page 197 for more information about
administration permissions.
Example
ADMIN USER=sys-admins PERM=all
TOPIC=foo USER=user2 PERM=publish,subscribe
TOPIC=foo GROUP=group1 PERM=subscribe
bridges
This file defines bridges between destinations. See Destination Bridges on page 43
for more information about destination bridges.
The format of the file is:
[<destinationType>:<destination-name>]
<destinationType>=<destinationToBridgeTo1> selector="<message-selector>"
<destinationType>=<destinationToBridgeTo2> selector="<message-selector>"
...
Item Description
<destinationType> The type of the destination. That is, topic or
queue.
Item Description
selector This property is optional and specifies a message
selector to limit the messages received by the
bridged destination.
For detailed information about message selector
syntax, see documentation for the Message class
in TIBCO Enterprise Message Service Java API
Reference.
routes
This file defines routes between this TIBCO Enterprise Message Service server
and other TIBCO Enterprise Message Service servers.
The format of the file is:
[<route-name>]
url=<url-string>
zone_name=<zone_name>
zone_type=<zone_type>
[<selector>]*
[<ssl-prop = value>]*
(Sheet 1 of 2)
Item Description
url The URL of the server to and from which messages
are routed.
(Sheet 2 of 2)
Item Description
zone_type The zone type is either 1hop or mhop. When omitted,
the default value is mhop.
You can set this parameter when creating a route,
but you cannot subsequently change it.
Example
[test_route_2]
url = tcp://server2:7222
ssl_verify_host = disabled
factories
This file defines the connection factories for the internal JNDI names.
The file consists of factory definitions with this format:
[<factory-name>]
type = topic | queue
url = <url-string>
metric = connections | byte_rate
clientID = <client-id>
[<prop = value>]*
[<ssl-prop = value>]*
(Sheet 1 of 3)
Item Description
type Type of the ConnectionFactory. The value can be topic, queue,
generic, xatopic, xaqueue, xageneric.
(Sheet 2 of 3)
Item Description
url This string specifies the servers to which this factory creates
connections:
• A single URL specifies a unique server. For example:
tcp://host1:8222
metric The factory uses this metric to balance the load among a group of
servers:
• connections—Connect to the server with the fewest client
connections.
• byte_rate—Connect to the server with the lowest byte rate.
Byte rate is a statistic that includes both inbound and outbound
data.
clientID The factory associates this client ID string with the connections that
it creates.
Properties
Connection factory properties override corresponding properties set using API calls.
connect_attempt_count A client program iterates through its URL list until it establishes its
first connection to an EMS server. This property determines the
maximum number of iterations. When absent, the default is 2.
connect_attempt_delay When attempting a first connection, the client sleeps for this interval
(in milliseconds) between iterations through the URL list. When
absent, the default is 500 milliseconds.
(Sheet 3 of 3)
Item Description
reconnect_attempt_count After losing its server connection, a client program iterates through
its URL list until it re-establishes a connection with an EMS server.
This property determines the maximum number of iterations. When
absent, the default is 4.
reconnect_attempt_delay When attempting to reconnect, the client sleeps for this interval (in
milliseconds) between iterations through the URL list. When absent,
the default is 500 milliseconds.
Example [north_america]
type = topic
url = tcp://localhost:7222,tcp://server2:7222
clientID = "Sample Client ID"
ssl_verify_host = disabled
transports
This file defines transports for importing messages from or exporting messages to
external message service:
• For TIBCO Rendezvous, see Configuring Transports for Rendezvous on
page 70.
• For TIBCO SmartSockets, see Configuring Transports for SmartSockets on
page 90.
tibrvcm
This file defines the TIBCO Rendezvous certified messaging (RVCM) listeners for
use by topics that export messages to a tibrvcm transport. The server preregisters
with these listeners when the server starts up so that all messages (including the
first message published) sent by way of the tibrvcm transport are guaranteed. If
the server does not preregister with the RVCM listeners before exporting
messages, the listeners are created when the first message is published, but the
first message is not guaranteed.
Item Description
<transport> The name of the transport for this RVCM listener.
If you are using the deprecated topic properties and
configuration settings for communicating with
TIBCO Rendezvous, then do not specify the
transport name here. For more information about the
deprecated method of exporting to RVCM, TIBCO
Rendezvous Parameters—Deprecated on page 132,
and Deprecated Properties on page 32.
Example
RVCM01 listener1 foo.bar
RVCM01 listener2 foo.bar.bar
durables
This file defines static durable subscribers.
The file consists of lines with either of these formats:
<topic-name> <durable-name>
<topic-name> <durable-name> <properties>
Item Description
<topic-name> The topic of the durable subscription.
Item Description
Durable Subscriber Properties
Conflicting When the server detects an conflict between durable subscribers, it maintains the
Specifications earliest specification, and outputs a warning. Consider these examples:
• A static specification in this file takes precedence over a new durable
dynamically created by a client.
• An existing durable dynamically created by a client takes precedence over a
new static durable defined by an administrator.
• A static durable subscription takes precedence over a client attempting to
dynamically unsubscribe (from the same topic and durable name).
Conflict can also arise because of wildcards. For example, if a client dynamically
creates a durable subscriber for topic foo.*, and an administrator later attempts
to define a static durable for topic foo.1, then the server detects this conflict and
warns the administrator.
This chapter gives an overview of commands and use in the administration tool
for TIBCO Enterprise Message Service.
Topics
Option Description
-ssl_password <password> Private key or PKCS#12 password. If the
password is required, but has not been
specified, it will be prompted for.
-user and -password parameters are used only when -server is specified. If
-user and -server are not specified and the server requires administrator
authentication, the command-line tool prompts the user to enter the name and
password.
Notice that user name and password provided in the command line is only used
to connect to the server specified in the same command line, otherwise they are
ignored. The user name and password entered on one command line are not used
with subsequent connect commands entered in the script file or interactively.
Examples
tibemsadmin -server "tcp://myhost:7222"
tibemsadmin -server "tcp://myhost:7222" -user admin -password
secret
Some options are needed when you choose to make a SSL connection. For more
information on SSL connections, refer to Chapter 12, Using the SSL Protocol,
page 241.
To protect access to the server configuration, you should assign a password to the
user admin.
When you restart the administration tool and type connect, the administration
tool now requires your password before connecting to the server.
For further information about setting and resetting passwords, refer to set
password on page 166.
Naming Conventions
• Both * and > are wildcards, and cannot be used in names except as wildcards
• The dot separates elements within a destination name (foo.bar.*) and can
only be used for that purpose.
For more information on the use of wildcards, see Wildcards on page 39.
Command Listing
The command line interface of the administration tool allows you to perform a
variety of functions.
Note that SSL commands are not listed in this table. SSL commands are listed in
several tables in Chapter 12, Using the SSL Protocol, on page 241.
When autocommit is set to on, each command causes the change the command
made to the configuration files to be saved automatically. When autocommit is
set to off, you must manually use the commit command to save configuration
changes to the disk.
By default, autocommit is set to on when interactively issuing commands. If you
are running a script, the entire script must complete without errors (or the ignore
parameter can be specified to ignore errors) for the commit to occur. If there are
errors in the script, and the ignore parameter is not specified, the administration
tool immediately stops the script after the first error and does NOT perform the
implicit commit.
Entering autocommit without parameters displays the current setting of
autocommit (on or off).
commit commit
Connects the administration tool to the server. Any administrator can connect. An
administrator is either the admin user, any user in the $admin group, or any user
that has administrator permissions enabled. See Administrator Permissions on
page 197 for more information about administrator permissions.
<server-url> is usually in the form
<protocol>://<host-name>:<port-number>
for example:
tcp://myhost:7222
Creates a JNDI name for a topic or queue, or creates an alternate JNDI name for a
topic that already has a JNDI name.
For example:
create FOO jndiname BAR
will create new JNDI name FOO referring the same object referred by JNDI name
BAR
Creates a queue with the specified name and properties. See Naming
Conventions on page 150
Optional queue properties are:
• failsafe
• secure
• global
• maxRedelivery
• exclusive
• import
• flowControl
• trace[=body]
• tibrv_import (deprecated)
• tibrvcm_import (deprecated)
• maxBytes=<number>
• preFetch=<number>
• expiration=<time>
Creates a route with a name and URL for the destination server (though not
necessarily the destination client). The URL can be specified as a
comma-separated list of URLs, if you have configured fault-tolerant servers.
The name is the name of the route.
Multiple properties can be specified in a space-separated list.
You can set the zone_name and zone_type parameters when creating a route, but
you cannot subsequently change them.
For route parameters, see Configuring Routes and Zones on page 286.
For the configuration file routes.conf, see routes on page 139.
Creates a topic with specified name and properties. See Naming Conventions on
page 150
Optional topic properties are:
• failsafe
• secure
• global
• import
• export
• flowControl
• trace[=body]
• tibrv_import (deprecated)
• tibrvcm_import (deprecated)
• tibrv_export (deprecated)
• tibrvcm_export (deprecated)
• maxbytes=<number>
• expiration=<time>
Creates a new user. The password is optional, and can be left empty in this
command. If the password is not specified in this command, it can be added later
using the set password command.
See Naming Conventions on page 150.
the command deletes all topics and queues that match the topic or queue name
pattern.
Deletes a factory.
Deletes a group.
Deletes a queue.
Deletes a route.
Deletes a user.
disconnect disconnect
Echo controls the reports that are printed into the standard output. When echo is
off the administrative tool only prints errors and the output of queries. When
echo is on, the administrative tool report also contains a record of successful
command execution.
Choosing the parameter on or off in this command controls echo. If echo is
entered in the command line without a parameter, it displays the current echo
setting (on or off). This command is used primarily for scripts.
The default setting for echo is on.
• send
• browse
• create
• delete
• modify
• purge
• publish
• durable
• create
• delete
• modify
• purge
Usage help.
Enter help commands for a command summary.
Enter help <command> for help on a specific command.
When used without the optional pattern parameter, this command erases all
messages in all queues for all receivers.
When used with the pattern parameter, this command erases all messages in all
queues that fit the pattern (for example: foo.*).
When used without the optional pattern parameter, this command erases all
messages in all topics for all subscribers.
When used with the pattern parameter, this command erases all messages in all
topics that fit the pattern (for example: foo.*).
Revokes the specified global administrator permissions from the specified user.
See Chapter 9, Authentication and Permissions, on page 179 for more information
about administrator permissions.
rotatelog rotatelog
Forces the current log file to be backed up and truncated. All entries in the current
log file are purged, and the server then starts writing entries to the newly empty
log file.
The backup file name is the same as the current log file name with a sequence
number appended to the filename. The server queries the current log file
directory and determines what the highest sequence number is, then chooses the
next highest sequence number for the new backup name. For example, if the log
file name is tibems.log and there is already a tibems.log.1 and tibems.log.2,
the server names the next backup tibems.log.3.
The set server command can control many parameters. Multiple parameters
are separated by spaces. Table 18 describes the parameters you can set with this
command.
Parameter Description
password[=string] Sets server password used by the server to
connect to other routed servers. If the value is
omitted it is prompted for by the
administration tool. Entered value will be
stored in the main server configuration file in
mangled form (but not encrypted).
Enter empty string twice when prompted to
reset password.
Parameter Description
log_trace=<trace-items> Sets the trace preference on the file defined by
the logFile parameter. If logFile is not set,
the values are stored but have no effect.
The value of this parameter can include names
of trace subjects, possibly prepended with '+' or
'-' sign. The '+' sign means add item to the
current set of trace items, the '-' sign means
remove tracing on that item. If any item has no
'+' or '-' sign then it entirely replaces current
trace settings. List of items can include names:
INFO, WARNING, ACL, LIMITS, SSL,
SSL_DEBUG, ROUTE,ROUTE_DEBUG,
CONNECT, CONNECT_ERROR,
PRODCONS, DEST, TX, LDAP_DEBUG, MSG,
AUTH, FLOW, ADMIN and RVADV.
The special name 'DEFAULT' means the
default set of trace items which consists of:
INFO, WARNING, ACL, LIMITS, ROUTE,
ADMIN, CONNECT_ERROR, MSG, and
RVADV.
See Table 28, Server tracing options, on
page 209 for more information about trace
options.
Examples
log_trace=ACL
Parameter Description
console_trace=<console-trace-items> Sets the trace preference on the stderr output.
The values are the same as in log_trace
parameters. This set of trace applies to the
output on the console regardless if logFile is
set or not.
That is, if logFile if defined then output into
the console can be removed by specifying:
console_trace=-DEFAULT
Parameter Description
max_msg_memory=<value> Maximum memory the server can use for
messages. This parameter allows you to limit
the amount of memory used by the server for
messages so that the server memory usage
does not grow beyond the system’s memory
capacity.
See the description of the max_msg_memory
parameter in Table 16 on page 106 for a
complete description.
You can set this parameter to 0 to specify no
limit. Use KB, MB, or GB units.
Lowering this value will not immediately free
memory occupied by messages.
Parameter Description
server_rate_interval=<num> Sets the interval (in seconds) over which
overall server statistics are averaged. This
parameter can be set to any positive integer
greater than zero.
Overall server statistics are always gathered, so
this parameter cannot be set to zero. By default,
this parameter is set to 1.
Setting this parameter allows you to average
message rates and message size over the
specified interval.
Parameter Description
statistics_cleanup_interval=<num> Specifies how long (in seconds) the server
should keep detailed statistics if the destination
has no activity. This is useful for controlling the
amount of memory used by detailed statistic
tracking. When the specified interval is
reached, statistics for destinations with no
activity are deleted.
Sets the password for a user. If a password is not provided in the command, the
system prompts you to enter it. It is not necessary to have a password. The
administrator can press enter when asked for a password.
To reset a password, type:
set password <user-name>
The administrative tool prompts for a password. A new password can be entered
at this time.
If the user presses enter at each password prompt, without entering any text,
then that user will not have a password.
In setting passwords, as in other commands, you must use the commit command
to save the changes to the configuration file.
Sets the properties for a factory, overriding any existing properties. Multiple
properties are separated by spaces.
Sets the properties for a queue, overriding any existing properties. Multiple
properties are separated by commas.
Sets the properties for a route, overriding any existing properties. Topic and
queue names are separated by commas. Multiple properties are separated by
spaces.
You can set the zone_name and zone_type parameters when creating a route, but
you cannot subsequently change them.
For route parameters, see Configuring Routes and Zones on page 286.
For the configuration file routes.conf, see routes on page 139.
Sets topic properties overriding any existing properties. Multiple properties are
separated by commas.
Displays information about the configured bridges for the specified topic or
queue. The following is example output for this command:
Target Name Type Selector
queue.dest Q
topic.dest.1 T "urgency in ('high', 'medium')"
topic.dest.2 T
The names of the destinations to which the specified destination has configured
bridges are listed in the Target Name column. The type and the message selector
(if one is defined) for the bridge are listed in the Type and Selector column.
Shows a summary of the destination bridges that are currently configured. The
type option specifies the type of destination. For example, show bridges topic
shows a summary of configured bridges for all topics. The pattern specifies a
pattern to match for destination names. For example show bridges foo.*
returns a summary of configured bridges for all destinations that match the name
foo.*. The type and pattern are optional.
Destinations that match the specified pattern and/or type are listed in the Source
Name column. The number of bridges to queues for each destination is listed in
the Queue Targets column. The number of bridges to topics for each destination is
listed in the Topic Targets column.
Shows connections between clients and server. You can optionally specify the
type of connection you would like to display: queue (q), topic (t), or system (s).
You can also optionally specify a hostname or username to display connections for
only the desired host or user. You can optionally specify the version keyword to
display the client’s version.
This command prints a table of information described in Table 19.
Host Connection's host name. (If the name is not available, this
column displays the host’s IP address.)
Host Connection's host name. (If the name is not available, this
column displays the host’s IP address.)
If a pattern is not entered, this command shows a list of all durable subscribers on
all topics.
If a pattern is entered (for example foo.*) this command shows a list of durable
subscribers on topics that match that pattern.
This command prints a table of information described in Table 20.
Shows the object that the specified name is bound to by the JNDI server.
For groups defined externally, there is an asterisk in front of the group name.
Only groups with at least one currently connected user are shown.
Shows the message IDs of all messages with the specified correlation ID set as
JMSCorrelationID message header field. You can display the message for each
ID returned by this command by using the show message <messageID> command.
This command requires that tracking by correlation ID be turned on using the
track_correlation_ids configuration parameter.
Shows the user’s parent groups. This command can help you to understand the
user’s permissions.
Shows the properties (URL and SSL properties) of all created routes.
This command is provided for backward compatibility with previous releases and
the previous mechanism for specifying RVCM transports. Use the show
rvcmtransportledger command if you are using the current mechanism for
specifying transports.
Displays the TIBCO Rendezvous certified messaging (RVCM) ledger file entries
for the specified subject. You can specify a subject name, use wildcards to retrieve
all matching subjects, or specify no subject name to retrieve all ledger file entries.
This command performs the RVCM call tibrvcmTransport_ReviewLedger.
See the TIBCO Rendezvous documentation for more information about ledger
files and the format of ledger file entries.
See the TIBCO Rendezvous documentation for more information about ledger
files and the format of ledger file entries.
Displays statistics for the specified item. You can display statistics for consumers,
producers, routes, or destinations. Statistic gathering must be enabled for
statistics to be displayed. Also, detailed statistics for each item can be displayed if
detailed statistic tracking is enabled. Averages for inbound/outbound messages
and message size are available if an interval is specified in the rate_interval
configuration parameter.
The total keyword specifies that only total number of messages and total
message size for the item should be displayed. The wide keyword displays
inbound and outbound message statistics on the same line.
See Working with Server Statistics on page 220 for a complete description of
statistics and how to enable/disable statistic gathering options.
Shows user name and description. If no user name is specified, this command
displays the currently logged in user.
For users defined externally, there is an asterisk in front of the user name.
Shows all permissions set for a given group. Shows the group and the set of
permissions.
Shows all permissions set for a queue. Lists all entries from the acl file. Each
entry shows the “grantee” (user or group) and the set of permissions.
Shows all permissions set for a topic. Lists all entries from the acl file. Each entry
shows the “grantee” (user or group) and the set of permissions.
Shows all permissions set for a given user. Shows the user and the set of
permissions.
shutdown shutdown
updatecrl updatecrl
whoami whoami
Alias for the show user command to display the currently logged in user.
You can create users and assign passwords to the users to control access to the
TIBCO Enterprise Message Service server. TIBCO Enterprise Message Service can
also be configured to use an external directory, such as an LDAP server or the
UNIX system password file, to control access to the server.
You can also assign permissions to users and groups to control actions that can be
performed on destinations.
This chapter describes authentication and permissions in TIBCO Enterprise
Message Service.
Topics
TIBCO Enterprise Message Service allows you to control access to the server by
creating users and assigning passwords. The server can also authenticate users
defined in an external directory, such as an LDAP server or the UNIX system
password file.
Permissions apply to the activities a user can perform on each destination (topic
and queue). Using permissions you can control which users have permission to
send, receive, or browse messages for queues. You can also control who can
publish or subscribe to topics, or who can create durable subscriptions to topics.
Permissions are stored in the access control list for the server.
Groups allow you to create classes of users and control permissions on a more
global level. Rather than granting and revoking permissions on destinations to
individual users, you can control destination access at the group level. Users
inherit any permissions from each of the groups they belong to, in addition to any
permissions that are granted to them directly. Group information can also be
retrieved from an external directory, such as an LDAP server.
Permissions for all users and groups must be defined in the access control list for
the TIBCO Enterprise Message Service server. See Users and Groups on page 185
for more information about using an external directory service for authenticating
users. See Setting Permissions on page 191 for more information about
permissions.
chris topic=check.request
pat user=chris
ryan perm=publish, subscribe
topic=purchase.order Destinations
group=accounting
perm=publish,subscribe Topics:
Groups check.request
Accounting: topic=all.news purchase.order
chris group=employees
pat perm=subscribe
ryan
External Directory
Users Groups
Employees:
gale
gale
jean
jean
perry
perry
Externally-configured users and groups are defined and managed using the
external directory. Locally-configured users and groups, as well as the access
control list, are configured using any of the administration interfaces (editing
configuration files, using the administration tool, or the administration API).
Access control and Secure Sockets Layer (SSL) have some similar characteristics.
SSL allows for servers to require user authentication by way of the user’s digital
certificate. SSL does not, however, specify any access control at the destination
level. SSL and the access control features described in this chapter can be used
together or separately to ensure secure access to your system. See Chapter 12,
Using the SSL Protocol, on page 241 for more information about SSL.
Administrators can enable or disable access control for the server. Administrators
can also enable and disable permission checking for specific destinations.
Server Control
The authorization property in the main configuration file enables or disables
the checking of permissions for all destinations managed by the server. The
authorization property also enables or disables verification of user names and
passwords.
When authorization is turned off, any connection to the server is granted and no
permissions are checked when a client accesses a destination (for example,
publishing a message to a topic). When authorization is turned on, only
connections from valid users supplying the correct password for that username
are allowed. Also, any permissions defined for users on destinations are checked
when authorization is enabled (provided the destination has enabled permission
checking).
You can enable authorization by editing tibemsd.conf and setting the
authorization property to enabled and restarting the server. You can also use the
tibemsadmin tool to dynamically enable authorization with the following
command:
set server authorization=enabled
Destination Control
If server authorization is enabled, you can control access to individual
destinations by enabling the secure property on the destination. The secure
property, when set on a destination, specifies user permissions should be checked
for that destination when a user attempts to perform an operation on that
destination.
The secure property does not specify SSL-level security. This property only
controls basic authentication and permission verification using unencrypted,
non-secure communication between clients and server.
When a topic or a queue does not have the secure property set, any authenticated
user can perform any actions on that topic or queue.
See Destination Properties on page 32 for more information about destination
properties.
The following sections describe users and groups in TIBCO Enterprise Message
Service.
Users
Users are specific, named IDs that allow you to identify yourself to the server.
When a client logs in, the connect request should be accompanied by a username
and the password associated with the username.
In special cases, you may wish to allow anonymous access to the server. In this
case, a connect request does not have to supply a username or password. To
configure the server to allow anonymous logins, you must create a user named
anonymous and specify no password. Anonymous logins are not permitted unless
the anonymous user exists.
Clients logging in anonymously are only able to perform the actions that the
anonymous user has permission to perform.
There is one predefined user, admin. The administrator user is set up when TIBCO
Enterprise Message Service is installed, and this user performs administrative
tasks, such as creating other users.
You can create and remove users and change passwords by specifying the users in
the users.conf configuration file, using the tibemsadmin tool, or by using the
administration API. For more information about specifying users in the
configuration file, see users on page 134. For more information about specifying
users using the tibemsadmin tool, see Chapter 8, Using the Administration Tool,
on page 145. For more information on the administration API, see TIBCO
Enterprise Message Service Java API Reference included in the online documentation.
Groups
Groups allow you to create classes of users. Groups make access control
administration significantly simpler because you can grant and revoke
permissions to large numbers of users with a single operation on the group. Each
user can belong to as many groups as necessary. A user’s permissions are the
union of the permissions of the groups the user belongs to, in addition to any
permissions granted to the user directly.
You can create, remove, or add users to groups by specifying the groups in
groups.conf, using the tibemsadmin tool, or by using the administration API.
For more information about specifying groups in the configuration file, see
groups on page 135. For more information about specifying groups using the
tibemsadmin tool, see Chapter 8, Using the Administration Tool, on page 145. For
more information on the administration API, see TIBCO Enterprise Message Service
Java API Reference included in the online documentation.
To authenticate users based on the system directory (for example, the UNIX
password file), tibemsd must be run as a user that has authorization to access the
system directory. For example, on UNIX, tibemsd should be run as root or on
Windows, the process must have the “Act as part of the operating system” policy
enabled.
On Windows platforms, the user LocalSystem already has the policy “Act as part
of the Operating System” and is the user that Microsoft recommends whenever a
process needs “Act as part of the Operating System”. To run tibemsd as a service,
you would use the program SRVANY.EXE from the Windows Resource Kit.
Only users that are stored in an external directory and have passwords can be
authenticated by TIBCO Enterprise Message Service. Users without passwords
cannot be authenticated.
Group Information
Group information stored in an external directory can also be retrieved by the
TIBCO Enterprise Message Service server. Static and dynamic groups are
supported and you can configure the TIBCO Enterprise Message Service server to
retrieve either or both.
You can only perform administrative commands on users and groups that do not
exist in the local configuration when the configuration parameter user_auth
includes the values ldap or system. If user_auth only specifies the value local,
then the user or group must exist in the local configuration before you can
perform commands on the user or group.
When you attempt to view users and groups using the show user/s or show
group/s commands, any users and groups that exist in external directories have
an asterisk next to their names. Users and groups from external directories will
only appear in the output of these commands in the following situations:
• an externally-defined user successfully authenticates
• a user belonging to an externally-defined group successfully authenticates
• an externally-defined user has been added to a locally-defined group
• permissions on a topic or queue have been granted to an externally-defined
user or group
Therefore, not all users and groups defined in the external directory may appear
when the show user/s or show group/s commands are executed. Only the users
and groups that meet the above criteria at the time the command is issued will
appear.
You can create users and groups with the same names as externally-defined users
and groups. If a user or group exists in the server’s configuration and is also
defined externally, the local definition of the user takes precedence.
Locally-defined users and groups will not have an asterisk by their names in the
show user/s or show group/s commands.
You can also issue the delete user or delete group command to delete users
and groups from the local server’s configuration. The permissions assigned to the
user or group are also deleted when the user or group is deleted. If you delete a
user or group that is defined externally, this deletes the user or group from the
server’s memory and deletes any permissions assigned in the access control list,
but it has no effect on the external directory. The externally-defined user can once
again log in, and the user is created in the server’s memory and any groups to
which the user belongs are also created. However, any permissions for the user or
group have been deleted and therefore must be re-granted.
Table 16, Configuration parameters, on page 106 describes the complete list of
configuration parameters for configuring an external directory server. Table 23
describes parameter settings for default configurations of popular LDAP servers.
External
Directory Server Parameter Configuration
ldap_user_class = Person
ldap_user_attribute = uid
ldap_user_base_dn = ou=people,
o=<your_organization>
ldap_user_filter =
(&(uid=%s)(objectclass=person))
ldap_group_base_dn = "ou=groups,
o=<your_organization>
ldap_group_filter =
(|(&(cn=%s)(objectclass=groupofUniqueNames))(&
(cn=%s)(objectclass=groupOfURLs)))
ldap_static_group_class = groupofuniquenames
ldap_staic_group_attribute = cn
ldap_static_member_attribute = uniquemember
ldap_dynamic_group_class = groupofURLs
ldap_static_group_member_filter =
(&(uniquemember=%s)(objectclass=groupofuniquen
ames))
ldap_dynamic_group_class = groupofURLs
ldap_dynamic_group_attribute = cn
ldap_dynamic_member_url_attribute = memberURL
ldap_user_class = user
ldap_user_attribute = cn
ldap_user_filter = (&(cn=%s)(objectclass=user))
ldap_group_filter =
(&(cn=%s)(objectclass=group))
ldap_static_group_class = group
ldap_static_group_attribute = cn
ldap_static_member_attribute = member
ldapt_static_group_member_filter =
(&(member=%s)(objectclass=group))
External
Directory Server Parameter Configuration
ldap_group_base_dn = ou=groups,
dc=<your_domain_component>, dc=<your_domain_component>
ldap_group_filter =
(&(cn=%s)(objectclass=groupofnames))
ldap_static_group_class = groupofnames
ldap_static_group_attribute = cn
ldap_static_member_attribute = member
ldap_static_group_member_filter =
(&(member=%s)(objectclass=groupofnames))
Setting Permissions
Permissions are stored in the access control list and determine the actions a user
can perform on a destination. A user’s permissions are the union of the
permissions granted explicitly to that user along with any permissions the user
receives by belonging to a group.
When granting permissions, you specify the user or group to whom you wish to
grant the permission, the name of the destination, and the permission(s) you wish
to grant. You can grant permissions regardless of whether authorization is
enabled for the server or the destination has the secure property enabled. The
currently granted permissions are stored in the access control file and are only
enforced when the properties for enforcement are enabled.
When setting permissions for users and groups defined externally, user and
group names are case-sensitive. Make sure you use the correct case for the name
when setting the permissions.
Permissions can only be granted by users that have the appropriate administrator
permissions. See Administrator Permissions on page 197 for more information.
You can specify either explicit destination names or wildcard destination names.
See Inheritance of Permissions on page 192 for more information on wildcard
destination names and permissions.
Topics and queues each have associated permissions. Table 24 describes the
permissions specific to queues. Table 25 describes the permissions specific to
queues.
Name Description
subscribe permission to create non-durable subscribers on the topic
Name Description
publish permission to publish on the topic
You assign permissions either by specifying them in the acl.conf file, using the
tibemsadmin tool, or by using the administration interface. See for more
information about specifying the configuration file. See for more information
about using the tibemsadmin tool. See TIBCO Enterprise Message Service Java API
Reference included in the online documentation for more information on using the
administration API.
This set of permissions means that bob can subscribe to topic foo and publish
messages to it, but bob cannot create durable subscribers to foo.
If bob is a member of group engineering and the group has the following entry
in the acl file:
GROUP=engineering TOPIC=bar PERM=subscribe,publish
then bob can publish and subscribe to topics foo and bar.
If both the user bob and the group engineering have entries in the acl.conf file,
then bob has permissions that are a union of all permissions set for bob directly
and the permissions of the group engineering.
Inheritance of Permissions
When you grant permissions to users for topics or queues with wildcard
specifications, all created topics and queues that match the specification will have
the same granted permissions as the permissions on the parent topic. If there are
multiple parent topics, the user receives the union of all parent topic permissions
for any child topic. You can add permissions to a user for topics or queues that
match a wildcard specification, but you cannot remove permissions.
For example, you can grant user Bob the browse permission on queue foo.*. The
user Bob receives the browse permission on the foo.bar queue, and you can also
grant Bob the send permission on the foo.bar queue. However, you cannot take
away the inherited browse permission from Bob on the foo.bar queue.
Revoking Permissions
You revoke permissions either by removing or editing entries in the acl.conf file,
using the revoke command in tibemsadmin, or by using the administration API.
See Chapter 8, Using the Administration Tool, on page 145 for more information
about tibemsadmin. See TIBCO Enterprise Message Service Java API Reference
included in the online documentation for more information about the
administration API.
Administrators can revoke permissions for users that have created topic
subscriptions or are queue consumers. Once the permission is revoked, the
destination still exists, but the user can no longer perform that operation on the
destination. For example, if the subscribe permission is revoked, the subscription
continues to exist, but the user no longer receives messages for the topic.
You can only revoke a permission that is granted directly. That is, you cannot
revoke a permission from a user that the user receives from a group. Also, you
cannot revoke a permission that is inherited from a parent topic. The revoke
command in tibemsadmin can only remove items from specific entries in the
acl.conf file. The revoke command cannot remove items that are inherited from
other entries.
When creating a durable subscriber, users must have the durable permission
explicitly set for the topic they are subscribing to. For example, to create a durable
subscriber to topic foo.*, the user must have been granted the durable
permission to create durable subscriptions for topic foo.*.
6. The administrator sends a message on the topic user.bob to notify bob that
access has been granted to all corp.* topics.
7. The application receives the new message on topic user.bob and displays the
message.
8. User bob attempts to create a subscription for topic corp.news and succeeds.
9. A message is sent to topic corp.news. User bob’s application receives this
message and displays it.
10. The administrator notices that bob is a contractor and not an employee, so the
administrator revokes the subscribe permission on topic corp.* to user bob.
The subscription to corp.news still exists for user bob’s application, but no
new messages to the corp.news topic can be received, nor can bob create any
new subscriptions to children of the corp.* topic.
Administrator Permissions
Administrators are a special class of users that can manage the TIBCO Enterprise
Message Service server. Administrators create, modify, and delete users,
destinations, routes, factories, and other items. In general, administrators must be
granted permission to perform administration activities when using the
administration tool or API. Administrators can be granted global permissions (for
example, permission to create users or to view all queues), and administrators can
be granted permissions to perform operations on specific destinations (for
example, purging a queue, or viewing properties for a particular topic).
You should control access to the configuration files so that only certain system
administrators can view or modify the configuration files. If a user can view or
modify the configuration files, setting permissions to control which destination
that user can manage would not be enforced when the user manually edits the
files.
Use the facilities provided by your Operating System to control access to the
server’s configuration files.
Any type of modification to an item requires that the user can view that item.
Therefore, granting any create, modify, delete, change, or purge permission
implicitly grants the permission to view the associated item.
Granting the view permissions is useful when you want specific users to only be
able to view items. It is not necessary to grant the view permission if a user
already has a permission that allows the user to modify the item.
Global permissions are stored in the acl.conf file, along with all other
permissions. Global permissions in this file have the following syntax:
ADMIN USER=<username> PERM=<permission>
or
ADMIN GROUP=<groupname> PERM=<permission>
For example, if a user named BOB is granted the view-user global administration
permission and the group sys-admins is granted the change-acl permission, the
following entries are added to the acl.conf file:
ADMIN USER=BOB PERM=view-user
ADMIN GROUP=sys-admins PERM=change-acl
Destination-Level Permissions
Administrators can be granted permissions on each destination. Destination-level
permissions control the administration functions a user can perform on a specific
destination. Global permissions granted to a user override any destination-level
permissions.
The typical use of destination-level administration permissions is to specify
permissions on wildcard destinations for different groups of users. This allows
you to specify particular destinations over which a group of users has
administrative control. For example, you may allow one group to control all
ACCOUNTING.* topics, and another group to control all PAYROLL.* queues.
Any type of modification to an item requires that the user can view that item.
Therefore, granting create, modify, delete, change, or purge implicitly grants the
permission to view the associated item.
Granting the view permissions is useful when you want specific users to only be
able to view items. It is not necessary to grant the view permission if a user
already has a permission that allows the user to modify the item.
Both user and administrator permissions for a destination are stored in the same
entry in the acl.conf file. This is for convenience rather than for clarity. User
permissions specify the actions a client application can perform on a destination
(publish, subscribe, send, receive, and so on). Administrator permissions specify
what administrative commands the user can perform on the destination when
using the administration tool or API.
Protection Permissions
Protection permissions allow you to group users into administrative domains so
that administrators can only perform actions within their domain. An
administrator can only perform administrative operations on a user that has the
same protection permission as the user. There are four protection permissions
(protect1, protect2, protect3, and protect4) that allow you to create four
groups of administrators. Protection permissions do not apply to the admin user
or users in the $admin group — these users can perform any action on any user
regardless of protection permissions.
To use protection permissions, grant one of the protection permissions to a set of
users (either individually, or to a defined group(s)). Then, grant the same
protection permission to the administrator that can perform actions on those
users.
For example, there are four departments in a company: sales, finance,
manufacturing, and system administrators. Each of these departments has a
defined group and a set of users assigned to the group. Within the system
administrators, there is one manager and three other administrators, each
responsible for administering the resources of the other departments. The
manager of the system administrators can perform any administrator action. Each
of the other system administrators can only perform actions on members of the
groups for which they are responsible.
The user name of the manager is mgr, the user names of the other system
administrators are admin1, admin2, and admin3. The following commands
illustrate the grants necessary for creating the example administration structure.
add member $admin mgr
grant admin sales protect1
grant admin admin1 protect1,all
grant admin manufacturing protect2
grant admin admin2 protect2,all
grant admin finance protect3
grant admin admin3 protect3,all
You can grant a protection permission, in addition to the all permission. This
signifies that the user has all administrator privileges for anyone who also has the
same protection permission. However, if you revoke the all permission from a
user, all permissions, including any protection permissions are removed from the
access control list for the user.
For example, admin1 can perform any action on any user in the sales group, and
can view any users in the manufacturing or finance groups. However, admin1
is not able to grant permissions, change passwords, delete users from, or perform
any other administrative action on users of the manufacturing or finance
groups. The mgr user is able to perform any action on any user, regardless of their
protection permission because mgr is a member of the $admin group.
System administrators must monitor and manage the TIBCO Enterprise Message
Service server. The logging, monitoring, and statistics facilities provided by the
server allow system administrators to effectively view system activity and track
system performance.
Topics
You can configure the TIBCO Enterprise Message Service server to write a variety
of information to the log. Several parameters and commands control where the
log is located as well as what information is written to the log. The log can be
written to a file, to the system console, or to both.
When you remove or move log files, it is recommended that you remove or more
all log files in the log file directory. The server can then restart its log file sequence
with 1.
You can also dynamically force the log file to be backed up and truncated using
the rotatelog command in tibemsadmin. See Command Listing on page 151 for
more information about the rotatelog command.
For other configuration parameters that affect the log file, see Tracing and Log File
Parameters on page 119.
When you want trace messages to be sent to a log file, you must also configure the
logFile configuration parameter. If you specify log_trace, and the logFile
configuration parameter is not set to a valid file, the tracing options are stored,
but they are not used until the server is started with a valid log file.
When configuring log or console tracing, you have a variety of options for the
types of trace messages that can be generated. Table 28 describes the available
tracing options.
DEFAULT Sets the trace options to the default set. This includes:
• INFO
• WARNING
• ACL
• LIMITS
• ROUTE
• ADMIN
• RVADV
• CONNET_ERROR
• CONFIG
• MSG
The following sets the trace log to show all default trace messages, in addition to
SSL messages, but ADMIN messages are not shown.
log_trace=DEFAULT,-ADMIN,+SSL
The following sets trace messages to be sent to the console when TIBCO
Rendezvous advisory messages are received.
console_trace=RVADV
Message Tracing
In addition to other server activity, you can trace messages as they are processed.
Trace entries for messages are only generated for destinations or messages that
specify tracing should be performed. For destinations, you specify the trace
property to enable the generation of trace messages. For individual messages, the
JMS_TIBCO_MSG_TRACE property specifies that tracing should be performed for
this message, regardless of the destination settings. The sections below describe
the tracing properties for destinations and messages.
Message trace entries can be output to either the console or the log. The MSG trace
option specifies that message trace entries should be displayed, and the
DEFAULT trace option includes the MSG option. SeeTracing on the Server on
page 209 for more information about specifying trace options.
You must set the tracing property on either destinations or messages and also set
the MSG or DEFAULT trace option on the console or the log before you can view
trace entries for messages.
The TIBCO Enterprise Message Service server can publish topic messages for
several system events. For example, the server can publish a message when users
connect or disconnect. System event messages contain detail about the event
stored in properties of the message. This section gives an overview of the
monitoring facilities provided by the server. For a list of monitor topics and a
description of the message properties for each topic, see Appendix C, Monitor
Messages, on page 315.
Monitoring Messages
You can monitor messages processed by a destination as they are sent, received,
or acknowledged. The $sys.monitor topic for monitoring messages has the
following format:
$sys.monitor.<D>.<E>.<destinationName>
Where D is the type of destination, E is the event you wish to monitor, and
destinationName is the name of the destination whose messages you wish to
monitor. Table 29 describes the possible values of D and E in message monitoring
topics.
message monitoring topic for all matching destinations. For example, you can
subscribe to $sys.monitor.T.r.> to monitor all messages received by all topics.
For performance reasons, you may want to avoid subscribing to too many
message monitoring topics. See Performance Implications of Monitor Topics on
page 219 for more information.
Monitor messages are like any topic messages, so you can have any number of
applications that subscribe to monitor messages. You can create different
applications that subscribe to different monitor topics, or you can create one
application that subscribes to all desired monitor topics. Your topic subscribers
can also use message selectors to filter the monitor messages so your application
receives only the messages it is interested in.
The TIBCO Enterprise Message Service server allows you to track incoming and
outgoing message volume, message size, and message statistics for the server
overall as well as for each producer, consumer, or route. You can configure the
type of statistics collected, the interval for computing averages, and amount of
detail for each type.
Statistic tracking can be set in the server’s configuration file, or you can change
the configuration dynamically using commands in the administration tool or by
creating your own application with the Java administration API.
Statistics can be viewed using the administration tool, or you can create your own
application that performs more advanced analysis of statistics using the Java
administration API.
This section details how to configure and view statistics using the configuration
files and administration tool commands. For more information about the Java
administration API, see the description of com.tibco.tibjms.admin in TIBCO
Enterprise Message Service Java API Reference.
The TIBCO Enterprise Message Service server tracks the number of incoming or
outgoing messages, but only messages sent or received by a producer, consumer,
or route are tracked. The server also sends system messages, but these are not
included in the number of messages.
However, the server can add a small amount of data to a message for internal use
by the server. This overhead is counted in the total message size, and you may
notice that some messages have a greater message size than expected.
The default interval for collecting overall server statistics is 1 second. You may
wish to view average system usage statistics over a larger interval. The
server_rate_interval configuration parameter controls the collection interval
for server statistics. The parameter can be set in the configuration file or
dynamically using the set server command. This parameter can only be set to
positive integers greater than zero.
Detailed Statistics
In some situations, the default statistic gathering may not be sufficient. For
example, if a topic subscriber subscribes to wildcard topics, the total statistics for
all topics that match the wildcard are kept. You may wish to get further detail in
this case and track the statistics for each actual topic the subscriber receives.
Collecting detailed statistics does consume memory, and it can have an adverse
affect on performance, if there are a large number of destinations for the type of
statistics you wish to gather. There are two parameters that allow you to control
resource consumption when collecting detailed statistics. First, you can control
the amount of time statistics are kept, and second you can set a maximum amount
of memory for detailed statistic gathering.
The statistics_cleanup_interval parameter controls how long detailed
statistics are kept. This parameter can be set either in the configuration file or
dynamically with the set server command. By default, statistics are kept for 15
seconds. For example, if there is a topic subscriber for the topic foo.*, and the
subscriber receives a message on topic foo.bar, if no new messages arrive for
topic foo.bar within 15 seconds, statistics for topic foo.bar are deleted for that
consumer. You can set this parameter to 0 to signify that all detailed statistics are
to be kept indefinitely. Of course, statistics for an object only exist as long as the
object itself exists. That is, if a message consumer terminates, all detailed statistics
for that consumer are deleted from memory.
Displaying Statistics
When statistic collecting is enabled, you can view statistics for producers,
consumers, routes, and destinations using the show stat command in the
administration tool.
The show stat command allows you to filter the statistics based on destination
name, user name, connection ID, or any combination of criteria. You can
optionally specify the total keyword to retrieve only the total statistics (this
suppresses the detailed output). You can also optionally specify the "wide"
keyword when displaying statistics for destinations or routes. This specifies that
inbound and outbound message statistics should be displayed on the same line
(the line can be 100 characters or more).
The following illustrates displaying statistics for a route where detailed statistic
tracking is enabled.
tcp://server1:7322> show stat route B
Inbound statistics for route 'B':
Total Count Rate/Second
Destination Msgs Size Msgs Size
<total> 189 37.9 Kb 10 2.0 Kb
Topic: dynamic.0 38 7.6 Kb 2 0.4 Kb
Topic: dynamic.1 38 7.6 Kb 2 0.4 Kb
Topic: dynamic.2 38 7.6 Kb 2 0.4 Kb
Topic: dynamic.3 38 7.6 Kb 2 0.4 Kb
Topic: dynamic.4 37 7.4 Kb 2 0.4 Kb
Outbound statistics for route 'B':
Total Count Rate/Second
Destination Msgs Size Msgs Size
<total> 9538 1.9 MB 10 2.1 Kb
Topic: dynamic.0 1909 394.9 Kb 2 0.4 Kb
Topic: dynamic.1 1908 394.7 Kb 2 0.4 Kb
Topic: dynamic.2 1907 394.5 Kb 2 0.4 Kb
Topic: dynamic.3 1907 394.5 Kb 2 0.4 Kb
Topic: dynamic.4 1907 394.5 Kb 2 0.5 Kb
See show stat on page 175 for more information and detailed syntax of the show
stat command.
Topics
In order to use TIBCO Enterprise Message Service with your applications, the
TIBCO Enterprise Message Service Server must be running. The server and the
clients work together to implement TIBCO Enterprise Message Service. The
server implements all types of message persistence; no messages are stored on the
client side.
where options are described in Table 30. The command options to tibemsd are
similar to the parameters you specify in tibemsd.conf, and the command
options override any value specified in the parameters. See Table 16 on page 106
for more information about configuration parameters and more information
about each parameter.
Option Description
-config <config file name> is the name of the main configuration file for
<config file name>
tibemsd server. Default is tibemsd.conf.
-trace <items> Specifies the trace items. These items are not stored in the
configuration file. The value has the same format as the value of
log_trace parameter specified with set server command of the
administration tool.
-ssl_trace Print the certificates loaded by the server and do more detailed
tracing of SSL-related situation.
-ft_active <active_url> URL of the active server. If this server can connect to the active
server, it will act as a backup server. If this server cannot connect to
the active server, it will become the active server.
Option Description
-ft_heartbeat<seconds> Heartbeat signal for the active server, in seconds. Default is 3.
Security Considerations
When the authorization property is set to false, every user is granted access to
the system. However, even when security is disabled, the user admin must use an
appropriate password in order to connect to the server.
The default setting for the admin password is no password. If the default has not
been changed, the user admin can connect without a password.
When security for tibemsd is enabled, the server requires a name and password
in order to connect. Only users listed in the configuration files can connect to the
server.
However, the administrator (admin) may choose to allow connections for users
without a name or a password, even when security is enabled. To allow these
connections, the administrator must create a user with the name anonymous and
no password.
Creating the user anonymous does not mean that anonymous has all permissions.
Individual topics and queues can still be secure, and the ability to use these
destinations (either sending or receiving) is controlled by the acl list of
permissions for those destinations. The user anonymous will only be able to access
non-secure destinations.
For more information on setting security, refer to secure on page 33, and Adding
the secure Property to the Topic on page 302.
In order to run the client-side application, you must implement the items on the
programmer’s check list, and then connect the client side to the server. There are
two methods to connect the client to the server: directly and with the JNDI
interface. This section describes the programmer’s checklist, security
considerations, and both methods of connecting to the server.
Programmer’s Checklist
In order to compile and run a client-side Java application using TIBCO Enterprise
Message Service, you must be sure:
1. Your application imports the following packages:
import javax.jms.*;
import javax.naming.*;
3. If SSL is used for communication, add the following files to the CLASSPATH:
tibcrypt.jar
jnet.jar
jcert.jar
jsse.jar
All necessary jar files are located in the java subdirectory of the TIBCO Enterprise
Message Service installation directory.
In most cases, client applications use the JNDI interface to look up connection
factories and Topic and Queue objects.
• session.createQueue(<queue name>);
• TopicSession.createTopic(<topic name>);
• QueueSession.createQueue(<queue name>);
Since dynamic topics and queues do not appear in the configuration files, you
cannot use the JNDI interface to look up these topics and queues.
For more information about connecting to the server without the JNDI interface,
refer to Connecting Directly to TIBCO Enterprise Message Service Server on
page 230.
• Topics and Queues or optional JNDI names, created using the administration
tool, the administration API, or in the configuration files.
• To obtain connection factory, topic, or queue objects, the client application
should use JNDI calls:
Topic topic =(javax.jms.Topic)jndiContext.lookup(<topic-name>);
Queue queue =(javax.jms.Queue)jndiContext.lookup(<queue-name>);
ConnectionFactory cf =
(javax.jms.ConnectionFactory)jndiContext.lookup(<connection-
factory-name>);
• If there are topics and queues with same names in the configuration files, the
client application must use context qualifiers:
Topic topic =
(javax.jms.Topic)jndiContext.lookup(“$topics:”+<topic-name>);
Queue queue =
(javax.jms.Queue)jndiContext.lookup(“$queues:”+<queue-name>);
Formerly, the syntax for topic and queue lookup was $topic. and $queue.
This syntax is supported for backward compatibility, but the new syntax is
preferred.
Using context qualifiers is not required if there are no topics and queues with
the same names in the configuration files.
The provider URL host:port value is one of the listen ports of TIBCO Enterprise
Message Service. There is no separate port defined for JNDI access.
Example
This section provides an example of accessing JMS administered objects when
using TIBCO Enterprise Message Service.
static final String providerContextFactory =
"com.tibco.tibjms.naming.TibjmsInitialContextFactory";
ConnectionFactory factory =
(javax.jms.ConnectionFactory)
jndiContext.lookup("ConnectionFactory");
TopicConnectionFactory topicFactory =
(javax.jms.TopicConnectionFactory)
jndiContext.lookup("TopicConnectionFactory");
QueueConnectionFactory queueFactory =
(javax.jms.QueueConnectionFactory)
jndiContext.lookup("QueueConnectionFactory");
If using full URL names, you can look up topics or queues like the following
example:
Topic topic = (javax.jms.Topic)jndiContext.lookup(
"tibjmsnaming://jmshost:7222/topic.sample");
Queue queue = (javax.jms.Queue)jndiContext.lookup(
"tibjmsnaming://jmshost:7222/queue.sample");
For further information on how to use JNDI access, refer to the tibjmsJNDI.java
example included with TIBCO Enterprise Message Service.
In this example, the port number specified for the Context.PROVIDER_URL is set
to the SSL listen port that was specified in the server configuration file
tibjsmd.conf. The value for TibjmsContext.SECURITY_PROTOCOL is set to ssl.
Finally, the value of TibjmsContext.ENABLE_VERIFY_HOST is set to "false" to turn
off server authentication. Because of this, no trusted certificates need to be
provided and the client will then not verify the server it is using for the JNDI
lookup against the server’s certificate.
Example
The following illustrates setting up the Context.PROVIDER_URL property with
the URLs of a primary EMS server on the machine named emshost and a backup
EMS server on the machine named backuphost.
env.put(Context.PROVIDER_URL, "tibjmsnaming://jmshost:7222,
tibjmsnaming://backuphost:7222");
If at any time the first EMS server fails, the JNDI provider will automatically
switch to the EMS server on the host backuphost for JNDI lookups. If emshost is
repaired and restarted, it then becomes the backup EMS server.
Secure Sockets Layer (SSL) is a protocol for transmitting encrypted data over the
Internet or an internal network. SSL works by using public and private key to
encrypt data that is transferred over the SSL connection. Most web browsers
support SSL, and many Web sites and Java applications use the protocol to obtain
confidential user information, such as credit card numbers.
The SSL protocol is fairly complex and this chapter is not intended as a complete
description of SSL. This chapter describes how to configure SSL in the TIBCO
Enterprise Message Service server and in client applications communicating with
the server. For a more complete description of SSL, refer to the SSL specification at
http://wp.netscape.com/eng/ssl3/.
Topics
TIBCO Enterprise Message Service supports the Secure Sockets Layer (SSL)
protocol. SSL uses public and private keys to encrypt data over a network
connection in order to secure communication between client and server. SSL is
supported in all possible communication paths between components. This
includes communication between:
• a Java client and the tibemsd server
• a C or C# client and the tibemsd server
• the tibemsadmin tool and the tibemsd server
• routed servers
• fault-tolerant servers
The TIBCO Enterprise Message Service server and the C and C# client libraries
use OpenSSL for SSL support. You can find out more about OpenSSL at
www.openssl.org.
TIBCO Enterprise Message Service Java clients can use either JSSE (from Sun
JavaSoft) or the SSL implementation from Entrust. TIBCO Enterprise Message
Service includes JSSE; if you wish to use Entrust, you must purchase and install
the Entrust SSL Version 6.1 implementation separately (version 6.0 is not
supported).
Digital Certificates
Digital certificates are files used by SSL to verify the identities of servers and
clients. A digital certificate is issued by a trusted third-party certificate authority.
Each user and server on the network requires their own digital certificate to
ensure that a request is sent from and received by the correct party. A digital
certificate is issued for a particular public key owned by a user or server, and the
combination of the public key and the private key provides a unique identity to
the owner of the digital certificate.
A digital certificate typically includes a variety of information, such as the
following:
• The name of the subject (owner) and other information required to confirm
the unique identity of the subject. This includes the URL of the web server
using the digital certificate, or an email address.
• The subject’s public key.
• The name of the certificate authority that issued the digital certificate.
• A serial number.
• The length of time the certificate will remain valid. This is defined by a start
date and an end date.
The most widely used standard for digital certificates is ITU-T X.509. Digital
certificates can be read or written by any application complying with the X.509
standard. TIBCO Enterprise Message Service supports using digital certificates
that comply with the X.509 version 3 (X.509v3). This includes certificates from
most certificate authorities, such as Verisign or Entrust.
Typically each application has a pair of different but related keys. The public key
is distributed to anyone, and the private key is kept secret by the owner of the key.
The two keys are used together to encrypt and decrypt messages sent over the
network.
TIBCO Enterprise Message Service supports the following private key formats:
• PEM
• DER
• PKCS#8
• PKCS#12
TIBCO Enterprise Message Service uses OpenSSL for generating and maintaining
keys. The server does not support Java KeyStore or Entrust Store formats.
The Secure Sockets Layer (SSL) protocol involves a handshake between the client
(the initiator) and the server (the target). SSL can be used when clients
communicate with EMS servers or when EMS servers communicate with each
other. Within this chapter, the term client is used to signify a client or server that
initiates SSL communication with a server.
SSL relies on digital certificates on the client and server for authentication and
encryption. See Digital Certificates on page 243 for more information on digital
certificates.
Figure 15 illustrates the SSL protocol between the client and server.
Client/Initiator Server/Target
1. Client initiates
2. Server negotiates version and cipher suite
3. Certificate (optional)
4. Certificate request (optional)
5. Server done with negotiation
6. Certificate (optional)
7. Client generates key
8. Certificate verify (optional)
9. Enter encrypted mode
10. Finished
11. Change to encrypted mode
12. Finished
When an SSL connection is requested by a client, the client and the server perform
the following protocol:
1. The client sends an initiating message to the server. This message contains the
highest version of SSL and the list of cipher suites the client supports. See
Specifying Cipher Suites on page 258 for more information about cipher
suites.
2. The server chooses the highest version of SSL and the best cipher suite that
both the client and the server support. The server sends this information to the
client.
3. Optionally, the server sends its digital certificate or certificate chain. This is
only done if the client requires that the server authenticate itself.
4. Optionally, the server sends a request to the client for the client’s digital
certificate. This is only done if the server requires that the client authenticate
itself.
5. The server then informs the client that it has completed the initial negotiation.
6. Optionally, the client sends the server its digital certificate or certificate chain.
This is only done if the server requires that the client authenticate itself.
7. The client then generates information used to create a key to use for
symmetric encryption. This key is used to encrypt and decrypt data that is
exchanged between the client and the server. When using some cipher suites,
this key is then sent to the server.
8. Optionally, the client sends a digital signature to the server. The server
decrypts this signature using the client’s public key. If the server is successful
in decrypting the signature, the server authenticates the client. This is only
done if the server requires that the client authenticate itself.
9. The client informs the server to change to encrypted mode.
10. The client informs the server that it is ready for secure communication to
begin.
11. The server informs the client to change to encrypted mode.
12. The server informs the client that it is ready for secure communication to
begin.
When establishing an SSL connection, several of the steps described above are
optional. The client and the server can specify SSL configuration parameters to
control the connection steps. See Configuring SSL in the Server on page 252 and
Configuring SSL in EMS Clients on page 253 for more information about the SSL
configuration parameters for clients and servers.
Encryption keys can be renegotiated once the session begins, if parameters are set
to renegotiate keys after a certain amount of time or after a certain amount of data
is exchanged. See Renegotiating the Session Key on page 250 for more
information about renegotiating the encryption key for the session.
Server When SSL connections can be accepted by a server, any client may request server
Parameters authentication. Therefore, the server must specify the ssl_server_identity and
ssl_password (if the password is not part of the server’s digital certificate)
parameters. See Table 16 on page 106 for more information about specifying these
parameters.
Server The TIBCO Enterprise Message Service server must specify true for the
Parameters ssl_require_client_cert parameter to require that clients authenticate
themselves. The ssl_server_trusted parameter specifies the list of certificate
authorities the server will trust. See Table 16 on page 106 for more information
about specifying configuration parameters.
Server The TIBCO Enterprise Message Service server must specify true for the
Parameters ssl_use_cert_username parameter in tibemsd.conf to require that the
username from the client’s digital certificate is used when logging in. See Table 16
on page 106 for more information about specifying configuration parameters.
Server The TIBCO Enterprise Message Service server must specify a username for the
Parameters ssl_cert_user_speccname parameter in tibemsd.conf to require that a user
logging in with that username will be authenticated using the username from the
client’s digital certificate. See Table 16 on page 106 for more information about
specifying configuration parameters.
Once a SSL connection is established, the client and the server agree on a
symmetric key for encrypting and decrypting data exchanged by either side. This
key normally lasts for the lifetime of the session, but the server can specify that
the key should be renegotiated (that is, changed based on certain criteria). A
server can specify that keys for sessions should be renegotiated based on elapsed
time or amount of data exchanged for the session.
When a key is renegotiated, the session is re-established, and this can have an
adverse effect on overall system performance. You should set renegotiation
parameters carefully to ensure that renegotiation only occurs when it is required.
See the description of the ssl_renegotiate_interval and
ssl_renegotiate_size parameters in Table 16 on page 106 for more information
about setting the renegotiation criteria.
For all parameters that specify the identity (digital certificate), private key, issuer
(certificate chain), or trusted list of certificate authorities, valid files must be
specified. Not all types of files are supported for clients and servers. The
description of the parameter details which formats are supported.
Table 32 lists the valid types of files.
Extension Description
.pem PEM encoded certificates and keys (allows the certificate and
private key to be stored together in the same file)
To use SSL, each instance of tibemsd must have a digital certificate and a private
key. The server can optionally require a certificate chain or trusted certificates.
You set the server to listen for SSL connections from clients by using the listen
parameter in tibemsd.conf. To specify that a port accept SSL connections,
specify the SSL protocol in the listen parameter as follows:
listen = ssl://localhost:7243
SSL Parameters
There are a number of SSL parameters that can be set in tibemsd.conf. However,
the only required parameter is ssl_server_identity. If the server’s certificate
does not have a private key contained in the certificate, then ssl_server_key
must also be specified.
Table 16 on page 106 provides a complete description of the SSL parameters that
can be set in tibemsd.conf.
For clients to use an SSL connection to the TIBCO Enterprise Message Service
server, the client must have the following JAR files included in the CLASSPATH:
• jsse.jar
• jnet.jar
• jcert.jar
• tibcrypt.jar
These files are included with TIBCO Enterprise Message Service, and will also be
included with JDK 1.4. If you are using JDK 1.3, JSSE is an add-on package, and
you must make sure to include the proper files in the CLASSPATH.
If you wish to use Entrust on the EMS client, you must separately purchase and
install the Entrust Version 6.1 libraries. If you use the Entrust libraries, you must
include them in the CLASSPATH before the JSSE JAR files. To use Entrust Version
6.1 with JDK 1.4.x, the unlimited strength policy JAR files have to be downloaded
form Sun's website and installed into your local installation of JDK 1.4.x. Please
refer to the Entrust Version 6.1 documentation for details on how to configure the
CLASSPATH and how to install unlimited strength policy files.
The format of the client digital certificate and private key file depends greatly on
the type of SSL vendor used by the client. JSSE and Entrust support different
formats and combinations of formats. Refer to your SSL vendor’s documentation
for more information about the formats supported.
Configuring SSL
A Java client connecting to a TIBCO Enterprise Message Service server can
configure SSL characteristics in three ways:
• Using JNDI to lookup a ConnectionFactory object that specifies SSL
connectivity. That is, the server URL in the connection factory must use the
SSL protocol, and the SSL parameters must be specified.
• Setting global SSL parameters using the com.tibco.tibjms.TibjmsSSL class.
See TIBCO Enterprise Message Service Java API Reference included with TIBCO
Enterprise Message Service for more information about using that class.
• Using a direct constructor of TIBCO Enterprise Message Service connection
factory classes (TibjmsTopicConnectionFactory and/or
TibjmsQueueConnectionFactory).
Configuring a ConnectionFactory
You can configure a ConnectionFactory using the administration tool or the Java
Administration API provided by TIBCO Enterprise Message Service. See
Chapter 8, Using the Administration Tool, on page 145 for more information
about using this tool and configuring ConnectionFactories.
When configuring a ConnectionFactory, you can specify several parameters for
SSL. These parameters are similar to the parameters that you specify when
configuring the TIBCO Enterprise Message Service server in tibemsd.conf.
When configuring a connection factory, any file names specified in the SSL
parameters are not verified. At the time the factory is retrieved using JNDI, the
TIBCO Enterprise Message Service server attempts to resolve any file references.
If the files do not match the supported types or the files are not found, the JNDI
lookup fails with a ConfigurationException.
Table 33 describes the parameters you can set in the ConnectionFactory and gives
a pointer for more information about each parameter. See the description of the
equivalent parameter in tibemsd.conf for more information about each
parameter.
Parameter Description
ssl_verify_host Specifies whether the client should verify
the server’s certificate. The values for this
parameter are enabled or disabled. By
default, this parameter is enabled,
signifying the client should verify the
server’s certificate.
When this parameter is set to disabled,
the client establishes secure
communication with the server, but does
not verify the server’s identity.
Parameter Description
ssl_ciphers Specifies the cipher suites used by the
client, each suite in the list is separated by
a colon (:). This parameter can use the
OpenSSL name for cipher suites or the
longer, more descriptive names.
See Specifying Cipher Suites on page 258
for more information about the cipher
suites available in TIBCO Enterprise
Message Service and the OpenSSL names
and longer names for the cipher suites.
On the TIBCO Enterprise Message Service server, the cipher suite is specified by
the ssl_server_ciphers configuration parameter in tibemsd.conf. For clients
connecting with a ConnectionFactory, the cipher suite is specified by the
ssl_ciphers ConnectionFactory parameter.
See Chapter 7, Using the Configuration Files, on page 105 for more information
about server configuration files. See Configuring SSL in EMS Clients on page 253
for more information about specifying SSL parameters within a
ConnectionFactory.
Qualifier Description
+ Add the cipher to the list of ciphers.
Qualifier Description
all All ciphers from the list. You can use this keyword to add or
remove all ciphers.
At least one cipher suite must be present or the SSL
connection fails to initialize. So, if you use -all, you should
then add the desired ciphers to the list.
Qualifier Description
+ Moves the cipher to the end of the list.
- Remove the cipher from the list of ciphers. When this option
is used, the cipher can be added later on in the list of ciphers.
all All ciphers from the list. You can use this keyword to add or
remove all ciphers.
At least one cipher suite must be present or the SSL
connection fails to initialize. So, after using -all, you should
add at least one cipher to the list.
ssl_server_ciphers = -all:RC4-MD5:DES-CBC-SHA:DES-CBC3-SHA
The following example illustrates removing RC4-MD5 from the list, then adding all
other ciphers:
ssl_server_ciphers = !RC4-MD5:all
Suite Name
(OpenSSL Name) Export Key Exch Auth Encrypt Key Size MAC
SSL_RSA_WITH_RC4_128_MD5
(RC4-MD5)
SSL_RSA_WITH_RC4_128_SHA
(RC4-SHA)
SSL_RSA_WITH_DES_CBC_SHA
(DES-CBC-SHA)
SSL_RSA_WITH_3DES_EDE_CBC_SHA
(DES-CBC3-SHA)
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
(EXP-RC2-CBC-MD5)
Suite Name
(OpenSSL Name) Export Key Exch Auth Encrypt Key Size MAC
SSL_RSA_EXPORT_WITH_RC4_40_MD5
(EXP-RC4-MD5)
SSL_RSA_EXPORT_WITH_DES_40_CBC_SHA
(EXP-DES-CBC-SHA)
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
(EDH-DSS-DES-CBC3-SHA)
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
(EDH-RSA-DES-CBC3-SHA)
SSL_DHE_DSS_WITH_DES_CBC_SHA
(EDH-DSS-DES-CBC-SHA)
SSL_DHE_RSA_WITH_DES_CBC_SHA
(EDH-RSA-DES-CBC-SHA)
SSL_DHE_DSS_EXPORT_WITH_DES_40_CBC_SHA
(EXP-EDH-DSS-DES-CBC-SHA)
SSL_DHE_RSA_EXPORT_WITH_DES_40_CBC_SHA
(EXP-EDH-RSA-DES-CBC-SHA)
While the SSL protocol provides message security and integrity, the connection
handshake and bulk message encryption can require significant machine
resources. To reduce this overhead, you can deploy a third-party SSL hardware
accelerator. The TIBCO Enterprise Message Service server supports external
(rack-mount) hardware accelerators. SSL accelerators are capable of off-loading
the main CPU from asymmetric public/private key negotiations as well as well as
secret key bulk message encryption and decryption.
Ingrian Accelerator
Ingrian provides a variety of accelerator products, such as the Ingrian i100, i140,
i210, and so on. These products are external hardware accelerators that fit into
standard rack mount space. The Ingrian Accelerator is placed on the network
between the client and the server and off loads all SSL functionality from the
server. The clients use SSL to communicate with the server by connecting to an
SSL port on the Ingrian Accelerator. The Ingrian Accelerator completely performs
the SSL handshake and passes messages to the server over TCP. Figure 16
illustrates the operation of the Ingrian Accelerator.
SSL TCP
Client Ingrian Accelerator Server
The Ingrian Accelerator supports several protocols. To be used with the TIBCO
Enterprise Message Service server however, the accelerator must be configured to
use the “SSL Any” protocol to communicate with clients and the “Any” protocol
to communicate with the server. See the documentation for the specific Ingrian
Accelerator you are using for information about how to configure forwarding
rules.
The Ingrian Accelerator can also be configured to extract the user name from the
client certificate and pass it to the server for user authentication. If you require
this functionality, please contact TIBCO for instructions about how to enable this
feature in the Ingrian Accelerator and the TIBCO Enterprise Message Service
server.
Because the Ingrian Accelerator off loads the server of all SSL functionality, none
of the parameters in tibemsd.conf for configuring SSL in the server are used.
When the Ingrian Accelerator is deployed, the TIBCO Enterprise Message Service
server should be configured to use standard TCP communication.
Topics
You can configure TIBCO Enterprise Message Service servers as primary and
backup servers to provide fault tolerance for your environment. The primary and
backup servers act as a pair, with the primary server accepting client connections
and performing the work of handling messages, and the secondary server acting
as a backup in case of failure. The primary and backup servers must both have
access to a shared state. This shared state can be implemented as shared storage
devices or through other mechanisms, such as replication. This shared state
allows the backup server to take over any active connections and properly handle
persistent messages.
Figure 17 illustrates a fault-tolerant configuration of TIBCO Enterprise Message
Service.
Shared
State
Primary Backup
Server Server
When the primary server fails, the backup server resumes operation and becomes
the primary server. Before becoming the new primary server, the backup server
re-reads all of its configuration files. If the two servers share configuration files,
then administrative changes to the old primary carry over to the new primary.
Shared State
The primary server and backup server must share the same state. The state of the
servers includes:
• persisted messages for queues and topics
• information on the primary server’s client connections
• metadata regarding data delivery
During normal operation of the primary server, all persisted messages are stored
then delivered. During a failover, all shared state information that exists is
retrieved by the backup server.
Caution: When replication is used, however, the backup server may read the state
from a separate location, ignoring the primary server’s lock on the state.
Storage Files
The location of the storage files is defined by the store parameter in the main
configuration file:
store = <storage-directory>
• sync-msgs.db
• async-msgs.db
The meta-information file stores information required by the server, but stores no
messages.
The two message-storage files are used for persistent storage of messages for
queues and topics, depending on whether the queue or topic is defined as
failsafe and requires synchronous I/O.
• If the queue or topic is not defined as failsafe, messages for the queue or topic
are stored in async-msgs.db file.
For more information on the failsafe property, refer to failsafe on page 33. See
Chapter 7, Using the Configuration Files, on page 105 for more information about
editing the main configuration file.
Controlling Storage
There are three other parameters for controlling storage:
• store_minimum — Preallocates storage space for TIBCO Enterprise Message
Service. If store_truncate is enabled, the storage is not truncated below the
minimum size specified in this parameter. You can specify units in this
parameter in MB, KB, or GB. Specifying 0 for this parameter signifies that
there should be no minimum amount of storage space.
• store_crc — Specifies whether crc checksum data are checked when reading
data from storage.
• store_truncate — Specifies whether TIBCO Enterprise Message Service
should periodically attempt to truncate the storage files. When set to enabled,
the storage files may be truncated, but not below the size specified in the
store_minimum parameter.
The primary server should set the ft_active parameter to the URL of the backup
server. This allows the primary and backup servers to exchange roles in the event
of a failure.
You can set the configuration parameters in the main configuration file or on the
command line when starting the servers.
See Table 16 on page 106 for a description of configuration parameters for SSL
communication between fault-tolerant servers. See Chapter 12, Using the SSL
Protocol, on page 241 for more information on SSL.
Reconnect Timeout
When a backup server assumes the role of the primary server during failover,
client connections can reconnect to the backup server and continue with
processing their current message state. The backup server reads the clients’ state
from the shared state, and the server can be configured to clean up any state
information for clients that have not reconnected after a certain period of time.
The ft_reconnect_timeout configuration parameter specifies the amount of
time, in seconds, a backup server waits for clients to reconnect before their state is
removed from the shared state.
The default value of this parameter is 60.
The URLs in the list are tried in order. If a connection to the first URL fails, the
next URL is used to attempt a reconnection. The connections in the list are
attempted in sequence (wrapping to the start of the list, if the first connection was
not the failed connection) until all URLs have been tried. If no connection is
established after all URLs have been tried, the connection fails.
Connection Constructor in C
C clients list the primary and backup server URLs in the brokerURL argument to
a connection constructor. For example:
tibjmsQueueConnection_Create(&qc,"tcp://server0:7222,
tcp://server1:7344",NULL,"admin",NULL);
Failover
Detection
A backup server detects a failure of the primary in either of two ways:
• Heartbeat Failure—The primary server sends heartbeat messages to the backup
server to indicate that it is still operating. When a network failure stops the
servers from communicating with each other, the backup server detects the
interruption in the steady stream of heartbeats. For details, see Heartbeat
Parameters on page 275.
• Connection Failure—The backup server can detect the failure of its TCP
connection with the primary server. When the primary process or its host
computer terminates unexpectedly, the backup server detects the broken
connection.
Response
When a backup server (B) detects the failure of the primary server (A), then B
attempts to assume the role of primary server. First, B obtains the lock on the
current shared state. When B can access this information, it becomes the new
primary server.
Role Reversal When B becomes the new primary server, A can restart as a backup server, so that
the two servers exchange roles.
Client Transfer Clients of A that are configured to failover to backup server B automatically
transfer B when it becomes the new primary server. B reads the client’s current
state from the shared storage to deliver any persistent messages to the client.
Client Notification Client applications can receive notification when failover occurs. To receive
notification, the client must set the system property
tibco.tibjms.ft.switch.exception to any value. When this system property
is defined, the application’s ExceptionListener receives a callback on failover.
For more information, see the description of the class com.tibco.tibjms.Tibjms
in TIBCO Enterprise Message Service Java API Reference.
Lock Unavailable If B cannot obtain the lock immediately, it repeatedly attempts to obtain the lock.
The resolution of the situation depends on the status of the TCP connection
between the servers:
Message Redelivery
When a failure occurs, messages that have the delivery mode set to PERSISTENT
that were not successfully acknowledged before the failure are redelivered.
Messages whose delivery mode is not set to PERSISTENT may be recovered, but
they are not guaranteed to be recovered.
Any messages that have been successfully acknowledged or committed are not
redelivered, in compliance with the JMS 1.1 specification. Also, messages that
have PERSISTENT delivery modes and have a failsafe destination are guaranteed
to not be lost during a failure.
All topic subscribers continue normal operation after a failover.
Queues
For queue receivers, any messages that have been sent to multiple receivers, but
have not been acknowledged before the failover, may be sent to other receivers
immediately after the failover.
A receiver trying to acknowledge a message after a failover may receive the
javax.jms.IllegalStateException. This exception signifies that the attempted
acknowledgement is for a message that has already been sent to another queue
receiver. This exception only occurs in this scenario or if the Session or
Connection have been closed. This exception cannot occur if there is only one
receiver at the time of a failover, but it may occur for exclusive queues if more
than one receiver was started for that queue.
Acknowledged messages are never redelivered (in compliance with the JMS
specification). The case described above occurs when the application cannot
acknowledge a message because of a failover.
Transacted Sessions
Sessions with active transactions cannot commit the transaction after a failover to
a backup server. Transactions are active when at least one message has been sent
or received by a transacted session and the session has not issued a call to
Session.commit().
After a failover, when a client attempts to call the Session.commit() method, the
application will throw a javax.jms.TransactionRolledBackException. Clients
that use transactions should account for this possibility and handle the exception
in the event of a failover.
Once the transaction is rolled back, the client should resend any messages sent
during a transaction. All messages delivered to the session that rolled back the
transaction are automatically redelivered.
Heartbeat Parameters
When the primary server heartbeat fails, there is an activation interval (time
elapsed after the last heartbeat received) and then the backup server retrieves
information and takes over.
The heartbeat interval default is set at three seconds, and the activation interval
default is set at ten seconds. The activation interval must be set to at least twice
the heartbeat interval. The heartbeat and activation intervals are specified in
seconds and represent how often the servers will send heartbeats and the interval
for which activation will occur in the absence of any heartbeat. These intervals are
set in the administration tool or in the configuration file.
See Table 16 on page 106 for more information about the heartbeat activation and
interval configuration parameters.
Topics
Overview of Routing
TIBCO Enterprise Message Service servers can route messages to other servers.
• Topic messages can travel one hop or multiple hops (from the first server).
• Queue messages can travel only one hop to the home queue, and one hop from
the home queue.
You can define routes using an administrative interface (that is, configuration
files, tibemsadmin, or administration API).
Route
Basic Operation
• Each route connects two TIBCO Enterprise Message Service servers.
• Each route forwards messages between corresponding destinations (that is,
destinations of the same type, with the same name) on its two servers.
• Routes are bidirectional; that is, each server in the pair forwards messages
along the route to the other server.
For example, the compact view at the top of Figure 18 denotes a route between
two servers, A and B. The exploded view beneath it illustrates the behavior of the
route. Each server has a global queue named Q1 and a global topic named T1;
these destinations correspond, so the route forwards messages between them. In
addition, server A has a global topic T2, which does not correspond to any topic
on server B. The route does not forward messages from T2.
Server: A Server: B
Queue: Q1 Queue: Q1
Topic: T1 Topic: T1
Topic: T2
Global Destinations
Routes forward messages only between global destinations—that is, topics and
queues for which the global property is true (on both servers). This rule
overrides the inherent bidirectionality of routes. (For more information about
destination properties, See Destination Properties on page 32.)
Figure 19 illustrates a route between two servers, C and D, with corresponding
destinations Q1 and Q2. Notice that Q1 is global on both C and D, so both servers
forward messages across the route to the corresponding destination. However, Q2
is not global on C, neither C nor D forward Q2 messages to one another.
Server: C Server: D
Q1 Q1
global=true global=true
Q2
Q2
global=true
Note that the configuration on the right is illegal only in a multi-hop zone; it is
legal in a one-hop zone. For further information, see Zone on page 282.
A B C P Q R
D E S T
Zone
Zones restrict the behavior of routes, so you can configure complex routing paths.
Zones affect topic messages, but not queue messages.
Basic Operation
A zone is a named set of routes. Every route belongs to a zone. A zone affects the
forwarding behavior of its routes:
• In a multi-hop (mhop) zone, topic messages travel along all applicable routes
to all servers connected by routes within the zone.
• In a one-hop (1hop) zone, topic messages travel only one hop (from the first
server).
• Queue messages travel only one hop, even within multi-hop zones.
A B C
Zone: Z1
mhop
D E
The goal is to forward messages from B1 and B2 to both M and R. The routing
graph seems to contain a cycle—the path from B1 to M to B2 to R duplicates the
route from B1 to R. However, since these routes belong to the one-hop zone Z2, it
is impossible for messages to travel the longer path. Instead, this limitation results
in the desired result—forwarding from B1 to M and R, and from B2 to M and R.
B1 B2
Zone: Z2
1hop
M R
Overlapping Zones
A server can have routes that belong to several zones. When zones overlap at a
server, the routing behavior within each zone does not limit routing in other
zones. That is, when a forwarded message reaches a server with routes in several
zones, the message crosses zone boundaries, and its hop count is reset to zero.
Figure 23 on page 284 illustrates an enterprise with one-hop zones connecting all
the servers in each of several cities in a fully-connected graph. Zone TK connects
all the servers in Tokyo; zone NY connects all the servers in New York; zone PA
connects all the servers in Paris. In addition, the multi-hop zone WO connects one
server in each city.
When a client of server TK3 produces a message, it travels one hop to each of the
other Tokyo servers. When the message reaches TK1, it crosses into zone WO. TK1
forwards the message to NY1, which in turn forwards it to PA1. When the
message reaches NY1, it crosses into zone NY (with hop count reset to zero); NY1
forwards it one hop to each of the other New York servers. Similarly, when the
message reaches PA1, it crosses into zone PA (with hop count reset to zero); PA1
forwards it one hop to each of the other Paris servers.
NY1 NY2
Zone: NY
NY4 1hop NY3
A route connects two servers. You may configure a route at either or both of the
servers. When you configure a route at only one server, this asymmetry results in
two perspectives on the route:
• A route is active from the perspective of the server where it is configured. This
server actively initiates the connection to the other server, so we refer to it as
the active server, or initiating server.
• A route is passive from the perspective of the other server. This server
passively accepts connection requests from the active server, so we refer to it
as the passive server.
A server can have both active and passive routes. That is, you can configure
server S to initiate routes, and also configure other servers to initiate routes to S.
Both of two servers can configure an active route one to the other. This
arrangement is called an active-active configuration. For example, server A specifies
a route to server B, and B specifies a route to A. Either server can attempt to
initiate the connection. This configuration results in only one connection; it does
not result in redundant routes.
You can specify and modify the properties of an active route, but not those of a
passive route. That is, properties of routes are associated with the server where
the route is configured, and which initiates the connection.
Note that defining a route specifies a zone as well (either implicitly or explicitly).
The first route in the zone defines the type of the route; subsequent routes in the
same zone must have the same zone type (otherwise, the server reports an error).
You can create routes using the administration tool (see Chapter 8 on page 145), or
the administration API (see com.tibco.tibjms.admin.RouteInfo in TIBCO
Enterprise Message Service Java API Reference).
Syntax To create a route using the administration tool, first connect to one of the servers,
then use the create route command with the following syntax:
create route <name> url=<URL> zone_name=<zone_name> zone_type=1hop|mhop <properties>
• <name> is the name of the passive server; it also becomes the name of the route.
• <URL> specifies the passive server by its URL—including protocol and port.
If your environment is configured for fault tolerance, the URL can be a
comma-separated list of URLs denoting fault-tolerant servers. For more
information about fault tolerance, see Chapter 13, Making the Server
Fault-Tolerant, on page 265.
• <zone_name> specifies that the route belongs to the routing zone with this
name. When absent, the default value is default_mhop_zone (this default
yields backward compatibility with configurations from releases earlier than
4.0.0).
• The zone type is either 1hop or mhop. When omitted, the default value is mhop.
• <properties> is a space-separated list of properties for the route. Each property
has the syntax <prop_name>=<value>.
For gating properties that control the flow of topics along the route, see
Selectors for Routing Topic Messages on page 293.
For properties that configure the Secure Sockets Layer (SSL) protocol for the
route, see Routing and SSL on page 287.
Example For example, these commands on server A would create routes to servers B and C.
The route to B belongs to the one-hop zone Z1. The route to C belongs to the
multi-hop zone ZM.
create route B url=tcp://B:7454 zone_name=Z1 zone_type=1hop
create route C url=tcp://C:7455 zone_name=ZM zone_type=mhop
Show Routes You can display these routes using the show routes command in the
administration tool:
show routes
Route T ConnID URL Zone T
B A 3 tcp://B:7454 Z1 1
C A - tcp://C:7455 ZM m
Example
• When a server initiates an SSL connection, it sends the route’s SSL parameters
to identify and authenticate itself to the passive server. You can specify these
parameters when creating the route, or you can specify them in the route
configuration file, routes.conf.
Table 37 lists the parameters that you can specify in the routes.conf
configuration file, or on the command line when creating a route. The parameters
for configuring SSL between routed servers are similar to the parameters used to
configure SSL between server and clients; see Chapter 12, Using the SSL Protocol,
on page 241.
Parameter Description
ssl_identity The server’s digital certificate in PEM, DER, or
PKCS#12 format. You can copy the digital
certificate into the specification for this parameter,
or you can specify the path to a file that contains
the certificate in one of the supported formats.
For more information, see File Names for
Certificates and Keys on page 251.
Parameter Description
ssl_password Private key or password for private keys.
You can set passwords using the tibemsadmin
tool. When passwords are set with this tool, the
password is obfuscated in the configuration file.
For more information, see Chapter 8, Using the
Administration Tool, on page 145.
Parameter Description
ssl_verify_hostname Specifies whether the server must verify the name
in the CN field of the other server’s certificate.
The values for this parameter are enabled and
disabled.
A server forwards topic messages along routes only when the global property is
defined for the topic; see addprop topic on page 151 and create topic on
page 154.
Topic messages can traverse multiple hops.
When a route becomes disconnected (for example, because of network problems),
the forwarding server stores topic messages. When the route reconnects, the
server forwards the stored messages.
Zone: Z
A mhop M B
Client Client
Producer Subscriber
T1 T1
Subscriber Client If the client of server B creates a non-durable subscriber to T1, then if the client
Exit process exits, the servers delete the entire sequence of internal subscribers. When
the client restarts, it generates a new sequence of subscribers; meanwhile, the
client might have missed messages.
If the client of server B creates a durable subscriber to T1, then if the client process
exits, the entire sequence of internal subscribers remains intact; messages
continue to flow through the servers in store-and-forward fashion. When the
client restarts, it can consume all the messages that B has been storing in the
interim.
Server Failure In an active-active route between servers B and M, if B fails, then M retains its
internal subscriber and continues to store messages for clients of B. When B
reconnects, M forwards the stored messages.
In an active-passive route configured on B, if B fails, then M removes its internal
subscriber and does not store messages for clients of B—potentially resulting in a
gap in the message stream. When B reconnects, M creates a new internal
subscriber and resumes forwarding messages.
maxbytes Combining durable subscribers with routes creates a potential demand for
storage—especially in failure situations. For example, if server B fails, then server
M stores messages until B resumes. We recommend that you set the maxbytes
property of the topic (T1) on each server, to prevent unlimited storage growth
(which could further disrupt operation).
Example Figure 25 illustrates an enterprise with a central server for processing customer
orders, and separate regional servers for billing those orders. For optimal use of
network capacity, we configure topic selectors so that each regional server gets
only those orders related to customers within its region.
Incoming Orders
Specifying Specify message selectors for global topics as properties of routes. You can define
Selectors these properties in two ways:
• Define selectors when creating the route (either in routes.conf, or with the
administrator command create route).
Syntax The message selector properties have the same syntax whether they appear in a
command or in a configuration file:
incoming_topic=topicName selector="messageSelector"
outgoing_topic=topicName selector="messageSelector"
The terms incoming and outgoing refer to the perspective of the active server—
where the route is defined.
topicName is the name of a global topic.
messageSelector is a message selector string. For detailed information about message
selector syntax, see the documentation for class Message in TIBCO Enterprise
Message Service Java API Reference.
Example Syntax In the example of Figure 25, an administrator might configure these routes on the
central order server:
setprop route Canada outgoing_topic="orders" selector="country=’Canada’"
setprop route Mexico outgoing_topic="orders" selector "country=’Mexico’"
setprop route USA outgoing_topic="orders" selector="country=’USA’"
Routed Queues
The left side of Figure 26 depicts an enterprise with three servers—P, R and S—
connected by routes. The remainder of Figure 24 illustrates the mechanisms that
routes queue messages among servers (center) and their clients (right side).
Server: P J Producer
Q1
P Q1@R global
- store and fwd to R
- proxy rcvr K Consumer
Q1
Server: R L Producer
Q1
R Q1 global
- home queue M Consumer
Q1
Server: S
S
Q1@R global
- proxy rcvr N Consumer
Q1
Owner & Home Server R defines a global queue named Q1. R is the owner of Q1.
Servers P and S define routed queues Q1@R. This designation indicates that these
queues depend upon and reflect their home queue (that is, Q1 on server R). Notice
that the designation Q1@P is only for the purpose of configuration; clients of P
refer to the routed queue as Q1.
Producers From the perspective of producer clients, a routed queue stores messages and
forwards them to the home queue. For example, when J sends a message to Q1 on
server P, P forwards it to the queue owner, R, which delivers it to Q1 (the home
queue).
The message is not available for consumers until it reaches the home queue. That
is, client K cannot consume the message directly from server P.
If server R fails, or the route connection from P to R fails, P continues to store
messages from K in its queue. When P and R resume communication, P delivers
the stored messages to Q1 on R.
Consumers From the perspective of consumer clients, a routed queue acts as a proxy receiver.
For example, when L sends a message to Q1 on server R, Q1 on P can receive it
from R on behalf of K, and immediately gives it to K.
If server P fails, or the route connection from P to R fails, K cannot receive
messages from Q1 until the servers resume communication. Meanwhile, M and N
continue to receive messages from Q1. When P and R resume communication, K
can again receive messages through Q1 on P.
Configuration You must explicitly configure each routed queue in queues.conf—clients cannot
create routed queues dynamically.
You may use the administration tool or API to configure routed queues; see
addprop queue on page 151 and create queue on page 153.
To configure a routed queue, specify the queue name and the server name of the
queue owner; for example, on server P, configure:
Q1@R global
It is legal to use this notation even for the home queue. The queue owner
recognizes its own name, and ignores the location designation (@R).
Browsing Queue browsers cannot examine routed queues. That is, you can create a browser
only on the server that owns the home queue.
A B
authorization=enabled authorization=disabled
Q2@B Q2
In Figure 27, servers A and B both configure active routes to one another.
• Because A enables authorization, A must configure a user named B, and B
must configure a matching username and password to identify itself to A.
• However, because B disables authorization, A need not identify itself to B, and
B need not configure a user named A.
ACL
When routing a secure topic or queue, servers consult the ACL specification
before forwarding each message. The servers must grant one another appropriate
permissions to send, receive, publish or subscribe.
For example, in Figure 27, Q2 messages flow from A to B if and only if server A
grants receive permission to user B for Q2, and server B grants send permission to
user A on Q2.
Topics
The sample files were designed to allow you to run TIBCO Enterprise Message
Service with minimum start-up time and coding. The directory contains three sets
of files:
• Client samples for TIBCO Enterprise Message Service implementation.
(jms/samples/java)
• Examples created by Sun Microsystems as basic examples for JMS.
(jms/samples/java/sun)
• Samples of interoperation of TIBCO Enterprise Message Service with TIBCO
Rendezvous applications. (jms/samples/java/tibrv)
This section describes compiling and beginning to use the client samples.
Creating a Topic
In this section, you will create a topic. Several topics are included with the client
samples. For this sample, however, you will create a new topic. You create topics
in the EMS administration tool.
You must start the server and the administration tool before creating a topic. For
information on running the server, refer to Running the Server on page 226. For
information on starting the administration tool, refer to Starting the
Administration Tool on page 146.
On a computer running Windows, you can also start the administration tool from
the Start menu, following the path Programs>TIBCO Enterprise Message
Service 4.0.0>Start EMS administration tool.
When you have started the administration tool, you need to connect it to the EMS
server.
To connect the EMS administration tool to the EMS server, execute one of the
following commands:
• If you are using TIBCO Enterprise Message Service on a single computer, type
connect in the command line of the Administration tool.
The screen will display: connected to tcp://localhost:7222.
If the secure property is not added to a topic, all authenticated users have all
permissions (publish, subscribe, create durable subscribers) on that topic.
For more information on the secure property, see the section about secure on
page 33. For more information on topic permissions, see Chapter 9,
Authentication and Permissions, on page 179.
To enable server authorization and add the secure property to a topic, perform
the following:
1. Start the server. For more information on starting the server, refer to Starting
the Server on page 226.
2. Startup the administration tool.
3. Enable the authorization property by entering the following command:
set server authorization=on
Creating Users
Using the client samples, you will create several users and give them various
permissions to publish and subscribe to the topic foo.
The first step is creating the users.
The tool will display the message: user user1 has been created.
Granting Permissions
In order to see how permissions affect the ability to publish and receive messages,
you will give the two users various permissions on the topic foo. You will give
publish permission to one user, subscribe permission to the second user, and both
publish and subscribe to the third user.
To grant permissions to users on the topic foo:
1. Startup the administration tool, then enter the following commands:
grant topic foo user1 publish
grant topic foo user2 subscribe
Starting Subscribers
First, you will attempt to start both of your users as subscribers on foo. Because
only one user has permission to subscribe on foo, only one of the users will
actually start as a subscriber.
You will start the subscribers first, because the subscribers enable you to observe
the messages being received when you start the publisher.
To start a subscriber:
1. Set a command line window and navigate to the folder containing the client
samples.
2. At the prompt, enter: setup
Entering setup sets the environment and classpath, and returns you to the
prompt.
3. After the prompt, enter:
java tibjmsTopicSubscriber -topic foo -user user1
However, in this example, foo is a secure topic, and user1 has permission to
publish, but not to subscribe. Therefore, you will receive an exception
message including the statement:
Operation not permitted.
The screen will display a message showing that user2 is subscribed to foo.
In this example, foo is a secure topic, and user2 has permission to subscribe
to foo.
The window does not return to the prompt, because the subscription is
running, and no further action needs to be taken.
Entering setup sets the environment and classpath, and returns you to the
prompt.
3. After the prompt, enter:
java tibjmsTopicPublisher -topic foo -user user1 m1 m2
without adding the messages, you will see an error message, reminding you that
you must have at least one message text.
This appendix describes how to configure TIBCO Hawk so that it can be used to
administer and monitor the TIBCO Enterprise Message Service server.
For more information about TIBCO Hawk, see the TIBCO Hawk documentation.
Topics
TIBCO Hawk is a tool for monitoring and managing applications and operating
systems. TIBCO Enterprise Message Service provides classes for administering
the EMS server. Table 38 describes the provided classes.
Class Description
com.tibco.tibjms.admin.hawk.HawkListener Monitoring methods that allow you to
view the status of topics, queues, routes,
and other items on the TIBCO Enterprise
Message Service server.
If you wish to monitor and manage the server, you only need the
HawkController class. If you wish to only monitor the server, you can use the
HawkListener class.
To use TIBCO Hawk to manage the TIBCO Enterprise Message Service server,
you must load the classes provided into the TIBCO Hawk agent. Once the classes
are loaded, methods for managing the EMS server are available in the TIBCO
Hawk display.
This appendix details how to install the provided classes into the TIBCO Hawk
agent and the methods available for monitoring and managing the TIBCO
Enterprise Message Service server.
Installing the provided classes is different for UNIX and Windows platforms. The
following sections detail how to install the TIBCO Enterprise Message Service
management classes into the TIBCO Hawk agent for each platform.
These instructions are specific to TIBCO Hawk Release 4.1.0 or later. Earlier
versions of TIBCO Hawk have a different mechanism for adding plugins. Refer to
your TIBCO Hawk documentation for details on installing plugins, if you are
using an earlier version of TIBCO Hawk.
Windows Installation
To install the provided classes for use in a TIBCO Hawk agent running on a
Windows platform, perform the following:
1. Locate the tibemsadmin.hma file in the TIBCO Enterprise Message Service
installation directory under the samples/admin/hawk subdirectory and copy
it into your TIBCO Hawk plugins directory. Also, locate tibjmsadmin.jar,
jms.jar, and tibjms.jar in the clients/java subdirectory and copy these
files into the TIBCO Hawk plugins directory.
Usually, a TIBCO Hawk plugins directory is located in
c:\tibco\hawk\plugins.
2. Open the TIBCO Hawk Configuration Utility and make certain the plugins
directory is set to the location where you have installed TIBCO Hawk plugins.
To set the plugins directory, click the Agent tab, then set the Plugins Directory
field to the location where the plugins are located.
For more information about using the TIBCO Hawk Configuration Utility, see
TIBCO Hawk Installation and Configuration.
3. Navigate to your plugins directory and open the tibemsadmin.hma file in a
text editor.
4. Specify the TIBCO Hawk microagent class you wish to use in the
<classname> element. You can use either the HawkListener class if you only
want to monitor the server, or you can specify the HawkController class if
you want to monitor and manage the server.
5. Specify the username and password and server URL to use to connect to the
TIBCO Enterprise Message Service server in the appropriate <arg> elements.
For example:
<arguments>
<arg>-user</arg>
<arg>admin</arg>
<arg>-password</arg>
<arg>admin_pass</arg>
<arg>-server</arg>
<arg>tcp://server1.yourcompany.com:7222</arg>
</arguments>
You should use specify the predefined admin user or a user that is a member
of the $admin group.
6. Restart the TIBCO Hawk agent service. See the TIBCO Hawk documentation
for more information about restarting the service.
UNIX Installation
To install these classes for use in a TIBCO Hawk Agent running on a UNIX
platform, perform the following procedure:
1. Locate the tibemsadmin.hma file in the TIBCO Enterprise Message Service
installation directory under the samples/hawk subdirectory and copy it into
your TIBCO Hawk plugins directory. Also, locate tibjmsadmin.jar, jms.jar,
and tibjms.jar in the clients/java subdirectory and copy these files into
the TIBCO Hawk plugins directory.
Usually, a TIBCO Hawk plugins directory is located in
/usr/tibco/hawk/plugins.
2. Edit the TIBCO Hawk hawkagent.cfg file and specify the -hma_plugin_dir
option to include the directory where your TIBCO Hawk plugins are located.
For more information about editing TIBCO Hawk configuration files on
UNIX, see TIBCO Hawk Installation and Configuration.
3. Navigate to your plugins directory and open the tibemsadmin.hma file in a
text editor.
4. Specify the TIBCO Hawk microagent class you wish to use in the
<classname> element. You can use either the HawkListener class if you only
want to monitor the server, or you can specify the HawkController class if
you want to monitor and manage the server.
5. Specify the username and password and server URL to use to connect to the
TIBCO Enterprise Message Service server in the appropriate <arg> elements.
For example:
<arguments>
<arg>-user</arg>
<arg>admin</arg>
<arg>-password</arg>
<arg>admin_pass</arg>
<arg>-server</arg>
You should use specify the predefined admin user or a user that is a member
of the $admin group.
Method Description
The TIBCO Hawk classes have several methods for managing and monitoring a
TIBCO Enterprise Message Service server. These methods correspond to
commands you can issue in the administration tool.
Table 39 lists the methods of each class and the corresponding tibemsadmin
command for the method. The table also lists the page where you can find more
information about each command in Chapter 8, Using the Administration Tool,
on page 145.
This appendix lists all topics on which the server publishes messages for system
events. The message properties for messages published on each topic are also
described. See Monitoring Server Events on page 215 for more information about
monitor topics and messages.
Topics
Table 41 describes the properties that monitor topic messages can contain. Each
monitor message can have a different set of these properties.
conn_type Type of connection that generated the event. This property can
have the following values:
• Admin
• Topic
• Queue
• Generic
• Route
Property Contents
event_action The action that caused the event. This property can have the
following values:
• connect (connection attempted)
• accept (connection accepted)
• disconnect (connection disconnected)
• interest (registered interest for a route)
• create (something created)
• delete (something deleted)
• modify (something changed)
• add (user added to a group)
• remove (user removed from a group)
• grant (permission granted)
• revoke (permission revoked)
• purge (topic, queue, or durable subscriber purged)
• commit (transaction committed)
• rollback (transaction rolled back)
• roteatelog (log file rotated)
• receive (message posted into destination)
• send (message sent by server to another party)
• acknowledge (message is acknowledged)
event_class The type of monitoring event (that is, the last part of the topic
name without the $sys.monitor).
For message monitoring, the value of this property is always set to
message.
event_reason The reason the event occurred (usually an error). The values this
property can have are described in Table 42.
event_route For routing, the route that the event occurred on.
Property Contents
message_bytes When the full message is to be included for message monitoring,
this field contains the message as a byte array. You can use the
createFromBytes method (in the various client APIs) to recover
the message.
mode Message delivery mode. This values of this property can be the
following:
• persistent
• non_persistent
• reliable
source_name Name of the source object involved with the event. This property
can have the following values:
• XID (global transaction ID)
• message_id
Property Contents
source_object Source object that was involved with the event. This property can
have the following values:
• producer
• consumer
• topic
• queue
• permissions
• durable
• server
• transaction
• user
• group
• connection
• message
• jndiname
• factory
• file
• transport
target_created Time that the consumer was created (in milliseconds since the
epoch).
Property Contents
target_dest_type Type of the target destination.
target_name Name of the object that was the target of the event. This property
can have the following values:
• XID (global transaction ID)
• message_id
Property Contents
target_object The general object that was the target of the event. This property
can have the following values:
• producer
• consumer
• topic
• queue
• permissions
• durable
• server
• transaction
• user
• group
• connection
• message
• jndiname
• factory
• file
• transport
target_value Value of the object that was the target of the event, such as the
name of a topic, queue, permission, and so on.
This appendix lists all possible error messages that the server can output,
alphabetized by category.
Category This string appears as the first part of any error output. It indicates the general
class of error.
This appendix is alphabetized by category.
Remedy This string indicates possible recovery actions that administrators should
consider.
Errors These strings represent all instances of the error, as they appear in our code. Some
categories have many error instances; others have only one. These strings can
include formatting characters.
Errors
Description An admin tool or program using the admin API attempted an operation that
failed for the given reason.
Remedy The admin tool or admin API provides the failure reason. The user of the tool or
API should examine the error and correct the syntax, parameter or configuration
that is causing the failure.
Errors %s: create %s failed: conflicting zone: existing consumer has a different zone
%s: create %s failed: detected duplicate durable subscription [%s] for topic [%s].
%s: create %s failed: illegal to use wildcard %s [%s].
%s: create %s failed: invalid %s [%s].
%s: create %s failed: invalid session id=%d.
%s: create %s failed: invalid syntax of %s [%s].
%s: create %s failed: invalid temporary %s [%s].
%s: create %s failed: not allowed to create dynamic %s [%s].
Remedy Determine if the backup server is running. If it is running, check for a network
partition.
Remedy Change the value supplied for the named argument for one that is acceptable, see
EMS documentation for intructions on starting tibemsd.
Errors %s.
Fault Tolerant configuration error, can't create loop.
Fault tolerant activation has to be greater than 2x heartbeat
Fault tolerant connection failed, fault tolerant mode not supported on '%s'.
Fault tolerant heartbeat has to be greater than 0
Initialization failed due to errors in SSL.
Initialization failed due to errors in configuration.
Initialization failed due to errors with transports.
Initialization failed. Exiting.
Initialization has failed. Exiting.
Initialization of thread pool failed (%s). Exiting.
Startup aborted.
Description A warning message indicating that the commit of a client application's transaction
failed either because there were earlier errors when processing this transaction or
because the transaction was started on the primary server prior to a fault-tolerant
failover.
Remedy The most likely cause of this error is running out of memory. Shut down tibemsd
and see remedies for out of memory.
Description The durables configuration file specifies a durable with a given name and client
identifier with attributes that are different from the identically named durable
found in the meta.db file.
Remedy Correct the durables configuration file to match the durable defined in the
meta.db file or administratively delete the durable and re-define it.
Errors Configured durable '%s' differs from durable in storage, storage version used.
Category Create of global routed topic failed: not allowed to create dynamic topic
Description A server received an interest notification from another server that does not match
the allowed topics in its configuration.
Remedy This only is printed when the trace includes ROUTE_DEBUG. If the server's topic
definitions are as expected, this statement can be ignored or remove the
ROUTE_DEBUG trace specification to prevent printing.
Errors Create of global routed topic failed: not allowed to create dynamic topic [%s].
Category Create of routed queue failed: not allowed to create dynamic queue
Description A warning indicating that a tibemsd with a route to this daemon has a queue
configured to be global but this daemon does not permit the creation of that
queue dynamically.
Remedy Add the specified queue or a pattern that includes it to this daemon if you want
the queue to be assessible from this daemon, otherwise the warning can be
ignored.
Errors Create of routed queue failed: not allowed to create dynamic queue [%s].
Remedy Send details of the error and the situation in which it occurred to TIBCO Support.
Description Warning generated when tibemsd receives a message with a message id that
matches another message's message id.
Remedy Examine the appropriate configuration file and correct the syntax error.
Configuration error: file=%s, line=%d: multiple bridge entries for the same
destination'%s' are not allowed.
Configuration error: file=%s, line=%d: multiple principals specified, line ignored
Configuration error: file=%s, line=%d: multiple targets specified, line ignored
Configuration error: file=%s, line=%d: no permissions found in acl entry
Configuration error: file=%s, line=%d: no target found in acl entry
Configuration error: file=%s, line=%d: no valid user or group found in acl entry
Configuration error: file=%s, line=%d: out of memory, unable to create
Rendezvous transport
Configuration error: file=%s, line=%d: syntax error in the line, ignoring
Configuration error: file=%s, line=%d: syntax errors in line, line ignored
Configuration error: file=%s, line=%d: unable to create %s '%s': invalid topic
name, invalid parameters or out of memory
Configuration error: file=%s, line=%d: unable to process selector in route
parameters, error=%s
Configuration error: file=%s, line=%d: user '%s' not found, ignoring
Configuration error: file=%s, line=%d: value less than allowed minimum, reset to
0
Configuration error: file=%s, line=%d: value of %s less than allowed minimum of
%dKB, reset to unlimited
Configuration error: file=%s, line=%d: value of %s out of range, reset to default
Configuration error: file=%s, line=%d: value of db_pool_size too big or less than
allowed minimum, reset to default value of %d bytes
Configuration error: file=%s, line=%d: value of max_msg_memory less than
allowed, reset to %dMB
Configuration error: file=%s, line=%d: value of msg_pool_size too big or less than
allowed minimum of %d, reset to default value of %d
Configuration warning: file=%s, line=%d: ignoring rvcmlistener, duplicate
Configuration warning: file=%s, line=%d: parameter '%s' is deprecated
Configuration warning: file=%s, line=%d: route '%s' does not have a user
configured for authorization.
Fault tolerant reconnect timeout is set to a negative or 0 value of %d seconds, reset
to %d seconds.
Fault tolerant reread error: file=%s, line=%d: invalid property value
Category Error writing commit request, errors already occurred in this transaction
Description A client application's attempt to commit a transaction failed because the server
encountered an error during an operation associated with the transaction.
Remedy Examine previous error statements to determine the cause of the operation failure
and correct that before attempting the transaction again.
Errors Error writing commit request, errors already occurred in this transaction.
Description Warning that fault tolerant reconnect timeout is set to a large number of seconds.
Remedy Consider reducing the timeout unless it is important that the newly active server
maintains state for clients that do not reconnect following a failover.
Description tibemsd was unable to update one of its configuration files following a
configuration change.
Remedy Check that the user that started the tibemsd has permission to change the
configuration files and that there is sufficient disk space on the device.
Description tibemsd was unable to write data to one of its store files.
Remedy Ensure that the directory containing the store files is mounted and accessible to
the tibemsd, and that there is free space available on the device
Remedy Shutdown process that is using the port or change the value of the 'listen'
parameter in the server's tibemsd.conf file to a port that is not in use .
Remedy Check that the path name is correct and the directory exists, the user that started
tibemsd has permission to read the specified directory and path, the file exists if it
isn't one that the tibemsd can create, the file is not being used by another tibemsd
or some other process.
Remedy Send the error statement and a description of the environment to TIBCO Support.
Remedy Check the other tibemsd is still running and if it is verify the network connection
from this tibemsd to the other tibemsd.
Description The server could not parse the listen parameter in the tibemsd.conf file
Remedy Correct the listen parameter to match the form <protocol>://<url> as specified in
the manual.
Description tibemsd received a request that referred to a session that doesn't currently exist.
Remedy Send details of the error and the situation in which it occurred to TIBCO Support.
Description An attempt to authenticate a client's userid and password using the external
LDAP server failed.
Remedy Examine the error code printed by the messaging server and consult the manual
for the external LDAP server.
Remedy This error only occurs with the evaluation version of the server or in an
embedded form. To correct this error either replace your evaluation version with
a production version or contact the vendor who supplied the embedded version.
Remedy Change the tibemsd.conf file so that a value for the attribute is provided.
Description A client application attempted to change the state of a transaction that the
tibemsd does not have in its list of current transactions.
Remedy Check tibemsd trace logs to see if the transaction had been committed or rolled
back by an administrator, if not then check the client code to see if it or its
transaction manager are calling the transaction operations in the correct order.
Remedy Check how much memory the server process is using according to the operating
system. Compare this with how much memory and swap space the host actually
has. If there are sufficient memory and swap space, check the operating system
limits on the server process to determine if this is the cause. If the limits are set to
their maximum and this error occurs, reduce the load on this server by moving
some topics and queues to another server.
Description The tibemsd received an XA End instruction from the third party Transaction
Manager which referred to a different transaction from the one currently in use by
the session.
Remedy This error is most likely caused by an external transaction manager that allowed
two separate client applications to use the same XA transaction identifier (XID).
Consult the manual for the transaction manager or report this to the transaction
manager vendor.
Errors Cannot process xa start for a session when another transaction is already active on
that session.
Cannot process xa start with TMNOFLAGS when the transaction is already
active.
Remedy Send details of the error and the situation in which it occurred to TIBCO Support.
Description A client application attempted to connect to the server's TCP port using the SSL
protocol.
Remedy Change the client application's URL from ssl to tcp or change the server's listen
parameter from tcp to ssl. To activate a change of the server listen parameter
requires a restart of the server.
Description A client application attempted to connect to the server's SSL port using the TCP
protocol.
Remedy Change the client application's URL from tcp to ssl or change the server's listen
parameter from ssl to tcp. To activate a change of the server listen parameter
requires a restart of the server.
Description The multi-hop route support of the server does not support configuring a cycle.
However, it detected a configuration that would create a cycle.
Remedy See Rendezvous documentation for details of what the error means and how to
remedy it.
Description Seen when tibemsd starts up and detects that the zone for a route as specified in
routes.conf has been changed.
Remedy Either delete the route or change its zone back and restart the tibemsd.
Description Warnings indicating that the tibemsd has run out of memory and is now using its
reserve memory
machine's memory.
Remedy See SmartSockets documentation for details of what the error means and how to
remedy it.
Remedy Examine the OpenSSL error and the EMS User's Guide chapter describing the use
of SSL.
Remedy Report the error to your system administrator and ask them to remedy the
problem.
Remedy Run the server with the -help option and compare it with the command line
containing the unrecognized option.
Index
A E
admin export
connect 152 topic property 36
password 228 export property 36
user 148 topic 155
admin user 228 export topic property 155
anonymous
user and security 228
definitions of properties 33
delete subscriber 156
disabled security 228 I
durable subscriber 5, 34, 64, 159
dynamic queues 30 import
dynamic topics 30 queue property 36
topic property 36
import property 36
inheritance
property 41
inheritance of property 31
J property 63
definitions 33
JNDI connections 232 export 36
static queues 232 import 36
static topics 232 inheritance 31, 41
maxbytes 41
L
Q
LDAP 186
queue import property 36
queue properties 32
queue property list 32
M queues
dynamic 30
MapMessage 51 static 30
definition 51 temporary 30
extension 63
maxbytes property 41
message compression 59
S
sample files 300
N samples
compiling 300
no-acknowledge receipt 65 secure property and permission 33
No-Acknowledgement Receipt Mode 65 security
and anonymous user 228
disabled 228
main configuration file 183
P shared storage 267
static queues 30
password JNDI connections 232
admin 228 static topics 30, 232
permission subscriber 5, 192
secure property and 33 delete 156
properties durable 5, 34, 64, 159
queue 32 support, contacting xviii
topic 32
T
tcp 152, 230, 302
U
UNIX system
using for user authentication 186
user 185
admin 228
externally authenticated 186
user admin 148
The names of the authors and copyright holders must not be used in
advertising or otherwise to promote the sale, use or other dealing in
this Software without specific, written prior permission. Title to
copyright in this Software shall at all times remain with copyright
holders.