This is the 4th major milestone release of Core X 1.9 published as part of the 1.9-M7 milestone. It contains bug fixes, new features and improvements. This release represents stable functionality that is expected to be delivered as is in the first 1.9 release, but is published as a milestone as additional features are planned for 1.9. If you are interested in deploying this release, contact Neeve to request a production release of it. Milestone releases are published in the Neeve milestone repository and are subject to deletion.
Release Highlights
- Bug Fixes.
- New Message Modeling features
- Many Lifecycle and Alert Events are now backed by an ADM ROE.
- Many alert events expose the message that triggered the alert.
Change Log
Bug
- [XPLATFORM-611] - System stats logger should be renamed from nv.aep.aep.engine.systats to nv.aep.engine.systats
- [XPLATFORM-852] - Should be able to clear read only flag on ROG metadata
- [XPLATFORM-854] - LoopbackBus.dumpPendingAck only dumps first message in each loopback bus queue.Prior to this change the logic to dump messages pending ack in a LoopbackBus queue only dumped the first message. This change enhances the dump logic to dump all messages which is more useful in a diagnostic context.
- [XPLATFORM-860] - TLT Divergence detection doesn't compare embedded entity fields.Resolves a regression in which embedded entity fields were not be considered when checking for transaction log divergence.
Change
- [XPLATFORM-669] - Implement Runtime Compatibility Check in ADM Generated CodeStarting with this version, the ADM code generator now annotates code with an ADMGenerated annotation. This annotation allows the platform to validate runtime compatibilty of the generated source with respect to the platform.
See http://docs.neeveresearch.com/display/KB/ADM+Message+Modeling#ADMMessageModeling-RuntimeCompatibility for more detailed information
- [XPLATFORM-775] - Create Index Schema Version check for Query Indexes to prevent compatibility issuesAs part of performance related work the schema of the Transaction Log Tool indexes has changed between the 1.8 and 1.9 versions. It is possible to query 1.8 transaction logs with the 1.9 version of TLT, index files need to be deleted when switching between versions.
This release adds a schema version identifier to the indexers on disk. When 1.9 opens a 1.8 log it can detect that the indexes are out of date and automatically delete them. However, 1.8 is not able to do this check, so if you perform queries against using the 1.9 tool, the index files must be deleted manually before launching the 1.8 version of the tool.
- [XPLATFORM-855] - Ensure all lifecycle and alert events that pass through AepEngine have the engine as the sourcePrior to this release, events dispatched by an AEP engine would have a source as the root originating component e.g. store, bus binding etc. This release enhances the AEP engine to stamp itself as the source on all events that are dispatched by it. The following code would get the source engine for an event
- [XPLATFORM-855] - Ensure all lifecycle and alert events that pass through AepEngine have the engine as the source
New Feature
- [XPLATFORM-663] - Allow definition of poolable XString types in ADM ModelIntroduced the ability to mark string fields in an ADM Model as poolable. When a String field is marked as poolable a new type is created that extends XString, but can be pooled to eliminate garbage. Accessors on generated model objects follow semantics similar to those for embedded entity fields. For a full description of poolable string types see:
http://docs.neeveresearch.com/display/KB/ADM+Message+Modeling#ADMMessageModeling-PoolableStringTypes
To provide the basis for Pooled String types, RawString was deprecated in favor of new implementation com.neeve.lang.XString which has the same functionality, but is instead an extensible base class. To provide backwards compatibility, RawString was changed from an interface to a deprecated class that extends XString.
To support XString's independendent package structure a PktBuffer and PktIOBuffer were refactored to extend new base class implementations com.neeve.io.IOElasticBuffer and com.neeve.IOBuffer to allow buffer backing XStrings. This prompted deprecation of PktIOBuffer which had been used in previously generated code. While this change is backwards compatible, code regeneration is recommended to avoid deprecation warnings.
- [XPLATFORM-782] - Create builder style setter accessors on adm generated messagesProvides the ability to create builder style 'fluent' setters when the generateBuilderSetters=true directive is set for the code generator. With this directive both
Are generated on the type implementation. At present support for these fluent setters do not support RawString types, Timestamps as Dates, or lend semantics. This may be added at a future date if warranted.
The fluent setters are intended for testing purposes only.
- [XPLATFORM-811] - Implement heartbeat dispatch to application handlersPrior to this release, an application could only receive server heartbeat messages via an AdminClient or a Robin controller. This release implements the ability for an application to receive server heartbeat messages (com.neeve.server.mon.SrvMonHeartbeatMessage) by registering an event handler for this message just as it would for any other event/message i.e.
- [XPLATFORM-813] - Define lifecycle and alerting event models
Prior to this release, if a user wished to send alert or lifecycle events as messages on the wire, they had to hand craft these messages. This release introduces the alert and lifecycle ADM models that define messages that back the lifecycle and alert events. When an alert or lifecycle event is dispatched to the application, the application can use the getBackingMessage() method implemented by the method to fetch the backing message.
The models containing the messages that back the alert and lifecycle events are
- [XPLATFORM-811] - Implement heartbeat dispatch to application handlers
- Lifecycle Model: com.neeve.server.mon.lifecycle.model.xml
- Alert Model: com.neeve.server.mon.alert.model.xml
- The message backing an event dispatched by an AEP engine will be null if the AepEngine is created and managed directly by the user. For the backing message to be populated, the application must be managed by a Talon server. Therefore, the application should always check for the backing message being null before processing it.
- The backing message is owned by the event that it backs i.e. the message is disposed when the event is disposed. The application should acquire a reference to the message if it wishes to own a reference to the message separate from the reference owned by the event
[XPLATFORM-816] - Implement Support for Semantic Types in ADM Model
This feature allows creation of semantic types in ADM message modeling. Semantic types lend semantic meaning to the ADM Model's scalar types, and can be referenced directly as types in the model.
See http://docs.neeveresearch.com/display/KB/ADM+Message+Modeling#ADMMessageModeling-SemanticTypes for more information
[XPLATFORM-838] - Create XPLATFORM BOM (Maven Bill of Materials)
It is now possible to specify a single dependency version for the X Platform family of products (Core X, Robin, and Eagle) using the new nvx-platform-bom:For more information on Maven BOMs see: [https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies]
Maven BOMs do not provide support for plugin management, so if you are using any of the platform's maven plugins the individual product versions will need to be used.
- [XPLATFORM-850] - Implement common IAlertEvent and ILifecycleEvent accessorsPrior to this release, applications interested in listening for alert and lifecycle events needed to register type specific handlers for each of the events they were interested in. This release introduces the ILifecycleEvent and IAlertEvent interfaces implemented by lifecycle and alert events respectively. The application can register a single handler using these interfaces as follows to listen for all lifecycle and alert eventsNote: There are certain events that qualify as both lifecycle and alert events. These events implement both IAlertEvent and ILifecycleEvent and will be dispatched to both the handlers if registered_
- [XPLATFORM-850] - Implement common IAlertEvent and ILifecycleEvent accessors
- [XPLATFORM-858] - Implement getTriggeringMessage() for IAlertEventsThis change adds the implementation of IAlertEvent.getTriggeringMessage for the following event types.
- AepApplicationExceptionEvent
- AepOutboundLogExceptionEvent
- AepSendExceptionEvent
- AepUnhandledMessageEvent
Applications can utilize the return message to provide more detailed diagnostics of the message.
- [XPLATFORM-858] - Implement getTriggeringMessage() for IAlertEvents
- [XPLATFORM-864] - Enhance Talon SrvController to provide accessors for external config objectThis release add the ability to tag a talon server's SrvController with an external configurer. Applications can access the object as follows:
- [XPLATFORM-864] - Enhance Talon SrvController to provide accessors for external config object