Release History

0.7.7-dev in CVS in CVS May 7, 2004
0.7.6 January 29, 2004
0.7.5 May 10, 2003
0.7.4 January 24, 2003 November 15, 2002
0.7.3 November 10, 2002
0.7.2b14 June 8, 2002

Get the RSS feed of the last changes

Release 0.7.7-dev - in CVS


OpenJMS now supports version 1.1 of the JMS API.


The HTTP and HTTPS connectors now communicate with the OpenJMS server via the openjms-tunnel servlet.

This replaces the servlets deployed in openjms.war in previous releases. The openjms-tunnel servlet supports bidirectional communication. This means that the server no longer needs to establish socket connections back to clients (which was problematic for hosts with firewalls).

See Configuring the HTTP Connector and Configuring the HTTPS Connector for more details.


Added a new attribute bindAll to TcpConfiguration , TcpsConfiguration , HttpConfiguration and HttpsConfiguration .

This can be used to change how the server accepts connections. If "true" , the server will accept connections on all network interfaces. If "false" the server will only accept connections on the host specified by ServerConfiguration .


The server now listens on a single port for client connections, when the TCP, TCPS, HTTP, or HTTPS connector is configured.

Previously, two ports were required. However, the server, embedded JNDI service and administration service can be configured to use separate ports.


The TCPS connector now supports configuration of the truststore and keystore in openjms.xml as per RFE 667023 - "Add support to configure tcps connector". See TcpsConfiguration for more details.


The TCPS connector no longer defaults to requiring clients to authenticate themselves. See Client authentication for more details.


The HTTP and HTTPS connectors no longer require a TCP connector to be configured.


Changed the configuration of the HttpConfiguration and HttpsConfiguration elements in openjms.xml .

The meanings of the port and host attributes have changed. Previously, these used to represent the web-server host and port. Now, they represent the host and port that the server is handling requests from the openjms-tunnel servlet on.

Two new attributes, webServerHost and webServerPort , now represent the web-server host and port.

The following attributes, previously part of HttpConfiguration and HttpsConfiguration , are no longer supported:

  • proxyHost
  • proxyPort
  • clientPingInterval
  • serverServlet
  • jndiServlet
  • adminServlet


The following attributes, previously part of the RmiConfiguration element in openjms.xml are no longer supported:

  • serverName
  • jndiName
  • adminName


The following attributes, previously part of the DatabaseConfiguration element in openjms.xml are no longer supported:

  • garbageCollectionInterval
  • garbageCollectionBlockSize
  • garbageCollectionThreadPriority


Fixed bug 1214292 - topicSubscriber.close() hangs.


Fixed bug 1192265 - Message lost in multi-processor environment.


Fixed bug 1165743 - Persistent topic messages not removed from database.


Fixed bug 1108562 - NullPointerException when calling DatabaseService.getAdapter


Fixed bug 1144026 - ConcurrentModificationException in TopicDestinationCache


Fixed bug 1058427 - QueueDestinationCache throws IndexOutOfBoundsException


Fixed bug 934627 - MS SQL Server very frequent deadlock victim


Fixed bug 1107742 - Clock Daemon Thread never exits in Applet


Fixed bug 797688 - Embedded JNDI should support authentication


Fixed bug 756237 telnet-ing directly to tcp connector/jndi yields OutOfMemory.


Added support for RFE-982260 - support for context classloader during deserialization


Added support for RFE 750870 - Cannot bind to a specific interface


Added support for RFE 1183082 - Weblogic ANTLR conflict


Fixed bug 667580 - setClientID not throwing IllegalStateException


Fixed bug 1124441 - Default port values for http, https, and tcps doco wrong.


Fixed bug 1109259 - Applet client connection to firewalled server


Fixed bug 971182 - Receiver remains active after network disconnection.


Fixed bug 1023188 - Network cable disconnect does not deregister client.


Fixed bug 1041628 - DestinationManager throws ArrayIndexOutOfBoundsException


Fixed bug 1105874 - Can't use https connector with other JSSEs


Fixed bug 949270 - JmsServer(config) throws NPE


Fixed bug 1123902 - Heirarchical names results in NameNotFoundException


Fixed bug 1236732: Impossible to bind queue to jms.queue1


Dropped support for the JDBM database.

The JdbmDatabaseConfiguration element of openjms.xml is no longer valid.

OpenJMS now ships with a version of Derby as the default database. See Configuring the database for more details.


Deprecated org.exolab.jms.server.EmbeddedJmsServer . The org.exolab.jms.server.JmsServer class should be used instead.


Removed pre-0.7.5 release InitialContextFactory implementations:

  • RmiJndiInitialContextFactory
  • IpcJndiInitialContextFactory
  • IntravmJndiInitialContextFactory
  • HttpJndiInitialContextFactory
  • SslHttpJndiInitialContextFactory


