Sun ONE logo    
Sun ONE Message Queue, Version 3.0.1 Release Notes



Release Notes for
Sun™ ONE Message Queue

Version 3.0.1

Updated October, 2002




These release notes contain important information available at the time of release of Version 3.0.1 of Sun ONE Message Queue (MQ). New features and enhancements, known limitations and problems, technical notes, and other information are addressed here. Read this document before you begin using MQ 3.0.1.

The most up-to-date version of these release notes can be found at the Sun ONE documentation web site: http://docs.sun.com/?p=/coll/S1_MessageQueue_301. Check the web site after installing your software, and then periodically thereafter, to view the most up-to-date version of these notes.

These release notes contain the following sections:

Java™ Message Service (JMS) Compliance

MQ 3.0.1 has been certified as compliant with the Java Message Service (JMS) 1.1 specification: it has passed the JMS 1.1 Compatibility Test Suite (CTS).

MQ 3.0.1, which is the native JMS provider for Sun ONE Application Server 7, has also passed the J2EE 1.3.1 CTS testing of the Sun ONE Application Server 7 (which requires compliance with JMS 1.0.2b)

MQ Documentation Updates

The following MQ 3.0.1 documents have been updated from Version 3.0 of the product. These updated documents can be found at the Sun ONE documentation web site: http://docs.sun.com/?p=/coll/S1_MessageQueue_301.

Installation Guide

The MQ 3.0.1 product includes an updated MQ Installation Guide.

Administrator's Guide

The MQ Administrator's Guide has been updated to include changes in MQ 3.0.1 (see "What's New in MQ 3.0.1").

Developer's Guide

The MQ Developer's Guide has been updated to include changes in MQ 3.0.1 (see "What's New in MQ 3.0.1").

What's New in MQ 3.0.1

The MQ 3.0.1 product includes all the new features of MQ 3.0 plus two additional 3.0.1 features.

Features New in MQ 3.0.1

MQ 3.0.1 includes two new capabilities as compared to MQ 3.0:

Features New in MQ 3.0

MQ 3.0 included a number of changes to Version 2.0 of the product—iMQ 2.0 (and iMQ 2.0, Service Pack 1).

Notable among these changes is that the product is now available in two editions: a Platform Edition and an Enterprise Edition.

Platform Edition    Provides basic JMS support, and is best suited to small-scare deployments and development environments

Enterprise Edition    Provides HTTP/HTTPS support, enhanced scalability, and security features, and is best suited to large-scale deployments.

(See the introduction to the MQ Administrator's Guide or the MQ Developer's Guide for more information on these editions.)

The descriptions, below, of changes in the MQ 3.0.1 product are grouped according to whether they apply to both editions or to the Enterprise Edition only.

Both Enterprise and Platform Editions

Enterprise Edition Only

Compatibility Issues

MQ 3.0.1 is fully compatible with MQ 3.0, and upgrading from MQ 3.0 to MQ 3.0.1 requires no changes in broker configuration, administered objects, administration tools, or client applications.

However, MQ 3.0.1 is generally not compatible with iMQ 2.0. In particular, there are a number of issues that you might need to address when upgrading from iMQ 2.0 (or iMQ 2.0 Service Pack 1) to MQ 3.0.1:

Broker Compatibility

An MQ 3.0.1 broker will not inter-operate with an iMQ 2.0 broker due to changes in broker properties and in the persistent store schema. However, some iMQ 2.0 data is compatible with MQ 3.0.1, as shown in Table 1, and can be preserved when upgrading to MQ 3.0.1. When upgrading from iMQ 2.0 to MQ 3.0.1, you should consider the following:

Table 1    Compatibility of MQ 3.0.1 with iMQ 2.0 Data 

iMQ 2.0 Data Category

Location of iMQ 2.0 Data

Compatibility with MQ 3.0.1

Broker properties

 

IMQ_VARHOME/stores/brokerName/
props/config.properties

 

Incompatible; do not use.

 

Persistent store (messages,
destinations, durable subscriptions, transactions)

 

IMQ_VARHOME/stores/brokerName/
filestore/

or JDBC-accessible data store

 

Incompatible; do not use.

 

Administered objects

 

local directory or LDAP server

 

Compatible; can use and/or convert to 3.0.1

 

Security: user repositories

 

IMQ_VARHOME/security/passwd
or LDAP server

 

Compatible.
Move to following location:
  IMQ_HOME/etc/passwd
  
