##### OpenJMS

- Overview
- Downloads
- Release Notes
- Getting Started
- User Guide
- Administrator Guide
- Developer Guide
- FAQ

##### Search OpenJMS

##### Project Documentation

- About
- Project Info
- Project Reports
  - Project License
  - FAQs
  - Changes
- Development Process

##### Legend

- External Link
- Opens in a new window

## Release History

Version | Date | Description
--- | --- | ---
0.7.7-dev | in CVS |
0.7.6.2 | in CVS |
0.7.6.1 | May 7, 2004 |
0.7.6 | January 29, 2004 |
0.7.5 | May 10, 2003 |
0.7.4 | January 24, 2003 |
0.7.3.1 | 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

Type | Changes | By
--- | --- | ---
| 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 0.7.6.2 - in CVS

Type | Changes | By
--- | --- | ---
| Fixed bug 996959 - ConcurrentModificationException in ConsumerManager |
| Fixed bug 984891 - ConcurrentModificationException on server shutdown. Thanks to Andre Gebers. |
| 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. |
| Fixed bug 964267 - column indexes, names column in inserts, close all db object Thanks to Michael Jaszczyk. |

## Release 0.7.6.1 - May 7, 2004

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

## Release 0.7.6 - January 29, 2004

Type | Changes | By
--- | --- | ---
| 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: Windows
    > cd %OPENJMS_HOME%\bin

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

    > dbtool.sh -migrate -config ../config/openjms.xml
Back up your database prior to doing this! Limitations 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 |
| 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. |
| Added create_sapdb.sql script Thanks to Elias Martenson. |
| Added JmsServer(Configuration) constructor, as per RFE 865658 |
| Fixed bug 746875 - QueueBrowser fails to select messages |
| 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. |
| Fixed bug 753216 - Null pointer in connection.close() |
| Fixed bug 682160 - Connection.close() behaviour not compliant |
| Fixed bug 755234 - Discrepancy in LeaseManager configuration |
| Fixed bug 768543 - Deadlock btw LeaseManager and DestinationManager.collectGarb |
| Fixed bug 774128 - QueueDestinationCaches not gc'ed for temp destinations |
| Fixed bug 777419 - Deadlock in the tcp connector |
| Fixed bug 785039 - Client shutdown problem |
| Fixed bug 786163 - bad JMSDeliveryMode should cause InvalidSelectorException |
| Fixed bug 786622 - Invalid string literal in selector should throw exception |
| Fixed bug 788029 - Could not get message for handle error |
| Fixed bug 737037 - http transport ignores servlet path |
| Fixed bug 782209 - JMSMessageID generation inadequate. |
| Fixed bug 796633 - openjms.bat script terminates command prompt |
| Fixed bug 797284 - http connector: Failed to process request |
| Fixed bug 806378 - HTTPS connector configuration documentation incomplete |
| Fixed bug 806377 - HTTPS connector shouldn't convert host names |
| Fixed bug 811702 - Can administratively remove active durable consumer |
| Fixed bug 819212 - Failed to delete the message with id=ID:.. |
| Fixed bug 823331 - Can't acknowledge message after republishing |
| Fixed bug 827545 - non-persistent msgs to non durable subscriber not expiring |
| Fixed bug 826378 - errors in oracle table script |
| 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. |
| Fixed bug 854819 - getAllDestinations() return value is documented incorrectly |
| Fixed bug 866885 - ConcurrentModificationException in server during sync recv |
| Fixed bug 856383 - queue names longer then 50 chars |
| Fixed bug 831469 - ClassCastException when using MDBs in Sun ONE AS7 |
| Fixed bug 879302 - tcp connector threads remain active |
| Fixed bug 875922 - time to wait for retrieving message is incorrect |
| 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