Dropped support for experimental batching RDBMS adapter.

Release - in CVS

fix Fixed bug 996959 - ConcurrentModificationException in ConsumerManager
fix Fixed bug 984891 - ConcurrentModificationException on server shutdown. Thanks to Andre Gebers.
update Changed create_oracle.sql script as per request 964261, to add indexes to avoid full table scans and use indexed primary keys Thanks to Michael Jaszczyk.
fix Fixed bug 964267 - column indexes, names column in inserts, close all db object Thanks to Michael Jaszczyk.

Release - May 7, 2004

fix Fixed bug 945783 - Runtime exceptions generated by MessageQueue
fix Fixed bug 945785 - NullPointerException using async delivery, selectors, queue
fix Fixed bug 938163 - Session not removing producers
fix Fixed bug 921517 - TCP JNDI IntialContext using static variables for obj. scope
fix Fixed bug 946176 - Deprecate JmsAdminServerIfc.purgeMessages()
fix Fixed bug 946283 - JMSCTS failure: StreamMessageTest.testIncrementalReadBytes
fix Fixed bug 891758 - DB table uses reserved word as column name
fix Fixed bug 947723 - syntax errors in create_sybase.sql Thanks to Robert T Brown.

Release 0.7.6 - January 29, 2004

add Added authentication support. For details, see the Configuring Security document. Thanks to Knut Lerpold.

The database schema has changed, in order to support the fix for bug 782209 - "JMSMessageID generation inadequate".

To migrate an existing JDBC database to the new schema, run:


> cd %OPENJMS_HOME%\bin
> dbtool.bat -migrate -config ../config/openjms.xml


> cd $OPENJMS_HOME/bin
> -migrate -config ../config/openjms.xml

Back up your database prior to doing this!


  • no provision for migrating databases which are unsupported by dbtool
  • no provision for migrating a JDBM database


Merged openjms-rmi-client.jar into openjms-client.jar . The openjms-rmi-client.jar is no longer distributed.

See the Client JARS page for the list of JARS which must by included in order to use OpenJMS

update Replaced logging API with Commons-Logging

Replaced Tyrex and Proxool connection pooling support with Commons-DBCP .

Tyrex is no longer being actively maintained, and the latest versions of Proxool require JDK 1.3 (at time of writing).

User supplied connection pools may still be used.

add Added create_sapdb.sql script Thanks to Elias Martenson.
add Added JmsServer(Configuration) constructor, as per RFE 865658
fix Fixed bug 746875 - QueueBrowser fails to select messages
fix Fixed bug 759752 - Resumed durable subcriber after network outage fails to receive messages

Fixed bug 744331 - messages.messageBlob using wrong field type in PostgreSQL

Thanks to Juan Carlos Estibariz.
fix Fixed bug 753216 - Null pointer in connection.close()
fix Fixed bug 682160 - Connection.close() behaviour not compliant
fix Fixed bug 755234 - Discrepancy in LeaseManager configuration
fix Fixed bug 768543 - Deadlock btw LeaseManager and DestinationManager.collectGarb
fix Fixed bug 774128 - QueueDestinationCaches not gc'ed for temp destinations
fix Fixed bug 777419 - Deadlock in the tcp connector
fix Fixed bug 785039 - Client shutdown problem
fix Fixed bug 786163 - bad JMSDeliveryMode should cause InvalidSelectorException
fix Fixed bug 786622 - Invalid string literal in selector should throw exception
fix Fixed bug 788029 - Could not get message for handle error
fix Fixed bug 737037 - http transport ignores servlet path
fix Fixed bug 782209 - JMSMessageID generation inadequate.
fix Fixed bug 796633 - openjms.bat script terminates command prompt
fix Fixed bug 797284 - http connector: Failed to process request
fix Fixed bug 806378 - HTTPS connector configuration documentation incomplete
fix Fixed bug 806377 - HTTPS connector shouldn't convert host names
fix Fixed bug 811702 - Can administratively remove active durable consumer
fix Fixed bug 819212 - Failed to delete the message with id=ID:..
fix Fixed bug 823331 - Can't acknowledge message after republishing
fix Fixed bug 827545 - non-persistent msgs to non durable subscriber not expiring
fix Fixed bug 826378 - errors in oracle table script
fix Fixed bug 816895 - Exception in purgeMessages.

Fixed bug 831535 - Cannot connect to DB after idle several hours.

Support has been added to configure the connection pool to ensure invalid connections aren't used. See Connection pooling for more details.


Fixed bug 832157 - Remove LeaseManagerConfiguration.

As a consequence, the < LeaseManagerConfigu ration/ > element is no longer required in openjms.xml (specifying it will cause a FailedToCreateServerException).


