What's New ?
This section describes the new features introduced in the FioranoMQ 10.1.0 release.
JMS2.0 Implementation in Native C#
Now C# runtime library natively supports JMS 2.0 apis.
Support for limiting JMS resources
Support has been added to limit the number of Temporary destinations, Sessions, Producers, and Consumers on a per Connection basis.
Message Grouping Performance Improvement
Message Grouping performance is improved for short lived message groups.
IP Address filtering
Support has been added to allow access to the Fiorano broker by a list of IP addresses or a range. Also added is a provision to add/delete/update IP addresses through the web console and Admin APIs.
LMS support for FioranoMQ Bridge
Large Message Support has been added for a FioranoMQ Standalone bridge to handle LM transfer between end consumers connected to different Servers.
Asynchronous Sending in NativeC++ (JMS2.0)
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.
What's Changed?
This section describes the changes done in the FioranoMQ 10.1.0 release.
- The 'Configs.cfg' file usage is by default disabled (renamed to 'Configs_cfg') to ensure that only the Configs.xml file is used, avoiding configuration clashes in few specific cases. However, based on the requirement the Configs..cfg can be restored back by renaming it to 'Configs.cfg'.
- The compilation switch '_SOLARIS_' is now generalized to '_UNIX_' flag for compiling C/C++ applications. For more information, refer to the compilation scripts provided along with the package.
Resolved Issues
This section describes some of the customer issues resolved in the Fiorano 10.1.0 release
- System resources are not cleaned up if the connection limit at the user level is reached. If 'auto re-validation' is enabled, the number of sockets keep increasing irrespective of the maximum connection limit per user and also irrespective of the maximum connection count set in the socket acceptor. Also, there is an increase in the number of corresponding (client worker) threads and memory utilized.
- The receiver stopped receiving messages when the server switches from standalone to active state in Replicated HA mode.
- [SI 5187, SI 5557] FioranoMQ Replicated HA Server logs error - "Invalid index supplied for purge by runtime." The following major issues are handled:
- Messages not getting rolled back in the passive server if the receiver is closed during the active transition.
- Active transition goes in a loop because of improper browser sync up.
- Memory leak in passive server leading to decrease in performance over time.
- Active server not able to do complete replication of DB to passive and waits infinitely during SDB replication.
- In Replicated HA mode, Active server switches to STANDALONE, inspite of the fact that the passive server is still running.
- Replicated HA ACL sync up thread leak.
- GMS Objects leak in replicated HA's Passive server at the time of removing dead objects when the Active Server is restarted.
- [SI#5452]Database Recovery results in negative message count for Durable Subscribers.
- [SI# 5619] Topics not accessible after DB recovery is performed on the broker, requiring Database recovery support for LVC topics.
- [SI 5667] Unnecessary state switching during cable pullout in Shared HA from Active to Passive and then to Active when it is not required.
- [Java/ C++ Native] Client's Reconnect thread goes into an infinite loop in the following cases:
- If the Session, Consumer, and Producer limit is reached during re-validation.
- When a producer sending messages to a temporary queue re-validates.
- [SI #5429, SI #5479, SI #5527] Client Log statements should be logged at ERROR level only if there is a potential issue.
- [5572, 5573, 5574][C/C++] Ping Thread is not created on a per connection basis, which leads to the issue of ‘unable to detect connection loss’ when multiple connections are used under a single client application.
- Messages are not received when multiple Receivers are configured with same preferred groups.
- Deadlock occurs in client RTL when receiver.receive() and connection close() are done in parallel.
- [Java/ C++ Native] Receiver stops receiving messages if the reconnect thread partially revalidates the Receiver.
- Queue-Receiver-Handle leak which shows an extra count in the Web console when multiple receivers are used on a single Queue and if the server is shutdown abruptly.
- [SI # 5700] Durable Subscriber state is shown as passive on updating the number of deliverable messages even when it is running and receiving messages in a specific case.
- [SI# 5641] StackOverflow error while fetching ACL edited destinations when there is a cyclic dependency between two groups.
- Connection Factory parameters are not getting updated properly using the Admin Objects tool.
- Server logs are now updated with detailed information such as destination name, client id, etc. when Publisher/Subscriber creation fails.
- [C#] JMSXGroupSeq and JMSXGroupID properties are not supported in C#Rtl.
- [C++ Native] Crash Occurs at Topic_Publisher (JMS2.0), when using slow subscriber(s).
- [C++ Native/Java RTL] IllegalStateException is not thrown when Session/Connection's close/stop call is invoked from MessageListener's OnMessage.
- Calling Connection/Context close with Auto-Revalidation enabled and AllowDurableConnections disabled leaves a thread still open.
- Temporary Topics are not getting deleted at the time of server shutdown.
- Delivery Count is shown as '1' in spite of the message redelivery flag being set to 'true'.
- DepthMonitoringEnabled parameter of a Queue is not getting updated when changed through the AdminObjects tool.
- Unable to load Security Realm objects from XML file, if non-existent users are added to the groups during HA failover or start up of brokers.
- Delivery delayed messages for a Durable Subscriber must not be browsed until its delivery time.
- Shared HA Secondary server is not activating immediately after acquiring the lock file.
- JMSRedelivered flag was not set for redelivered messages in a special scenario when Receivers with transacted sessions are used.
- Topic Connection close after re-validation leads to Deadlock while using NP Messages with batching enabled.
- QueueConnections are not closed gracefully even if the shutdown hook is enabled at the connection factory level.
- [Java / C++ Native] INVALID_CONNECTION_HANDLE exception is thrown when connection.start() is called in a specific scenario where the Broker goes down after connection creation and comes back before connection start.
- Producer not able to send messages to CSP (Client Side Persistence) because of "Object has not been started or probably shutdown" error.
- [Java/ C++ Native / C#] JMSTimeStamp and JMSMessageID values are not set properly from Producer when toggled between true or false for each message.
- Topic Publisher thread hangs infinitely while sending Non-Persistent messages rarely.
- Unsuccessfully revalidated Connections/Sessions/Producers/Consumers should not be allowed to perform any further function. If a Session is not able to revalidate because of a LIMIT_REACHED exception we still allow the user to create a new Producer from that session.
- [Java/ C++ Native] Unneccessary creation and deletion of 'NPBatchThread' for CSP (client side persistence) Sender, used for flushing messages from CSP to the Broker.
- [Java/ C++ Native] JMSProducer instance is not made lightweight as per JMS specifications and the instances are leaked for every call to the createProducer() api.
- [Java/ C++ Native]TextMessage with 'null' body must be allowed to ensure consistency with the JMS specification.
- [SI#5745] Additional logging needed while processing NP Messages to understand if there is a block at the Server Queue level.
- PSQ anomalies when the size limit is exceeded and the DropOldestMessage flag is enabled and sometimes the latest message is dropped.
- Issues with Shared Subscriptions regarding message redelivery and loss in a few specific cases.
- [C++ Native] Few Connections are not able to reconnect to the server while using multiple connections in a single application.
- Exception in Repeater in HA mode when multiple URLs are provided.
- Unable to create a JMS Selector with an arithmetic expression on the left side of a comparison operator. E.g: JMSTimestamp > (STARTTIME + 10000)
- Connections are not displayed in the web console when LPC is enabled.
- [5641] Web console support to restrict access to Fiorano broker by IP address.
- 'Administrators' group should have at least one user and the last user must not be allowed to delete.
- Config file generated from getAdminObjConfigs() JMX api call fails validation.
- Admin privileges are not getting effected for all the users of a group when added to the Administrators group.
- Connection Factory properties to be added and corrected for the Admin Objects feature.
- [C#] NullReferenceException thrown : permissions are denied to create a CSP cache folder instead of a graceful error message.
- [C#]NullReferenceException occurs when messages are sent using a transacted topic session in serverless mode.
- [C#] If a MessageListener’s onMessage method calls stop or close on its own Connection, close on its own Session, or stop or close on its own JMSContext, then the JMS provider must throw an IllegalStateException.
- [C#] Non-Persistent message loss for Topic Durable Subscriber when Topic Publisher is closed repeatedly.
- [C++ Native] In Map Message, functionality to read a double or float value as a string needs to be incorporated.
- [C++ Native] Exceptions are not handled properly when max queue/topic limit is reached in the server.
- [C++ Native] JMSConsumerClosed Exception thrown while JMSContext is closing.
- [C++ Native] Expired Messages continue to be received while using a synchronous receive call in Queues.
- [C++ Native] Exception is not thrown while creating a subscriber on a temporary topic, created by some other connection.
- [C++ Native] SetDeliveryDelay is not working in UnifiedConnectionFactory.
- [C++ Native] When the Connection is first created, it should be uninitialized by default. But in NativeC++ it is initialized to a default clientID before calling any method on this Connection.
- [C++ Native] Application crashes (instead of issuing a graceful error message) if permissions are denied to create the CSP cache folder.
- [C++ Native] Messages of type Map, Bytes, Stream which are stored in Client Side Persistence cannot be flushed to the FMQ Server.
- [C++ Native] Segmentation Fault in Async Queue Sender while sending infinite messages.
- [C++ Native] Race conditions and Publisher thread hang when publishing Non-Persistent messages.
- [C++ Native] Poisonous messages are not sent to SYSTEM_BACKOUT_QUEUE
- [C++ Native] Message redelivery in case of Durable Subscribers when Server is restarted.
Old C++ RTL
- [C/C++] Receiver stops receiving messages if the reconnect thread partially revalidates the Receiver.
- [C/C++] Application crash occurs while sending messages to CSP Cache when multiple Producers are used on a single destination.
- [C/C++] Exceptions are not handled properly when the max queue/topic limit is reached in the server.
- [C/C++] Error 'QC_NOT_ALIVE_ERROR' occurs when messages of size > 50MB are received with a timeout.
- [C/C++] Expired Messages continue to be received while using a synchronous receive call in Queues.
- [C/C++] Connection revalidation issues when multiple connections are used in a single application due to usage of unsafe multithreaded system calls.
- [C/C++] An application crash occurs while processing corrupted Csp Cache messages.
- [C/C++] Unneccessary creation and deletion of 'NPBatchThread' for CSP (client-side persistence) Sender, used for flushing messages from CSP to the Broker.
- [C/C++] Unsuccessfully revalidated Connections/Sessions/Producers/Consumers should not be allowed to perform any further function. If a Session is not able to revalidate because of LIMIT_REACHED exception we still allow the creation a new Producer from that session.
- [C/C++] Client's Reconnect thread goes in an infinite loop in the following cases:
- If the Session, Consumer, and Producer limit are reached during re-validation.
- When a producer sending messages to a temporary queue re-validates.
- [C/C++] Admin Apis should be added for restricting Fiorano server access by IP Address.
- [C/C++] Application crashes (instead of issuing a graceful error message) if permissions are denied to create CSP cache folder instead of a graceful error message.
- [C/C++] Messages are getting redelivered for Asynchronous receiver in AUTO Acknowledge mode when the Server is restarted.
- [C/C++] Application crash occurs while resetting message listener to none, the apis setMessageListener(NULL), connection->setExceptionListener(NULL), connection->setAdvisoryMessageListener(NULL) result in a crash.
- [C/C++] Following Initial context creation apis are not working properly:
- newInitialContext(),
- newInitialContext1(),
- newInitialContext_HTTP(),
- newInitialContext_SSL(),
- newInitialContext1_SSL()
- [C/C++] JMSTimeStamp and JMSMessageID values are not set properly from Producers when toggled between true or false for each message.
- [C/C++] Exception while sending a message with a Producer whose default destination is NULL.