Type | Changes | By
--- | --- | ---
| Unified InitialContextFactory implementations into a single class. To construct an InitialContext:
    Hashtable properties = new Hashtable();

    properties.put(Context.INITIAL_CONTEXT_FACTORY,

                   "org.exolab.jms.jndi.InitialContextFactory");

    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:
         <

         Connectors;

         >

         <

         Connector scheme="rmi"

         >

         <

         ConnectionFactories

         >

         <

         QueueConnectionFactory name="RMIQueueConnectionFactory" /

         >

         <

         TopicConnectionFactory name="RMITopicConnectionFactory" /

         >

         <

         /ConnectionFactories

         >

         <

         /Connector

         >

         <

         Connector scheme="tcp"

         >

         <

         ConnectionFactories

         >

         <

         QueueConnectionFactory name="TCPQueueConnectionFactory" /

         >

         <

         TopicConnectionFactory name="TCPTopicConnectionFactory" /

         >

         <

         /ConnectionFactories

         >

         <

         /Connector

         >

         <

         /Connectors

         >
| 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. |
| Fixed bug 669033 - Can't shutdown embedded server via admin API |
| Fixed bug which prevented the use of an external JNDI provider |
| Fixed bug which prevented the registration of heirarchical topics |
| Fixed bug which prevented messages created via Session.createMessage() from being made persistent if their JMSType was null. |
| Fixed memory leak of Connection instances for the rmi and embedded connectors. |
| Fixed bug in the SSL connector, which wasn't requiring clients to authenticate themselves. |
| 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 |
| 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 |
| 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. |
| 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". |
| 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. |
| 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" |
| Added the method JmsAdminServerIfc.destinationExists(String name) so a client can query whether a destination exists. |

## Release 0.7.4 - January 24, 2003

Type | Changes | By
--- | --- | ---
| Refactored the OpenJMS startup, shutdown and administration scripts. There is now a single script to perform these tasks: openjms.bat ( openjms.sh for unix). Helper scripts are provided: startup.sh - invokes openjms.sh start shutdown.sh - invokes openjms.sh stop admin.sh - invokes openjms.sh 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 . |
| The scripts now ignore the global CLASSPATH environment variable. In order to specify JDBC driver jars, create a script named setenv.bat ( setenv.sh 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/classes12.zip
| Made the -config switch to JmsServer and AdminMgr optional. If not specified, the configuration file: ${openjms.home}/config/openjms.xml will be used |
| Fixed memory leak in the server's handling of QueueBrowsers |
| 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. |
| Fixed NPE in the intravm client. It wasn't handling 'is-alive' pings from the server. |
| 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. |
| Fixed bug 665495: " receive blocks all sessions on tcp " This bug, introduced in 0.7.3, also impacted the http connector. |
| Fixed bug 667595: " InvalidDestinationException for null destination " |
| 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. |
| Fixed bug 667581: " Incorrect default priority " The priority previously defaulted to 0. It now defaults to Message.DEFAULT_PRIORITY (4) |
| 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 |
| 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. |
| Modified the build.xml file and openjms so that it now compiles and runs under both JDK1.3 and JDK1.4. |
| 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 create_informix.sql script, which was provided by Ludovic Pourrat. |

## Release 0.7.3.1 - November 15, 2002

Type | Changes | By
--- | --- | ---
| Fixed a FATAL issue with TCP, which preventing it from working in v0.7.3. Build v0.7.3 is invalid for TCP. |
| Added a sample openjms-wrapper.conf, which can be used with http://wrapper.sourceforge.net, 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

Type | Changes | By
--- | --- | ---
| Applied a patch by Christer Homer to fix bug #915 |
| Fixed a problem with transacted sessions, queues and asynchronous listener. Messages were being acked more than once. |
| Fixed a problem with client ack mode and Qeueues. Messages were not being acknowledged correctly. |
| 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. |
| Fixed bug 889 - Rollback on transacted session does not work correctly. If the session was rolled back the messages were never resent. |
| Fixed bug 669 - Receiving from a temporary topic within the scope of the same connection as the publisher does not work. |
| Changed garbage collection policy so that when memory is low, persistent messages are removed from transient memory. They are then retrieved as required. |
| Fixed a bug with receive(time). |
| Fixed bug 966, which prevented the creation of a publisher with a null queue. |

## Release 0.7.2b14 - June 8, 2002

Type | Changes | By
--- | --- | ---
| Fixed bug 888, rolling back a transaction with an asynchronous consumer. |
| 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. |