Fixed bug 867522 - Non OpenJMS messages not supported.

Messages from other JMS providers may now be sent via OpenJMS.

fix Fixed bug 854819 - getAllDestinations() return value is documented incorrectly
fix Fixed bug 866885 - ConcurrentModificationException in server during sync recv
fix Fixed bug 856383 - queue names longer then 50 chars
fix Fixed bug 831469 - ClassCastException when using MDBs in Sun ONE AS7
fix Fixed bug 879302 - tcp connector threads remain active
fix Fixed bug 875922 - time to wait for retrieving message is incorrect
fix Fixed bug 875841 - Error performing JNDI lookups from Sun ONE App Server 7. Thanks to Bo Min Jiang.

Release 0.7.5 - May 10, 2003


Unified InitialContextFactory implementations into a single class.

To construct an InitialContext:

Hashtable properties = new Hashtable();
properties.put(Context.PROVIDER_URL, "rmi://myhost:1099/");
Context initial = new InitialContext(properties);

To specify to connect to the JNDI provider using TCP:

properties.put(Context.PROVIDER_URL, "tcp://myhost:3035/");

Using HTTP:

properties.put(Context.PROVIDER_URL, "http://myhost:8080/");

The old InitialContextFactory implementations ( RmiJndiInitialContextFactory, IpcJndiInitialContextFactory, IntravmJndiInitialContextFactory, HttpJndiInitialContextFactory, SslHttpJndiInitialContextFactory ) may still be used, but will be removed in a future release.


Added support for multiple connectors.

In order to configure multiple connectors, simply add a < Connector > entry for each desired connector.

Each connection factory must have a different name.

E.g, to configure tcp and rmi connectors:


     Connector scheme="rmi"
     QueueConnectionFactory name="RMIQueueConnectionFactory" /
     TopicConnectionFactory name="RMITopicConnectionFactory" /
     Connector scheme="tcp"
     QueueConnectionFactory name="TCPQueueConnectionFactory" /
     TopicConnectionFactory name="TCPTopicConnectionFactory" /



Simplified URLs for the RMI connector. The server path no longer needs to be specified in the URL.

E.g, when specifying the Context.PROVIDER_URL, rmi://myhost:1099/ is equivalent to rmi://myhost:1099/JndiServer

When specifying the administration URL, rmi://myhost:1099/ is equivalent to rmi://myhost:1099/JmsAdminServer


Simplified the Context.PROVIDER_URL for the HTTP and HTTPS connectors. The server path no longer needs to be specified in the URL.

E.g, http://myhost:8080/ is equivalent to http://myhost:8080/openjms/OpenJMSJndi

and https://myhost:8443/ is equivalent to https://myhost:8443/openjms/OpenJMSJndi


Changed the behaviour of the http connector. Previously, if the JndiConstants.HTTP_CLIENT_URL_PROPERTY property wasn't set, the value would default to http://localhost:8080/openjms/OpenJMSClient , which isn't very useful for most applications. It now defaults to the host and port of the server's web server.

fix Fixed bug 669033 - Can't shutdown embedded server via admin API
fix Fixed bug which prevented the use of an external JNDI provider
fix Fixed bug which prevented the registration of heirarchical topics
fix Fixed bug which prevented messages created via Session.createMessage() from being made persistent if their JMSType was null.
fix Fixed memory leak of Connection instances for the rmi and embedded connectors.
fix Fixed bug in the SSL connector, which wasn't requiring clients to authenticate themselves.
update Added code to support realtime database garbage collecti on for topics and queues. Previously we only supported queues. This option means that we can deprecate the garbage collection options on the DatabaseConfiguration element. This is only supported for JDBC since we will be deprecate support for JDBM in the near future
fix Made changes to JMSServerSession so that a message is only made persistent if the delivery mode is PERSISTENT and the destination is an administered destination
fix Added support for administered wildcard destinations and durable consumers. So a destination such as "*" can be defined and durable subscribers attached to it. Such a consumer will receive all messages destined for single level destinations (i.e topic1, jima, exolab etc) The existing wild carding mechanism is too limited.
fix Made a change to the connection garbage collection algorithm. Now a connection will only be cleaned up if there are 3 consecutive failures to a ping request. Connection GC is scheduled every minute. Previously, the server was occasionally, prematurely cleaning up connections even if the client was still active. This would be seen with the error "No consumer registered with Id XX".
fix Previously, when a client terminated abnormally while it has a receiver waiting on a synchronous receive, the server would display an error indicating that it could not send the notification when a message for that receiver became available. This would only happen if a message arrived almost at the same time as the client was terminated. This error message is not displayed at the moment.
update Modi fied the factory binding so that if "localhost" is specified as the server host name, it will be replaced with the IP address. This enables clients to connect from a different host, even if the server host name is configured with "localhost"
add Added the method JmsAdminServerIfc.destinationExists(String name) so a client can query whether a destination exists.

