Release History

Version Date Description
0.7.6 January 29, 2003
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

Release 0.7.6 - January 29, 2003

Type Changes By
add Added authentication support, contributed by Knut Lerpold. For details, see the Configuring Security document.
update

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

update

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
update

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, contributed by 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
fix

Fixed bug 744331 - messages.messageBlob using wrong field type in PostgreSQL, contributed by 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 conf iguration
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.
fix

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.

fix

Fixed bug 832157 - Remove LeaseManagerConfiguration.

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

fix

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, contributed by Bo Min Jiang.

Release 0.7.5 - May 10, 2003

Type Changes By
update

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.

add

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>
          

update

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

update

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

update

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 collection 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 Modified 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

Type Changes By
update 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 .
update 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
        
update Made the -config switch to JmsServer and AdminMgr optional. If not specified, the configuration file:

${openjms.home}/config/openjms.xml

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 openjm s.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 0.7.3.1 - November 15, 2002

Type Changes By
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 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
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

Type Changes By
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 the server and assuming the server was unavailable. The solution was to retry the request.