Release Date: Monday, November 06, 2017

Release Highlights

  • Improvements in channel key resolution configuration.
  • JMS Binding improvements.

 

Compatibility Notes

ADM Compatibility Level: 3.8.1 (Unchanged) (see ADM Compatibility Matrix) The Adm Compatibility level last changed in Core X 3.8.64

(warning) The following issues have compatibility implications:

Change Log

New Feature

XPLATFORM-1837 - Create TibcoEmsMessageBusBinding with support for Guaranteed Messaging

This release provides a tibco ems message bus binding provider that supports Guaranteed Qos. The ems provider can be enabled by replacing the jms://... with tibems://.

XPLATFORM-1838 - Allow JMS binding to make connection retry attempts

This release changes the JMS to allow it to make connection retry attempts when the initial connection attempt to the broker fails. Prior to this release, only a single connection attempt would be made which may not be enough in the event that the message broker has not detected the connection drop of a primary application instance when a backup takes over. Two new binding properties were introduced to support this functionality:

  • connection_open_retry_count the number of connection retries to make after a failed attempt to open the JMS Connection. Defaults to 10
  • connection_open_retry_interval the interval at which connection retry attempts are made in seconds. Defaults to "1s"
    Compatibility Notes:

     

    This change will increase the amount of time it will take for an application to detect that another instance is already connected to the message bus. Setting connection_open_retry_count=0 for the bus will revert to the previous behavior.

XPLATFORM-1839 - Treat empty string variables in dynamic topic as null

 

This release allows treating channel key fields from either a message or key resolution table that are resolved as an empty, 0 length string, to be treated as null. This functionality can be enabled by setting the environment property: nv.sma.treatemptykeyasnull.

See Also: The Talon Manual

 

Improvement

XPLATFORM-1832 - Add diagnostic packet dump for corrupted packets on the store replication connection

This release produces a hex dump file when a corrupted packet is received on the store's replication connection which can be useful in diagnosing software or network corruption in replication.

<15,7868,MyComputer> 20171101-14:25:48:192 (sev)...Corrupted packet dump written to C:\Users\Admin\AppData\Local\Temp\PktCorruption6937598095008127104.dump
<15,7868,MyComputer> 20171101-14:25:48:192 (wrn)...Failure during read/deserialize/dispatch [com.neeve.pkt.EPktCorruptException: deserialization error: corrupt data stream [invalid header magic number: 56493]]. Failing endpoint...
<15,7868,MyComputer> 20171101-14:25:48:192 (wrn)...com.neeve.pkt.EPktCorruptException: deserialization error: corrupt data stream [invalid header magic number: 56493]
	at com.neeve.pkt.PktHeader.preDeserialize(PktHeader.java:352)
	at com.neeve.pkt.PktFactory.createPacket(PktFactory.java:1126)
	at com.neeve.link.network.LnkNwPeerEndpointInputBuffer.readDeserializeAndDispatch(LnkNwPeerEndpointInputBuffer.java:267)

Change

XPLATFORM-1818 - Channel Filter cleaning should allow common wildcard characters

This release changes channel filter cleaning to account for valid wildcard characters for the bus binding in question. With this change the following characters will not be changed to an '_' in a channel filter level when nv.sma.cleanchannelfilter=true:

  • Solace Binding: A '>' will not be replaced if it represents the whole topic level and a '*' will not be replaced if it is the last character in the topic level.
  • Loopback Binding: A filter level of "..." will not be replaced nor will a '*' found anywhere in the topic level.
  • ActiveMQ JMS Binding:: A filter level of ">" or "*" will not be replaced if they represent the whole topic level.

Otherwise any characters that are not alpha-numeric will be replaced.

XPLATFORM-1834 - nv.sma.cleanchannelfilter should default to false

This release changes the default value of nv.sma.cleanchannelfilter to be false rather than the value specified for nv.sma.cleanmessagekey.

The environment property nv.sma.cleanchannelfilter was introduced in 3.7 to allow illegal characters to be replaced with an '_' when applying channel filters in the same fashion that such characters are replaced during channel key resolution. The default value of this property in 3.7 was defaulted to the value used for nv.sma.cleanmessagekey with the rationale that applications would most likely want to clean filters if they are cleaning keys, but it is not necessarily true that all application would want to clean filters since it has more control over how channel filter values are set vs. those values resolved from a message.

XPLATFORM-1835 - Allow setting JMS Client ID on JMS Binding Connections

This release changes the behavior of the JMS binding to set a JMS ClientID of 'X-SMA-<busname>-<bususername>' on JMS message bus binding connections, where <bususername> is the name of the application if the bus is used in a Talon Application.

Setting a JMS Client is a useful safeguard against a primary and backup instance both assuming a primary role when the application is configured with a messagingStartFailPolicy of FailIfOneBindingFails.

The following new binding descriptor properties were introduced to control setting the client id for jms connections:

  • set_client_id: Controls whether the binding will set the JMS ClientID for JMS connections. (default: true)
  • use_legacy_client_id: causes the client id to be set to <bususername><busname> rather than X-SMA<busname>-<bususername> (prior to this release the activemq binding used this client_id implicitly. (default: false)
  • client_id: can be set an explicit client id. (default: not set)
    Compatibility Notes:

     

    If the JMS connection is created from a JNDI connection factory that provides a pre configured JMS ClientID it may cause the JMS provider to throw an exception when the client id is set. *Consequently, it is importan

(error) Prior to this release the ActiveMQ specific provider set a client of <username><busname>. The change to "X-SMA<busname>-<bususername>" is a breaking change in this case for applications that have existing durable subscriptions associated with the old Client ID. The property use_legacy_client_id=true can be set to use the old client id.

Bug

XPLATFORM-1828 - Looser entity inlining

 

The <inline> tags are processed before <field> and <fieldRef> tags. This affects redefining/merging field refs. A directly placed fieldRef will redefine the same fieldRef found in inlined entity, because it is always processed after inlined entity.

XPLATFORM-1829 - Outgoing topic corrupted after previous error

This release resolves an bug in which an exception thrown during message key resolution did not reset the key builder used for building dynamic topics. Consequently, if the application is operating with an exception handling policy of LogExceptionAndContinue, a subsequent send call would result in the resolved key containing a portion of the previously partially resolved key.

XPLATFORM-1830 - Provide better errror when disallowing ADM Message Inlining

Prior to this release the ADM code generator did not throw an exception if an ADM model attempts to inline a message type into another message which is not supported. This release changes ADM to throw an exception when attempting to inline a message type.

XPLATFORM-1836 - JMS Binding doesn't clean up connection if there is a failure during open

This release fixes a bug that occur if there is an error creating A JMS session in the JMS message bus binding that would result in the JMS connection not being closed. This can be problematic if the connection is using a JMS Client ID and the process remains alive because subsequent connection attempts will fail.

XPLATFORM-1842 - Transaction log corruption can occur when log configured with cdcEnabled=true

This release resolves a packet corruption issue that can occur during replication for StateReplication applications using a transaction log with cdcEnabled=true. With this fix, the following error should no longer occur

Failure during read/deserialize/dispatch [com.neeve.pkt.EPktCorruptException: deserialization error: corrupt data stream [invalid header magic number: 14474413]]. Failing endpoint...