What's New?
This section describes the new features introduced in the FioranoMQ 10.0.0 release.
JMS 2.0 - Major features supported in FioranoMQ10
Shared Subscriptions - Multiple consumers now allowed on the same topic subscription
In JMS 1.1, a durable or non-durable topic subscription was not permitted to have more than one consumer at a time. For improved scalability, this restriction has been removed in JMS 2.0, introducing the concept of Shared Consumers. All shared consumers have a unique “Shared Subscription Name” and each message from the subscription will be delivered to only one of the consumers on that subscription.
These are further divided into -
- Non-durable subscriptions
- Durable subscriptions
Sending messages asynchronously
New send methods have been added to MessageProducer which allow messages to be sent asynchronously. These methods return immediately and perform the send in a separate thread without blocking the calling thread. When the send is complete, a call-back method is invoked on an object supplied by the caller.
Delivery delay
A message's delivery time is the earliest time when a JMS provider may deliver the message to a consumer. The provider must not deliver messages before the delivery time has been reached. If a message is published to a topic, it will only be added to a durable or non-durable subscription on that topic if the subscription exists at the time the message is sent.
JMSXDeliveryCount
Support has been added for message property JMSXDeliveryCount. This means that JMS providers must set this property when a message is delivered to the number of times the message has been delivered.
New methods to create a session
Two new methods are added to javax.jms.Connection to create a session.
createSession(int sessionMode)
This method simplifies application code, providing the same functionality as the method createSession (boolean transacted, int acknowledgeMode) but with a single argument.
createSession()
This is intended for use in a Java EE web or EJB container in the case when there is an active JTA transaction, when the sessionMode supplied to createSession(int sessionMode) is ignored.
New createDurableConsumer methods
The javax.jms.Session interface has been extended to add two createDurableConsumer methods which return a MessageConsumer. These are intended to replace the existing createDurableSubscription methods which return a domain-specific TopicSubscriber.
Client ID optional on shared durable subscriptions
In JMS 2.0, shared durable subscriptions will not have the restriction for the client identifier to be set when creating or activating a durable subscription.
Use of AutoCloseable
The Connection, Session, MessageProducer, MessageConsumer and QueueBrowser interfaces have been modified to extend the java.lang.Autocloseable interface. This means that applications can create these objects using a Java SE 7 try-with-resources statement which removes the need for applications to explicitly call close() when these objects are no longer required.
Simplified API
Support has been added for three new objects JMSContext, JMSProducer and JMSConsumer which together combine the functionality of the existing Connection, Session, MessageProducer and MessageConsumer objects. Apart from that, there are several other classes related to handling messaging or exceptions have been introduced, such as -
- javax.jms.CompletionListener
- javax.jms.IllegalStateRuntimeException
- javax.jms.InvalidClientIDRuntimeException
- javax.jms.InvalidDestinationRuntimeException
- javax.jms.InvalidSelectorRuntimeException
- javax.jms.JMSRuntimeException and many more.
New method to extract the body directly from a Message
Two new methods have been added to Message:
<T> T getBody(Class<T> c)
boolean isBodyAssignableTo(Class c)
The getBody method returns the message body as an object of the specified type. This provides a convenient way to obtain the body from a newly-received Message object. The isBodyAssignableTo method is a companion method that can be used to determine whether a subsequent call to getBody would be able to return the body of a particular Message object as a particular type.
Activation properties
"MDB activation properties" defines a set of activation properties for use with JMS message-driven beans (Java EE Connector Architecture specification, version 1.6).
Support for Queue/Topic Shutdown and Restart
Support has been added for Queue/Topic Shutdown or Restart. This feature will be helpful in changing destination configurations at runtime and getting it effected by just restarting the particular destination and only the client applications which use the destination, without the need to restart complete FMQ Server.
Native C++ Runtime Library
FioranoMQ 10 comes up with new Native C++ Client Runtime Library, with better performance and stability. It also supports all JMS2.0 APIs other than the Asynchronous Message Sending feature.
Resolved Issues
This section describes some of the customer issues resolved in the Fiorano 10.0.0 release
- QueueBrowser leak when 'QueueCleanup' is enabled to delete expired messages.
- Negative values are updated for deliverable and undeleted fields on a Queue
- Creating and Deleting a large number of connection factories leads to a deadlock in the Server
- HA Server transition state goes in a loop if the Realm module fails to load successfully in the Passive server.
- Subscriber application stops receiving in client_ack mode after processing a few thousand messages
- Replicated HA Server transition fail leads to database corruption in the Passive server.
- [SI# 5194] In the C# runtime library, the connection disconnected Advisory message is not getting triggered in topic connection
- [SI# 5022] 9.5.1 DB migration tool corrupts table file and also has few other issues when data is migrated from 9.4.1 to 9.5.1
- [SI# 5031] Changing the default location of the CSPCache in C RTL causes a Segmentation Fault
- In Transacted Session, a crash occurs at the Sender side when a connection is closed and deleted.
- A crash occurs in C RTL when one tries to create a Publisher with a Duplicate Client-id
- In the C++ RTL, Unwanted Exceptions are printed on the Client application during the onAdvisoryMessage call.
- C++ RTL. In Client Ack Mode, messages are redelivered even after the acknowledgment is sent.
- A Memory leak observed in the Server when Queue Connections are created and closed in large numbers
- Connection Count doesn't display the default values when a new user is added through studio
- [SI#4957] The DB Recovery tool should analyze and recover LVC (LastValueCache) data
- [SI #5048] Prevent non-admin users from sending/consuming messages in the WMT (Web Management Tool).
- Original Timestamp should be displayed while browsing the message in DeadMessageQueue
- [SI:5142] Corrupted master file should be recovered during server start-up
- [SI#5142] Db Analysis gives incorrect summary when MasterFile is corrupted
- Issues with message store as Oracle database when messages of size more than 1 KB are used.
- The receive timers for a closed session continue to advance, so receives may time out and return a null message while the session is stopped.
- setJMSExpiration API should not have any effect when it is set from the Client application.
- The connection consumer count should be updated in WMT under Queues/Topics.
- Under ConnectionConsumer, Reconnect thread is started when MDB throws a runtime exception
- Setting clientID after creating a connection consumer from the connection should throw an IllegalStateException
- Topic Durable Subscriber receives duplicate messages in non-persistent message scenario
- [SI#4920] Fiorano Resource Adapter should work with JBoss AS 7
- Negative count for PassiveDurableSubscriber in Web Console while creating and closing the clients continuously
- No destination is displayed in WMT against a Queue Connection Consumer.
- Memory Leak observed in Queue Connection Consumer
- FMQAdvisoryMessageListener should be used in FMQ Resource Adapter'
- Dups_ok mode is not handled for ConnectionConsumer
- Duplicate Client id observed on a topic destination in spite of the fact that ensureUniquenessOfClientID is set.
- java.lang.RuntimeException when two or more MDBs are deployed in an Application Server
- [SI# 5090] High CPU usage when filePath at subsystem (queue and topic) level is set to null
- Web Console not listing JMS Connections when MDBs are attached
- Memory Leak in PtP/PubSub Message Monitor
- High memory usage when TimeDuration in Ptp/PubSub Message Monitor is set to a higher value
- [SI:5137] Unable to delete/lookup queue if the queue name has space at the end
- [SI# 5107] Subscriber's Receive Worker thread exits in spite of the active connection
- [SI# 5162] Java rtl logging must be changed to use SLF4J instead of Log4J
- In the case of large messages, the Unacknowledged message buffer inside RTL is not cleared even after message acknowledge call in client ack mode.
- [SI 5235] ClientID is not being reset in the Pinger object after the connection revalidation is successful
- HA Status retrieval thread should not exit abruptly in case of any error.
- [SI 5167] "Failed to read next message from remote server " warning is logged for each readNext call to the passive server.
- Memory Leak observed in QueueConfig when the LVC feature is used.
- [SI#4860] NullPointerException in FioranoTopicSession
- If one or more of the connection's session's message listeners is processing a message at the point when connection close is invoked, all the facilities of the connection and its sessions must remain available to those listeners until they return control to the JMS provider.
- [SI#4501] NullPointerException in FioranoMessageProducer
- 'UnackedQueue Buffer limit exceeded' exception is not thrown in asynchronous receiver case when messages are not acknowledged in Transacted and Client_Ack modes.
- In a Transacted Session, Subscriber hangs while receiving the messages.
- JMSXGroupSeq and JMSXGroupID properties are not supported in CRtl
- Load Admin Objects feature should update the configurations without having to restart the server.
- Duplicate file handles for PTP DB master table
- Non-Persistent based db for queue should get deleted if the queue is deleted
- Queue Configuration parameters RedeliveryTriesOnListenerException and DelayInMsgDeliveryOnListenerException not getting reflected in the receivers if they are set to a non-default value.
- [SI# 5142] Passive server must not access a shared DB under Shared HA mode.
- [SI# 5158] Make Broker configuration parameter for client SocketTimeout independent from PingInterval
- Setting setJMSRedelivered header of Message by client application should not have any effect.
- [SI 4820] Message Selection On Long Property doesn't work with more than 16 digits.
- PSQ directories are not getting deleted in a rare scenario
- [SI#4957] Possible loss of information during master table compaction in the FMQ file database.
- [SI#4957] Queue memory leak in def3 queue persistent layer
- [SI#4957, LVC] Duplicate cache entries for the same LV-Cache key, if the deletion fails, while updating LV-Cache for a particular key.
- ExThread object leak while creating AdminConnections
- [SI#4784] 100% CPU usage in a specific scenario when a large number of Queues are created and deleted continuously
- [SI # 5311] Performance issues with large numbers of message groups that are unique and short-lived.
- [SI # 5161] JMSXGroupSeq integer property must accept -1 value, using setIntProperty/setObjectProperty
- StackOverflow while executing JMX methods which return Enumeration
- Exception not thrown back to the client application when IgnoreNullLVCKey is set to false
- TopicConnection references are illegally stored in the connection-level buffer.
- New JMX API for displaying information about shared durable/non-durable consumers