Release 0.7.4 - January 24, 2003

update Refactored the OpenJMS startup, shutdown and administration scripts. There is now a single script to perform these tasks: openjms.bat ( for unix). Helper scripts are provided:
  • - invokes start
  • - invokes stop
  • - invokes admin
  • startup.bat - invokes openjms.bat start
  • shutdown.bat - invokes openjms.bat stop
  • admin.bat - invokes openjms.bat admin
The original startjms script now invokes openjms run .
update The scripts now ignore the global CLASSPATH environment variable.

In order to specify JDBC driver jars, create a script named setenv.bat ( for Unix) in $OPENJMS_HOME/bin, and set the CLASSPATH in it. This will be called by the openjms script.

Eg, to configure the CLASSPATH for Oracle on Windows, setenv.bat might look like:
  rem set up the classpath to include the Oracle JDBC drivers            
  set CLASSPATH=c:/oracle/jdbc/lib/
update Made the -config switch to JmsServer and AdminMgr optional. If not specified, the configuration file:


will be used
fix Fixed memory leak in the server's handling of QueueBrowsers
fix Updated to ANTLR 2.7.2a2. ANTLR 2.7.1 was producing code in SelectorLexer which when compiled exceeded the JVM method size limit of 65535 bytes, resulting in a java.lang.ClassFormatError exception at runtime.
fix Fixed NPE in the intravm client. It wasn't handling 'is-alive' pings from the server.
update The < TcpsConfiguration > is now used to determine the port and jndiPort when the tcps connector is configured. In previous releases, it was ignored and the < TcpConfiguration > used instead.

Note : the default port for the tcps connector is 3031.
fix Fixed bug 665495: " receive blocks all sessions on tcp "

This bug, introduced in 0.7.3, also impacted the http connector.
fix Fixed bug 667595: " InvalidDestinationException for null destination "
fix Fixed bug 667590: " Incorrect default delivery mode "

NOTE: this may break existing clients which expect NON_PERSISTENT to be the default delivery mode .

Clients which specify the delivery mode will be unaffected.
fix Fixed bug 667581: " Incorrect default priority "

The priority previously defaulted to 0. It now defaults to Message.DEFAULT_PRIORITY (4)
fix Fixed bug 667597: " IllegalStateException for non-transacted commit "

Previously a JMSException was thrown if Session.commit() or Session.rollback() were invoked for a non-transacted session. It now throws a javax.jms.IllegalStateException
update Refactored the message cache in the engine. Messages are no longer cached at the MessageMgr level. Now they are cached at the DestinationCache level for queues and the CosumerEndpoint level for topics. This also reduces contention to single data structure and improves performance of the overall server.
update Modified the build.xml file and openjms so that it now compiles and runs under both JDK1.3 and JDK1.4.
update Modified the HTTP configuration so that the URL is now in the form of /openjms/[name-of-servlet ] . This changes simplifies the deployment of the openjms.war in Jakarta Tomcat since you do not to change the server.xml configuration file. This was tested against Tomcat v4.1.18
add Add create_informix.sql script, which was provided by Ludovic Pourrat.

Release - November 15, 2002

fix Fixed a FATAL issue with TCP, which preventing it from working in v0.7.3.

Build v0.7.3 is invalid for TCP.
add Added a sample openjms-wrapper.conf, which can be used with, to install it as an NT service. Modify the configuration file to suit your environment and then execute Wrapper.exe -i config-file to install the service.

Release 0.7.3 - November 10, 2002

fix Applied a patch by Christer Homer to fix bug #915
fix Fixed a problem with transacted sessions, queues and asynchronous listener. Messages were being acked more than once.
fix Fixed a problem with client ack mode and Qeueues. Messages were not being acknowledged correctly.
fix Messages for Queues are now removed from the database once they have been acknowledged. If your JMS application is simply using Queues there is no need to run the database garbage collection service.
fix Fixed bug 889 - Rollback on transacted session does not work correctly. If the session was rolled back the messages were never resent.
fix Fixed bug 669 - Receiving from a temporary topic within the scope of the same connection as the publisher does not work.
update Changed garbage collection policy so that when memory is low, persistent messages are removed from transient memory. They are then retrieved as required.
fix Fixed a bug with receive(time).
fix Fixed bug 966, which prevented the creation of a publisher with a null queue.

Release 0.7.2b14 - June 8, 2002

fix Fixed bug 888, rolling back a transaction with an asynchronous consumer.
fix Fixed the intermittent client disconnection problem for RMI. The problem was evident under heavy load and led to the client failing to contact t he server and assuming the server was unavailable. The solution was to retry the request.