Release Summary
- Features & Improvements
- XPLATFORM-274 - Enhanced imported model file search by the ADM XML parser
- XPLATFORM-307 - Allow latency stats ring buffer size to be configurable
- XPLATFORM-269 - Standalone transaction log archiving
- XPLATFORM-278 - Support for Currency and Currency[] ADM types
- XPLATFORM-279 - Support for Char and Char[] ADM types
- XPLATFORM-275 - Modified Core X Maven plugin to add model files to Maven resource folder
- XPLATFORM-277 - Dispatch alert event if an inbound message is not handled
- XPLATFORM-295 - Dispatch alert event on duplicate acknowledgement
- XPLATFORM-314 - Dispatch alert on out-of-order send commit completion
- XPLATFORM-288 - Allow TransactionLogTool to list the types/fields available for query
- XPLATFORM-294 - Include SMA binding stats in AEP engine stats output
- XPLATFORM-26 - Performance improvements for the OR query condition (avoid full scan if possible)
- XPLATFORM-302 - Dump stack trace if nonQuiescentActivity drops less than zero
- XPLATFORM-310 - Prevent LoopbackBus.enableWaitForQuiescence() on an active bus
- Other Changes
- XPLATFORM-273 - Change AepEngine stats logger name not to include the engine name.
- XPLATFORM-287 - Rename RogLogTool to TransactionLogTool
- Bugs Fixed
- XPLATFORM-290 - IllegalArgumentException: Unknown encoding type '-1' during message send
- XPLATFORM-292 - The internal AEP engine control bus uses busy spin on the default cpu with nv.optimizefor=latency
- XPLATFORM-301 - Fix timed waitForQuiescence()
- XPLATFORM-308 - AEP nv.aep.sno tracer does not output trace message for unsolicited sends
- XPLATFORM-313 - AepEngine.getEngineTime() sometimes threw NullPointerException when called from non engine thread
Features & Improvements
- [XPLATFORM-274] - Enhanced imported model file search by ADM XML parser
Prior to this release, the ADM XML parser searched for imported model files as follows:
- If specified path is absolute, use absolute path in file system
- Otherwise, use relative path in file system
Core X 1.4 introduces the following configuration and logic changes to the above search algorithm.
Configuration Changes- Addition of a "modelsDir" parameter. This parameter specifies the root directory for searching for model files specified using relative paths. The AdmCodeGenerator has been enhanced to accept this new parameter
New Search Algorithm- If specified path is absolute, search for file using absolute path in the file system. If exists, use found file
- Otherwise, if the 'modelsDir' parameter has been specified, then search for the file relative to 'modelsDir'. If exists, use found file
- Otherwise, search for file in the class path. If exists, use found file.
- Otherwise, throw exception.
- [XPLATFORM-307] - Allow latency stats ring buffer size to be configurable
This release introduces the nv.stats.latencymanager.samplesize configuration parameter used to configure the latency ring buffer used by the X Platform's latency manager. /div>
- [XPLATFORM-269] - Standalone transaction log archiving.
An archive command was added to the Transaction Log Tool, that allows one or more logs to be bundled into an executable jar. When the archive jar is run, the Transaction Log Tool is launched and the bundled jar files are opened.
See: http://docs.neeveresearch.com/display/KB/Transaction+Log+Tool+Command+Usage for more information.
- [XPLATFORM-278] - Support for Currency and Currency[] ADM types
Support for Currency and Currency[] data types has been added in the Application Data Modeler
- [XPLATFORM-279] - Support for Char and Char[] ADM types
Support for Char and Char[] has been added in to the Application Data Modeler.
- [XPLATFORM-275] - Modified Core X Maven plugin to add model files to Maven resource folder
The nvx-core-maven-plugin was updated to comform to the enhanced model file resolution algorithm in XPLATFORM-274, and now adds the modelsFolder as a project resource folder if it exists and contains the model file being generated.
- [XPLATFORM-277] - Dispatch alert event if an inbound message is not handled
A new event - AepUnhandledMessageEvent - has been added to AEP. This event is dispatched if an inbound message was not dispatched to any handler (including the default handler)
- [XPLATFORM-295] - Dispatch alert event on duplicate acknowledgement
Prior to this release, if an underlying SMA binding spuriously dispatches a duplicate acknowledgement (i.e. message stability event), the second acknowledgement will throw an NPE. This story adds additional checks to the message stability event processing logic to- Check and avoid the NPE
- Dispatch a new AepDuplicateAcknowledgementAlert event to the application
- Log detailed information about the duplicate acknowledgement
- [XPLATFORM-314] - Dispatch alert on out-of-order send commit completion
Prior to this release, if an underlying SMA binding dispatches an out-of-order acknowledgement for outbound messages in different transactions, the ordering logic for send commit completions in the AEP engine ensures release of the send commits from the commit completion queue in the correct order. However, although the commits are dispatched for completion in the right order, the receipt of out-of-order acknowledgements is a condition that needs to be alerted particularly if acknowledgements are missed since that can result in a suspended transaction pipeline. This story adds additional checks in the acknowledgement processing in the AEP engine to- Check for out-of-order send commit completions
- Dispatch an AepOutOfOrderSendCommitCompletionAlert event to the application if an out-of-order send commit completion was received
- Log information about the state of the pipeline related to the out-of-order send commit completion
Note: No alert is dispatched if two outbound messages in the same transaction were acknowledged out of order.
Known Issue: If you use multiple outbound buses it is possible for this alert to be raised erroneously- [XPLATFORM-288] - Allow TransactionLogTool to list the types/fields available for query
Added functionality to the Transaction Log Tool to list the types available for query via a 'list types' command which lists out the object types. Additionally, the ability to describe the fields of a type has been added. The command 'describe' describes the field of a type while 'describe.fieldName' describes the fields of a nested field type.
See the http://docs.neeveresearch.com/display/KB/Querying+Transaction+Logs for usage
- [XPLATFORM-294] - Include SMA binding stats in AEP engine stats output
Prior to this release, the AEP engine statistics output does not include any SMA binding related statistics. This enhancement implements the following:- Add a new getStats() method to the SMA MessageBusBinding interface
- Enhance AEP Bus Manager to include the stats returned by getStats() in the bus manager's statistics output
- [XPLATFORM-262] - Performance improvements for the OR query condition (avoid full scan if possible)
Finished or-expansion. The query optimizer was enhanced to now read indexes across OR'ed clauses and sort-merge their results, provided this is efficient. This option is only available in pre-sorted repositories such as a log-based repository.
- [XPLATFORM-302] - Dump stack trace if nonQuiescentActivity drops less than zero
The nonQuiescentActivity on a loopback bus should never drop less than zero. This release adds code to check and dump a stack trace in case the nonQuiescentActivity drops below zero.- [XPLATFORM-310] - Prevent LoopbackBus.enableWaitForQuiescence() on an active bus
Prior to this release, one could invoke LoopbackBus.enableWaitForQuiescence() at any point in the lifecycle of a loopback bus. This caused problems with the quiescence counter if the method was invoked while the bus is not quiescent. This release enhances the enableWaitForQuiescence() call to throw an exception if an attempt is made to enable/disable waitForQuiescence functionality on a bus that is active (i.e. at least one message has been published to the bus) at the time the call is madeOther Changes
- [XPLATFORM-273] - Change AepEngine stats logger name not to include the engine name. The names for statistics loggers were changed to remove entity specific names from the log path. This makes configuration of logging easier. The enabling of statistic output continues to be controlled at runtime via a corresponding entity specific "stats.interval" property.
Logger name changes
- nv.aep.
.stats -> nv.aep.engine.stats - nv.aep.
. .busmanager.stats -> nv.aep.busmanager.stats - nv.aep.
.systats -> nv.aep.engine.systats - nv.server.link.client.
.stats -> nv.server.link.client.stats - nv.event.stmux.
.stats -> nv.event.stmux.stats - nv.ods.
.stats -> nv.ods.stats
Stats interval changes- nv.ods.stats.interval was changed to nv.ods.
.stats.interval
For all of the above loggerName changes periodic stats output is still governed by entity specific stats.interval properties, for example,nv.aep.[engineName].stats.interval=10
continues to set the AEP engine named as[engineName]
to output stats at 10 second intervals
- nv.aep.
- [XPLATFORM-287] - Rename RogLogTool to TransactionLogTool
The transaction log tool (which provides browsing, query and many other features) has undergone some naming updates:
- The main class name has been changed from com.neeve.tools.RogLogTool to com.neeve.tools.TransactionLogTool
- The names of script included in Core X distributions have been changed from xlogtool.[sh|bat] to xtxnlogtool.[sh|bat]
Bugs Fixed
- [XPLATFORM-290] - IllegalArgumentException: Unknown encoding type '-1' during message send
Resolves an issue affected xbuf generated messages where the message encoding does not get set correctly on messages that are reused within a pool.
- [XPLATFORM-292] - The internal AEP engine control bus uses busy spin on the default cpu with nv.optimizefor=latency
This change fixes a processor affinitization issue for AepEngines configured with nv.optimizefor=latency and cpu affinitization in which the engine's internal control bus writer thread was being configured to use BusySpin and the default cpu affinity mask. With this fix in place the control busy uses blocking dispatch alleviating contention with other threads using the default processor affinity.
-
[XPLATFORM-301] - Fix timed waitForQuiescence()
The timed variant of the LoopbackBus.waitForQuiescence() method expected TimeUnit.timedWait() to accommodate spurious wakeups from the timed variant of the Object.wait() method. However, it does not. Therefore, the waitForQuiescence() method was modified to accommodate spurious wakeups
-
[XPLATFORM-308] - AEP nv.aep.sno tracer does not output trace message for unsolicited sends
The AEP nv.aep.sno tracer (logger) does not output a trace message for unsolicited sends. This release fixes this.
-
[XPLATFORM-313] - AepEngine.getEngineTime() sometimes threw NullPointerException when called from non engine thread
Fixed a race condition that can occur when a non engine thread calls AepEngine.getEngineTime() on an engine using EventSourcing
- [XPLATFORM-269] - Standalone transaction log archiving.