(/etc/imq/passwd on Solaris)

 

Security: access control file

 

IMQ_VARHOME/security/
accesscontrol.properties

 

Compatible.
Move to following location:
  IMQ_HOME/etc/...
  
(/etc/imq/... on Solaris)

 

Administered Object Compatibility

MQ 3.0.1 administered objects have been enhanced with new attributes and iMQ 2.0 attributes have been renamed. Therefore, when upgrading from iMQ 2.0 to MQ 3.0.1, you should consider the following:

Administration Tool Compatibility

Because of the renaming of many files and directories (specifically to replace the string "jmq" with "imq"), all MQ 3.0.1 command line utilities, broker properties, administered object attributes, and internal file names have changed. Therefore, when upgrading from iMQ 2.0 to MQ 3.0.1, you should consider the following:

Client Compatibility

When upgrading from iMQ 2.0 to MQ 3.0.1, you should consider the following:

Known Limitations

Limitations shown in this section are grouped according to whether they apply to both Enterprise and Platform Editions of MQ 3.0.1 or to the Enterprise Edition only.

Both Enterprise and Platform Editions

Enterprise Edition Only

Known Bugs

This section contains a listing of the more important bugs known at the time of the MQ 3.0.1 release.

For a list of current bugs, their status, and workarounds, Java Developer Connection (TM) members should see the Bug Parade page on the Java Developer Connection web site. Please check that page before you report a new bug. Although not all MQ bugs are listed here, it is a good starting place if you want to know whether a problem has been reported.

The relevant page is:

http://developer.java.sun.com/developer/index.html



Note

Java Developer Connection membership is free but does require registration for access. Details on how to become a Java Developer Connection member are provided on Sun's "For Developers" web page.



To report a new bug or submit a feature request, send mail to imq-feedback@sun.com.

Table 2    Bug Descriptions 

Bug Number

Details

4431924

 

imqadmin: modal dialogs can get into deadlock situation

The Administration Console (imqadmin) uses dialogs that are application modal. Most of these dialogs are brought up explicitly by interacting with the graphical user interface, for example, by selecting the Add Brokers menu item. However, a dialog can also appear as a result of a lost broker connection. When more than one dialog is open, the Administration Console is locked. You will not be able to dismiss either modal dialog using the Close button.

Workaround: Dismiss the top most dialog using the window manager controls i.e.

       - the 'X' button at the upper right corner on Windows

       - the 'Close' window manager menu item on Solaris

 

4449354

 

In extremely rare cases, calling the methods Connection.stop, Connection.start, and Connection.close at the same time as calling the methods Session.recover and Session.rollback (in separate threads) may result in an unexpected message redelivery order.

Workaround: make sure your calls to the Connection... and Session... methods specified above are serialized either by using the same thread or by using synchronization.

 

4683029

 

The -javahome option in all solaris/win scripts does not work if the value has a space.

The -javahome option is used by the MQ commands and utilities to specify an alternate Java 2 compatible runtime to use. However, the path to the alternate Java runtime must be located at a path that does not contain spaces.

Examples of paths that have spaces are:

      Windows:

      C:\jdk 1.4 (On Windows the path can contain spaces if the entire path is placed in quotes; for example, "C:\jdk 1.4")

      Solaris:

      /work/java 1.4

Workaround: Install the Java runtime at a location or path that does not contain spaces.

 

4689962

 

In the Japanese locale, the output of various admin utilities is not properly aligned in columns and the borders are too short.

Workaround: None

 

4694340

 

On Redhat Linux 7.1, the Java VM can sometimes crash with a SIGSEGV. This is JDK bug
Id 4629175. This may be more likely to happen when you terminate the broker or client using a Ctrl-C.

Workaround: Broker: The problem has been fixed with JDK 1.4.1. Client: Use either the 1.2 or 1.3 JRE on Linux

 

4703406

 

QueueBrowser should function without first calling connection.start().

Connection.start() must be called on a Connection before a QueueBrowser can browse a Queue. If you fail to call Connection.start() the QueueBrowser enumeration will block on nextElement(), and eventually throw a java.util. NoSuchElementException.

Workaround: Call Connection.start() before calling QueueBrowser.getEnumeration().

 

4753010

 

Unbounded growth in Java process native heap segment with server VM.

This is a Java VM bug that might affect the broker process under conditions of rapid opening and closing of client connections. It can cause continuous and unbounded broker process memory growth. The broker can eventually crash when all the system memory is exhausted.

