X Platform Documentation Portal

Release Notes

X Platform Documentation Portal

Skip to end of metadata
Go to start of metadata

Release Date: Monday, July 11, 2016

Release Highlights

  • Build lifecycle improvements in ADM code generation tools.

Change Log

Story

XPLATFORM-1232 - Use rich data structures for everything in AdmModel

AdmModel has source code information on model imports and directives. It retains line numbers of places where imports/directives were defined.

New Feature

XPLATFORM-713 - Create a message copy() method.

This release updates the ADM code generator to generate a copy() method for ADM generated messages. The copy:

  • Copies all of a messages fields, but not metadata or timestamps (with the exception of originTs). In other words the copy behaves as if a new message instance was created and each field from the source message into the copied message.
  • A copied message is writeable even if the message it was copied from is read only.
  • For Xbuf encoded messages the copy operation is zero garbage. The present implementation in XBuf essentially serializes the message to a buffer and wraps a new message view around that buffer. Future releases may be able to optimize this process further.

ADM code must be regenerated to generate the new copy method on Messages, but this change doesn't require that code be regenerated if the new copy() methods aren't needed.

At runtime, a check for whether the message implements com.neeve.sma.CopyableMessageView can be done to check if a generic MessageView supports copy.
Compatiblity Notes:

 Code must be regenerated to generate the new copy() methods on messages. All embedded entities used by the message should also be regenerated. Messages generated with older versions of the platform will continue to work with this version, but will not support copy().
ADM
MESSAGE LIBRARY

XPLATFORM-774 - Enhance ADM to resolve unambiguous imported field types without fully qualifying them.

This release adds support for resolution of imported in ADM models without fully qualifying them. It is possible to specify non-full-qualified name when using fields and types from imported models, provided they type name can be unambiguously resolved:

  • If a name is defined in current model, it will take precedence over same name defined in one of imports when unqualified.
  • Otherwise if there a field or type name is not qualified and exactly one field or type with the unqualified name exists in the set of transitive model imports it will be resolved.
  • If one or more imported models define a type of field of the same name then the fully qualified name must be used in the model to disambiguate.

See ADM Model Imports.

ADM
MESSAGE LIBRARY

XPLATFORM-990 - Enhance ADM to preserve the origin model of imported fields.

This release enhances the ADMModel api such that an AdmField field provides access to the model in which a field was defined and the ability to determine the import path from which the field was imported. This can be useful for documentation tools.

The following new apis have been added to com.neeve.adm.AdmField

ADM
MESSAGE LIBRARY

XPLATFORM-1056 - Implement server side heartbeat transaction logging.

This release add the ability to log server heartbeats to a transaction log. To enable heartbeat logging for a server add the <heartbeatLogging> element to the platform configuration descriptor:

Heartbeats are logged in a file titled <servername>-heartbeats which by default will end up in a server-heartbeats subfolder in the data directory. The directory can be overridden by specifying a storeRoot property in the logger (recommended to avoid logging heartbeats to the same disk as recovery data). Each time the server is started prior heartbeat logs are backed up to the same folder and suffixed with a time stamp.