You can verify the growth of the native heap segment using the /usr/proc/bin/pmap tool.

Workaround: Force the broker to use the client VM, using the following command option:

    imqbrokerd -clientvm

or you can remove the -server argument to the /usr/bin/imqbrokerd shell script that starts the broker,

or you can upgrade to JDK 1.4.1 (which has not been officially certified for MQ 3.0.1) and use the following command option:

    imqbrokerd -javahome JDK_1.4.1_directory

 

4761626

 

Heavy consumer creation/destruction w/ autocreate queues can cause message loss

In rare stress situations it is possible for a message to be lost from an auto-created queue destination.

The error will occur if, after all messages delivered from the queue have been acknowledged, the queue's last message consumer is removed at the same time a new message producer (on a different connection) sends a message to that queue. What happens is that the queue is "auto-removed" (it is empty without any consumers) just as the new message arrives, causing the new message to be lost.

Workaround: Create queues administratively using MQ administration tools.

 

4762745

 

README error: path to javadoc incorrect for Solaris

The location of the JMS API and MQ-specific API documentation is incorrectly stated as:

    /usr/share/javadoc/en/apidoc

Workaround: The correct path is as follows:

    /usr/share/javadoc/imq

 

Bugs Fixed in 3.0.1

Below is a short description of the most important bugs fixed in MQ 3.0.1.