See the DDL Configuration Document (https://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-<heartbeatLogging) for more details

STATS AND ALERTS

XPLATFORM-1250 - Feature Request: Add 'NotEmpty' as store startup expectation

This release adds support for specifying LogEmptinessExpectation.NotEmpty as an expectation for an engine's store. When NotEmpty is specified startup will fail if the store doesn't have an existing transaction log with at least one entry in it.

As with the existing LogEmptinessExpectation.Empty expectation the expectation is only enforced on a primary store.

Example:

CONFIGURATION

XPLATFORM-1320 - Allow suppression of native library extraction from jar.

This release introduces a System Property 'nv.native.suppressextraction' which when true, skips extraction of the native libraries for cases in which the user has already manually extracted them.

(lightbulb) Note: This property must be set as a System Property as extraction of native libraries may occcur before the configuration subsystem and XRuntime has been initialized.

CONFIGURATION

Improvement

XPLATFORM-667 - Incremental Code Regeneration

The ADM code generator has been enhanced to provide the option of incremental code generation for faster build times. This is the default mode. Source code won't be re-generated on each build unless model XML file or some of its imports changed. Maven plugin(s) can control this through incrementalBuild configuration parameter.

This change causes some additional metadata to be written to the generated source folder root to track model changes.

ADM
MESSAGE LIBRARY

XPLATFORM-1181 - Rationalize trace emitted by exception in start recording and stop recording to be similar

Prior to this release, the trace that is output by a failure to start recording on an environment provider is different from the trace output on a failure to stop recording on an environment provider. This release rationalizes both to be treated in the same fashion by wrapping exception in a RuntimeException with the detail message:

"Application ('<enginename') environment provider faulted with error [" + e.toString() + "] on transaction commit."

The resulting exception is handled as an unhandled event loop exception in the engine which results in the engine being stopped with the RuntimeException as the cause.

XPLATFORM-1257 - Add setValue and append methods for byte [] to XString

This release adds the ability to initialize and append to an XString using byte arrays:

Examples

See:

  • XString.setValue(byte\[\]) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#setValue(byte\[\]))
  • XString.setValue(byte\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#setValue(byte\[\], int, int))
  • XString.setValue(char\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#setValue(char\[\], int, int))
  • XString.append(byte\[\]) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#append(byte\[\]))
  • XString.append(byte\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#append(byte\[\], int, int))
  • XString.append(char\[\], int, int) (http://build.neeveresearch.com/core/javadoc/SNAPSHOT/com/neeve/lang/XString.html#append(char\[\], int, int))
HUMMINGBIRD

XPLATFORM-1290 - Add numSentAcks stat to Bus Binding Stats

This release enhances Talon to record stats for the number of acks sent upstream by a message bus binding for inbound messages. The new statistic is now printed along with aep engine stats trace and emitted via server heartbeats.

The following is example of engine stats trace with new Acks line:

[Bus Manager (myapp.mybus)]
In.........{
...Msg{10,000,000(0) 0(0) 0(0) 0(0) 0(0) 0(0) 0(0)}
...Ack{10,000,000(0) 0(0)}
...Pkt{0(0) 0(0)}
...Stab{10,002,734(0) 0(0) 0(0) 0(0) 0(0)}
}

The 'Acks' line takes the format of <acksSentTotal>(ackSentInterval)(ackRateTotal,AckRateInterval)

Additionally, server heartbeat SrvMonAppBusBindingStats have been change to add a new NumAcksSent field that reports the number of acks sent through a bus binding.

SMA

Change

XPLATFORM-1235 - Apply AppExceptionHandlingPolicy to unchecked MessageFilter exceptions

This release changes handling of unchecked exceptions from a MessageFilter to use the application's AppExceptionHandlingPolicy, namely:

  • LogExceptionAndContinue: The message will be acknowledged and not dispatched to application message handlers.
  • RollbackAndStop: The current transaction is rolled back and the message that caused the filter error will not be acknowledged. Any message is the current transaction (e.g. if adaptively batched) that was rolled back are left unacknowledged. The engine is stopped and the backup if present will take over.
  • QuarantineAndStop: The current transaction is rolled back and the message that caused the filter error will be dispatched on the quarantine channel and will be acknowledged. Any messages in the current transaction (e.g. if adaptively batched) that were rolled back are left unacknowledged. The engine is stopped and the backup if present will take over. When the backup takes over rolled back, unacknowledged messages are reprocessed).

In all of the above cases an AepAppExceptionEvent is dispatched to the application with the exception from the MessageFilter.

Prior to this release, an unchecked exception from a MessageFilter was treated as an event loop error that would shut down the engine.

TALON

XPLATFORM-1249 - Feature Request: Add an option to specify 'None' for Role Expectation in DDL

This release provide the ability to specify a startup role expectation of None in DDL to explicit indicate that there should be no startup expectation regarding an application's role. Prior to this release it was only possible to indicate no expectation by omitting the role expectation element in DDL making it difficult to control the expectations by environmental overrides.

Example:

CONFIGURATION

XPLATFORM-1253 - nv.time.usenative should default to false

This release changes the default value for usage of native time to false unless nv.time.usenative=true is explicitly set.
Compatiblity Notes:

 

With this change it is no longer necessary to disable native time when native libraries are present.

HUMMINGBIRD

XPLATFORM-1254 - Change Unsafe Buffer Management to take precedence over NATIVE buffer management

This release changes the optimized buffer copying logic in the platform to prioritize usage of com.misc.Unsafe over using X Platform native libraries.

Testing has shown that in many cases Unsafe buffer management is lower latency than the native X runtime libraries due to JNI overhead. Consequently, Unsafe, when available has been prioritized over native buffer management. Prior to this release native buffer management had to be explicitly disabled by setting 'nv.buffermanagement.usenative=false' to use Unsafe buffer management - this is not longer required.
Compatiblity Notes:

 

It is no longer necessary to set nv.buffermanagement.usenative=false to use Unsafe optimized buffer management.

HUMMINGBIRD

XPLATFORM-1255 - FLOW_FORWARDING_MODE default should be set to 1 (non cut through) in Solace Binding

This release changes the value of FLOW_FORWADING_MODE for the solace JNI binding to default to 1 (StoreAndForward) when not explicitly set on the solace binding descriptor. Prior to this release when not set it would be defaulted to 2 (CutThrough).
Compatiblity Notes:

 

Applications that were setting FLOW_FORWARDING_MODE=1 in Solace JNI binding descriptors no longer need to specify it; applications that want to use CutThrough persistence must now specify FLOW_FORWARDING_MODE=2 on the binding.

SOLACE BINDING

Bug

XPLATFORM-1080 - MessageEvent autoAck race condition can cause dropped acks

This fix resolves a race condition in which acks for guaranteed messages filtered by the newly introduced message filtering feature can be lost.

TALON

XPLATFORM-1240 - ADM model should not allow two messages with same name in a model

Added duplicate name check for messages. If multiple messages of same name are defined in a model, Code Generator will report error early (with line number) instead of letting it show at generated code compilation or runtime.

ADM

XPLATFORM-1252 - Startup Expectations DDL overrides do not take effect

This release fixes a bug in ddl override handling in which the values for engine startup expectations were not being set if the ddl didn't already specify a startupExpectations element.
Compatiblity Notes:

 

With this fix DDL override for startup expections will now be applied whereas before they may have been ignored.

CONFIGURATION
TALON

XPLATFORM-1305 - CommitTransitionLatencies are not reported in Server Heartbeats

This release fixes a bug in reporting CommitTransitionLatencies in ISrvMonAppEngineStats in Server Heartbeats. Prior to this fix the accessor method was incorrectly named getCommitTransactionLatencies - this release adds a getCommitTransitionLatencies() accessor. The existing getCommitTransactionLatencies() accessor has been deprecated and will no longer be populated.
Compatiblity Notes:

 

After upgrading to this release, processors of hearbeats should stop using getCommitTransactionLatencies() and switch to using getCommitTransitionLatencies(). Applications must upgrade to this release to correctly emit the CommitTransitionLatency statistic.

STATS AND ALERTS

XPLATFORM-1310 - DDL parser does not parse ICR detachedSend enabled property correctly

Prior to this release, there was a bug in the DDL XML parser that causes the 'enabled' flag for detached ICR send to not be parsed correctly. This release fixes this issue

XPLATFORM-1315 - Embedded entity clone methods set unset field values as default in clone.

This release fixes an issue with embedded entity cloning in which unset primitive fields are set on the clone as there default values. With this fix unset fields will also be unset in the clone

ADM

XPLATFORM-1318 - SrvMonAppExceptionMessage is not set as backing message for AepApplicationExceptionEvent alert

This release fixes a bug in which the backing SrvMonAppExceptionMessage was not being AepApplicationExceptionEvent alert when running in a Talon Server

STATS AND ALERTS
TALON

XPLATFORM-1319 - NullPointerException in discovery if shutdown hook fires before contructor completes

This release fixes a race condition in discovery shutdown hook that can result in a NullPointerException or an IllegalStateException.

DISCOVERY
  • No labels