(For bugs fixed in MQ 3.0, see the MQ 3.0 Release Notes available at

http://docs.sun.com/?p=/coll/S1_MessageQueue_30)

For more details about any of the following bug fixes you can view the complete report at the Java Developer Connection site:

http://developer.java.sun.com/developer/bugParade

Table 3    Bugs Fixed in MQ 3.0.1 

Bug Number

Description

4679837

 

Client sometimes throws JMSException on connection.close() when TLS is used as transport.

 

4688051

 

Client can get an EOFException when rapidly creating and closing connections to the broker.

 

4694971

 

Standalone JTS/XA transaction completion may fail occasionally, even after a normal, error-free XAConnection.close().

 

4700851

 

Client does not clean up local transaction after ending an XA transaction

 

4701982

 

The Administration Console cannot be launched on Solaris or Linux if the CLASSPATH environment variable is set

 

4702152

 

For messages acknowledged as part of a consumer-side transaction, broker holds on to some unnecessary state information for each acknowledged message until the consumer is closed.

 

4704186

 

Corrections in the example applications README file (demo/jms/README)

 

Functionality Marked as Optional in JMS

The JMS specification indicates certain items that are optional-- each JMS provider (vendor) chooses whether or not to implement them. The MQ product handling of each of these optional items is indicated below:

Table 4    Optional JMS Functionality 

Section in JMS Specification

Description and MQ Handling

3.4.3
JMSMessageID

 

"Since message ID's take some effort to create and increase a message's size, some JMS providers may be able to optimize message overhead if they are given a hint that message ID is not used by an application. JMS Message Producer provides a hint to disable message ID."

MQ implementation: Product does not disable Message ID generation (any setDisableMessageID() call in MessageProducer is ignored). All messages will contain a valid MessageID value.

 

3.4.12
Overriding Message Header Fields

 

"JMS does not define specifically how an administrator overrides these header field values. A JMS provider is not required to support this administrative option."

MQ implementation: The MQ product supports administrative override of the values in message header fields through configuration of connection factory administered objects.

 

3.5.9
JMS Defined Properties

 

"JMS Reserves the 'JMSX' Property name prefix for JMS defined properties."
"Unless noted otherwise, support for these properties is optional."

MQ implementation: The JMSX properties defined by the JMS 1.1 specification are supported in the MQ product.

 

3.5.10
Provider-specific Properties

 

"JMS reserves the 'JMS_<vendor_name>' property name prefix for provider-specific properties."

MQ implementation: The purpose of the provider-specific properties is to provide special features needed to support JMS use with provider-native clients. They should not be used for JMS to JMS messaging. MQ 3.0.1 does not use provider-specific properties.

 

4.4.8
Distributed Transactions

 

"JMS does not require that a provider support distributed transactions."

MQ implementation: Distributed transactions are supported in this release of the MQ product.

 

4.4.9
Multiple Sessions

 

"For PTP <point-to-point distribution model>, JMS does not specify the semantics of concurrent QueueReceivers for the same queue; however, JMS does not prohibit a provider from supporting this." See section 5.8 of the JMS specification for more information.

MQ implementation: The MQ implementation supports three queue delivery policies: Failover, Round Robin, and Single (default). For more information, refer to the MQ Administrator's Guide.

 

Technical Notes

This section contains short write-ups on the following topics:

System Clock Settings

When using an MQ system, you should be careful to synchronize system clocks and avoid setting them backward.

Synchronization Recommended

It is recommended that you synchronize the clocks on all hosts interacting with the MQ system. This is particularly important if you are using message expiration (TimeToLive). Failure to synchronize the hosts' clocks may result in TimeToLive not working as expected (messages may not be delivered). You should synchronize clocks before starting any brokers.

Solaris    You can issue the rdate command on a local host to synchronize with remote host. (You must be superuser--that is, root--to run this command.) For example, the following command synchronizes the local host (call it Host 2) with remote host Host1:

# rdate Host1

Linux    The command is similar to Solaris, but you must provide the -s option:

# rdate -s Host1

Windows    you can issue the net command with the time subcommand to synchronize your local host with a remote host. For example, the following command synchronizes the local host (call it Host 2) with remote host Host1:

net time \\Host1 /set

Avoid Setting System Clocks Backwards

You should avoid setting the system clock backwards on systems running an MQ broker. MQ uses timestamps to help identify internal objects such as transactions and durable subscriptions. If the system clock is set backwards it is theoretically possible that a duplicate internal identifier can be generated. The broker attempts to compensate for this by introducing some randomness to identifiers and by detecting clock shift when running, but if the system clock is shifted backwards by a significant amount when a broker is not running, then there is a slight risk of identifier duplication.

If you need to set the system clock backwards on a system running a broker by more than a few seconds, it is recommended that you either do it when there are no transactions or durable subscriptions, or do it when the broker is not running, then wait the amount of time you have shifted the clock before bringing the broker back up.

But the ideal approach is to synchronize clocks before starting up any brokers, and then use an appropriate technique to ensure that clocks don't drift significantly after deployment.

OS-Defined Connection Limitations on Clients and Brokers

On the Solaris and Linux platforms, the shell in which the client or broker is running places a soft limit on the number of file descriptors that a client can use. In the MQ system, each connection a client makes, or each connection a broker accepts, uses one of these file descriptors. As a result, you cannot have a broker or client running with more than 256 connections on Solaris or 1024 on Linux without changing this limit. (The number is actually slightly lower than that due to file descriptors that are used for other purposes, such as for file-based persistence.)

To change this limit, see the ulimit man page or the instructions under "Increasing File Descriptors to Improve File-based Persistence Performance," below. The limit needs to be changed in each shell in which a client or broker will be executing.

Increasing File Descriptors to Improve File-based Persistence Performance

On the Solaris and Linux platforms, the speed of storing messages in the default file-based persistence is affected by the number of file descriptors available for use by the file store. (Windows does not have a file descriptor limit.) A large number of descriptors will allow the system to process large numbers of persistent messages faster.

To improve performance for performance testing or deployment, administrators should increase the maximum number of file descriptors available to an application (in this case, the broker process) and then increase the size of the shared file descriptor pool used by the broker by updating the value of the property:

imq.persist.file.message.fdpool.limit

The value of this property must be less than the maximum number of file descriptors available on your system.

On Solaris, for example, you can increase the file descriptor limits using the ulimit command. Processes inherit system limits from their parent (login) shell. On Solaris, there is a "hard" limit and a "soft" limit. For a non-root user, the number of file descriptors for an application cannot exceed the soft limit, which, in turn, cannot exceed the hard limit.

To check the current file descriptor limits:

Hard limit: $ ulimit -Hn

Soft limit: $ ulimit -n

To change the file descriptor limits for "root" user:

# ulimit -Hn unlimited

# ulimit -n unlimited

After this, any process created from this shell will be able to open unlimited file descriptors. So it is safe to run the imqbroker command at this point.

To change the file descriptor limit for non-root user:

$ ulimit -Hn number1

$ ulimit -n number2

where number1 is less than 1024, and number2 is less than number1.

If 1024 is not enough, you have the following options:

Securing Persistent Data

The broker uses a persistent store that can contain, among other information, message files that are being temporarily stored. Since these messages might contain proprietary information, it is recommended that the data store be secured against unauthorized access.

A broker can use either the built-in or plugged-in persistence.

Built-in Persistent Store

A broker using built-in persistence writes persistent data to a flat file data store located at:

IMQ_VARHOME/instances/brokerName/filestore/
(/var/imq/instances/brokerName/filestore/ on Solaris)

where brokerName is a name identifying the broker instance.

The brokerName/filestore/ directory is created when the broker instance is started for the first time. The procedure for securing this directory depends on the operating system on which the broker is running.

Solaris and Linux    The permissions on the IMQ_VARHOME/instances/brokerName/filestore/ directory depend on the umask of the user that started the broker instance. Hence, permission to start a broker instance and to read its persistent files can be restricted by appropriately setting the umask. Alternatively, an administrator (superuser) can secure persistent data by setting the permissions on the IMQ_VARHOME/instances directory to 700.

Windows    The permissions on the IMQ_VARHOME/instances/brokerName/filestore/ directory can be set using the mechanisms provided by the Windows operating system that you are using. This generally involves opening a properties dialog for the directory.

Plugged-in Persistent Store

A broker using plugged-in persistence writes persistent data to a JDBC-compliant database.

For a database managed by a database server (for example, an Oracle database), it is recommended that you create a user name and password to access the MQ database tables (tables whose names start with "IMQ"). If the database does not allow individual tables to be protected, create a dedicated database to be used only by MQ brokers. See the database vendor for documentation on how to create user name/password access.

The user name and password required to open a database connection by a broker can be provided as broker configuration properties. However it is more secure to provide them as command line options when starting up the broker (see MQ Administrator's Guide, Appendix A, "Setting Up Plugged-in Persistence").

For an embedded database that is accessed directly by the broker via the database's JDBC driver (for example, a Cloudscape database), security is usually provided by setting file permissions (as described in "Built-in Persistent Store," above) on the directory where the persistent data will be stored. To ensure that the database is readable and writable by both the broker and the imqdbmgr utility, however, both should be run by the same user.

Broker Memory Configuration

When the broker gets close to exhausting the JVM heap space used by Java objects, it uses various techniques such as flow control and message swapping to free memory. Under extreme circumstances it even closes client connections in order to free the memory and reduce the message inflow. Hence it is desirable to set the maximum JVM heap space high enough to avoid such circumstances.

However, if the maximum Java heap space is set too high, in relation to system physical memory, the broker can continue to grow the Java heap space until the entire system runs out of memory. This can result in diminished performance, unpredictable broker crashes, and/or affect the behavior of other applications and services running on the system.

This problem can be avoided by configuring a sensible Java heap size limit using the -Xmx Java command line argument. In general it is a good idea to evaluate the normal and peak system memory footprints, and configure the Java heap size so that it is large enough to provide good performance, but not so large as to risk system memory problems.

Client Out of Memory Errors

If you are running a JMS client that deals with large messages or many small messages, it may encounter OutOfMemoryError errors. The client runtime does not have a memory leak--it just has insufficient memory to copy the messages off the network and deliver them to your client.

To eliminate these OutofMemoryError errors, increase the maximum Java heap size. You can do this by passing the appropriate command line option to the java or jre command.

On Java2, use the -Xmx option when running the client application. For example:

java -Xmx128m MyClass

Please note these limitations:

How to Report Problems

To report a problem, send mail to imq-feedback@sun.com.

If you have a support contract and you have problems with MQ, contact Sun ONE customer support using one of the following mechanisms:

So that we can best assist you in resolving problems, please have the following information available when you contact support:

For More Information

Beyond the MQ documentation, you can find additional information as indicated below.

Discussion Forums

jmq-interest List

A discussion forum is available for MQ customers. It provides a place for customers to exchange ideas on MQ-related topics and share problem-solving tips and techniques.

To subscribe to the jmq-interest list, send e-mail to listserv@java.sun.com and include a message like the following in the message body. Please supply the appropriate data for the first and last name.

subscribe jmq-interest firstname lastname

To unsubscribe to the list, send mail to listserv@java.sun.com and include in the message body:

signoff jmq-interest



Note

The jmq-interest forum is meant for general MQ issues. For specific questions about MQ, send your questions to imq-feedback@sun.com.



Sun ONE Software Forum

There is a Sun ONE Message Queue forum available at the following location:

http://softwareforum.sun.com/NASApp/jive/forum.jsp?forum=24

Java Technology Forum

There is a JMS forum in the Java Technology Forums that might be of interest.

http://forum.java.sun.com

Sun ONE Information

Useful Sun ONE information can be found at the following Internet locations:




Copyright 2002 Sun Microsystems, Inc. All rights reserved.


Part Number 816-6454-10