Released: Thursday, November 12th, 2015. This is the first release of Core X 3.0, released as part of the X Platform 3.0.0 Platform Release.
Release Highlights
- Performance Improvements
- Major Improvements to ADM Message Modeling including:
- Support for Reusable Field Definitions
- Support for Semantic Types
- Support for Embedded Entity and Message Inlining
- Support for ADM Model documentation and javadoc generation.
- Support for Poolable String Types
- Configuration Improvements and Features
- Formal Introduction of XML Based Configuration (DDL) which allows an entire environment to be configured via a single configuration artifact.
(see X Platform Configuration) - Introduction of Bootstrap VMConfigurer to allow Talon Server applications to provide dynamic configuration at startup.
- Formal Introduction of XML Based Configuration (DDL) which allows an entire environment to be configured via a single configuration artifact.
- Formalized and Documented Talon Server Application Lifecycle
- See X Application Lifecycle Documentation.
- Introduced ILifecycleEvent and IAlertEvent to allow applications to generically listen for such events
- Created backing ADM Models for Lifecycle and Alert events which allows applications to easily retransmit or serialize such events.
- Introduction of Javadoc Portal: http://build.neeveresearch.com/core/javadoc/3.0/3.0.503/
- Improvements to Transaction Log Tool
- Improved Query Performance.
- More flexible result output formats.
- Alphabetical Field Sort.
- Ability to hide 'unset' fields in results.
- Official Support of JDK 1.8 and Zing.
- Many Improvements and Bug Fixes.
e
Compatibility and Upgrade Notes
The namespace for the ADM xsd has been updated so application model xml will need to be updated. See XPLATFORM-725
3.0 is not API compatible with ADM code generated with 1.8 and earlier (both message and state). On upgrade, users should regenerate their models. NOTE: 3.0 does remain wire compatible with 1.8, so 1.8 applications can still send to 3.0 applications and vice versa.
RawString has been deprecated and replaced with XString in the 3.0 release. ADM generated code will now return XString rather than RawString which may require API changes in application code in some cases. It is recommended that applications switch to using XString instead of RawString.
Due to changes in Store Replication subheaders, Older versions of transaction logs created with 1.8 or earlier are not compatible with 3.0 and it is not possible to for a 1.8 application to cluster with a 3.0 application.
Disable support for detached persistence with State Replication
Change Log
- New Feature
- XPLATFORM-263 - Display a query's explain plan in the RogLogTool
- XPLATFORM-323 - Implement SELECT DISTINCT functionality for queries
- XPLATFORM-358 - Provide option to specify extraction location of logs in a transaction log archive
- XPLATFORM-359 - Allow for automatic clean up of logs extracted from transaction log archive on exit
- XPLATFORM-550 - Implement lookup tables for large key fields of indexes
- XPLATFORM-553 - Implement index read intersection
- XPLATFORM-555 - Field based type inference for Transaction Log Queries
- XPLATFORM-595 - Add ability to pass key=value variables to scripts launched from within tlt
- XPLATFORM-598 - Implement generateArrayGetterEmptyIfNull option for the ADM Code Generator
- XPLATFORM-621 - Allow specifying additional files to include in Transaction Log Archive
- XPLATFORM-640 - TLT support for Checkpointed Transaction Logs
- XPLATFORM-644 - Enhance TLT to allow control over timestamp format and timezone
- XPLATFORM-645 - Filter unset default fields in TLT Json output
- XPLATFORM-649 - Provide new TLT output display formats for Json Dumped Query Resutls
- XPLATFORM-660 - Enhance ADM to add a validator method on messages and entities
- XPLATFORM-663 - Allow definition of poolable XString types in ADM Model
- XPLATFORM-664 - Enhance ADM Model to allow annotating the model with documentation, and generation of javadoc
- XPLATFORM-676 - Support for embedded field inlining
- XPLATFORM-680 - Add subscription check startup to message bus
- XPLATFORM-685 - Document ADM Message Library
- XPLATFORM-694 - Add the ability to define a reusable field in ADM model
- XPLATFORM-712 - Make payload size accessible in TLT Queries
- XPLATFORM-731 - Transaction Log Tool should provide the ability to accept an initialization script
- XPLATFORM-734 - Add w2w latency metric to message latency manager
- XPLATFORM-747 - Implement messaging waypoint callouts
- XPLATFORM-752 - Filter out unnecessary INFO messages emitted from solace for unknown property
- XPLATFORM-753 - Set appropriate clientName for singleSession
- XPLATFORM-755 - Handle OOO Ack/Nacks from Solace in Solace SMA Binding
- XPLATFORM-758 - Enhance ADM with defaultFactoryId and model name attributes.
- XPLATFORM-761 - Enable ADM Generator option to thrown an exception when accessing a field that is not set.
- XPLATFORM-762 - Rationalize parameter names across Java and JNI binding
- XPLATFORM-782 - Create builder style setter accessors on adm generated messages
- XPLATFORM-784 - Enhance AdmCodeGenerator and Maven Plugin to allow accepting ADM directives
- XPLATFORM-786 - Static Field Accessors for Entry.simpleClassName and Entry.className
- XPLATFORM-787 - Field Based Type Inference Improvements
- XPLATFORM-796 - Add getAppMain() in SrvAppLoader to fetch application main class
- XPLATFORM-802 - Add latency instrumentation to JMS binding
- XPLATFORM-809 - Implement Server Shutdown on Last App
- XPLATFORM-811 - Implement heartbeat dispatch to application handlers
- XPLATFORM-813 - Define lifecycle and alerting event models
- XPLATFORM-816 - Implement Support for Semantic Types in ADM Model
- XPLATFORM-838 - Create XPLATFORM BOM (Maven Bill of Materials)
- XPLATFORM-850 - Implement common IAlertEvent and ILifecycleEvent accessors
- XPLATFORM-856 - Support expected startup for Talon applications
- XPLATFORM-858 - Implement getTriggeringMessage() for IAlertEvents
- XPLATFORM-859 - Replicate Log Metadata
- XPLATFORM-864 - Enhance Talon SrvController to provide accessors for external config object
- XPLATFORM-873 - Poolable Strings using Copy Semantics
- XPLATFORM-876 - Re: Add the ability to create Poolable String Type factories Generically
- XPLATFORM-885 - Add server host name to SrvMonHeartbeatMessage
- XPLATFORM-887 - Dispatch "sent" objects to CDC handlers
- XPLATFORM-888 - Implement Binary Logger
- XPLATFORM-915 - Enhance X-DDL to allow configuration of server discovery descriptor
- XPLATFORM-921 - Allow VMConfigurerer.configure to take an InputStream as alternative to a File
- XPLATFORM-922 - Feature Request: Publish x-ddl.xsd documentation.
- XPLATFORM-927 - Implement Embedded Talon Server Support
- XPLATFORM-929 - Implement AepEngine pre / post dispatch message handler.
- XPLATFORM-937 - Non-blocking dispatch of inbound messages
- XPLATFORM-945 - Allow specifying default values in channel key variables
- XPLATFORM-946 - Fluent setters on interfaces
- XPLATFORM-952 - ADM - access to default factory id and model documentation
- XPLATFORM-972 - Implement lendXXX() for ADM String fields
- XPLATFORM-978 - Message type specific messaging latencies
- XPLATFORM-980 - Implement X-DDL Properties Based Overrides
- XPLATFORM-987 - Implement AdmFactoryInfo annotation to allow ADM messages to expose their factory for introspection
- XPLATFORM-988 - Add factory registry variants that throw exceptions on factory id conflict
- XPLATFORM-992 - Implement global env section in X DDL and configuration repository.
- Improvement
- XPLATFORM-257 - Auto Index creation should be improved to take into account whether the query requires full table scan
- XPLATFORM-331 - Allow Select ClassName.* as a synonym for Select ClassName
- XPLATFORM-392 - Provide feature parity for reflectors across encodings.
- XPLATFORM-441 - TransactionLogTool metadata description doesn't match dumped metadata fields
- XPLATFORM-463 - Modify teamcity builds to publish javadoc to nexus for bundled and unbundled
- XPLATFORM-487 - Implement Zero Garbage Message reflectors for Xbuf.
- XPLATFORM-556 - Implement binary record search for monotonically increasing or decreasing fields at the repository level
- XPLATFORM-648 - Autoindexing should support a threshold beyond which it will not consider fields in the select clause.
- XPLATFORM-675 - Add trace of generated message factory versions during startup.
- XPLATFORM-689 - Provide config parameter to switch off setting messages to read-only post dispatch
- XPLATFORM-706 - Upgrade to Solace 6.1.0
- XPLATFORM-708 - Efficiently delete Sort Area data structures after they are no longer in use
- XPLATFORM-710 - Optimize single field query performance
- XPLATFORM-714 - User setting should override nv.optimizefor when determining detached sends for AEP Bus Manager
- XPLATFORM-715 - nv.optimizefor=throughput should default AEP Bus Manager send commit to detached
- XPLATFORM-725 - Update x-adm schema's namespace to 'http://www.neeveresearch.com/schema/x-adm'
- XPLATFORM-727 - Provide config parameter to switch off setting messages to read-only post send
- XPLATFORM-732 - Output Solace API version from binding
- XPLATFORM-735 - Rename 'Checkpoint' startup expectation to 'LogEmptines'
- XPLATFORM-736 - Remove shared PktRecoveryLog and RogLog readers
- XPLATFORM-738 - Add method on Solace binding to expose stats collected from solace appliance
- XPLATFORM-739 - Handling of bad messages in solace binding
- XPLATFORM-756 - Enable cut through persistence by default for JNI binding
- XPLATFORM-765 - Implement Xbuf getSerializeToNativeLength() method to help callers of serializeToNative serializer
- XPLATFORM-770 - Embedded entities generated by protobuf and json don't have acquire/dispose methods
- XPLATFORM-771 - Add Native Serializers to embedded entities generated with Json and Protobuf encodings
- XPLATFORM-776 - Remove TLT query filter caching
- XPLATFORM-781 - Improve TLT json dump performance
- XPLATFORM-788 - Avoid TLT entry deserialization when querying on simpleClassName or className
- XPLATFORM-792 - Implement the ability to read a repository via an unindexed monotonic field
- XPLATFORM-800 - TLT shouldn't allow opening a log with --repair flag and read only access mode
- XPLATFORM-801 - Potential for 'false positive' Aep Engine Stuck Alert event on idle engines.
- XPLATFORM-812 - Replace IAepWatcher callbacks with dispatch of AEP engine events
- XPLATFORM-828 - Enable Spring-like environment substitution in VMConfigurer and Interactive Tools
- XPLATFORM-830 - Allow private and protected method AppXXX and EventHandler annotated method discovery and invocation.
- XPLATFORM-853 - Facility for Talon Server to Print Version Numbers at Startup
- XPLATFORM-857 - XPlatform BOM should specify version for native jars
- XPLATFORM-862 - Add triggering message to AepInboundLogExceptionEvent
- XPLATFORM-863 - Document Server Mon Alert Lifecycle and Heartbeat models.
- XPLATFORM-868 - BackingMessage not set on dispatched AepEngineApplicationExceptionEvent
- XPLATFORM-877 - Primary and Backup transaction log sizes should be the same
- XPLATFORM-879 - Poolable String types generated from entity/message field names can conflict with other types.
- XPLATFORM-932 - XString.Factory.PROP_INITIAL_LENGTH doc should specify that it refers to the size in bytes not characters.
- XPLATFORM-938 - Failures seeding configuration repository from VMConfigurer are not logged
- XPLATFORM-947 - Add support for disabling native buffer management in favor of Unsafe
- XPLATFORM-950 - Change default claim strategy for AEP detached send to be SingleThreaded instead of MultiThreadedSufficientCores
- XPLATFORM-966 - Detached dispatch in Solace binding
- XPLATFORM-971 - Configuration property to override use of native UtlTime.now()
- XPLATFORM-985 - ADM generated enum fromValue should include invalid argument when throwing IllegalArgumentException
- XPLATFORM-995 - Enhance Aep Message Tracing to use same trace as TransactionLogTool
- XPLATFORM-996 - Allow setting store discovery as individual element in x-ddl
- XPLATFORM-998 - Enable class specific reference tracking.
- XPLATFORM-999 - Enhance UtlThread should test for affinity enablement on each call.
- XPLATFORM-1005 - Implement support for nv.checked to globally switched off checked processing
- XPLATFORM-1014 - Ensure that setAsPriority messages are sent in order with respect to other priority messages with adaptive batching enabled
- XPLATFORM-1025 - Provide option for ADM XML Parser to cache parsed model imports
- Change
- XPLATFORM-285 - Disable support for detached persistence with State Replication
- XPLATFORM-519 - Create extensible RawString base type
- XPLATFORM-669 - Implement Runtime Compatibility Check in ADM Generated Code
- XPLATFORM-748 - Disallow usage of outbound logging for Store Persister
- XPLATFORM-775 - Create Index Schema Version check for Query Indexes to prevent compatibility issues
- XPLATFORM-805 - Update To Solace 7.x Libraries.
- XPLATFORM-855 - Ensure all lifecycle and alert events that pass through AepEngine have the engine as the source
- XPLATFORM-867 - Upgrade MapDB to version 1.0.7
- XPLATFORM-878 - Disable automatic JVM restart by Tanuki wrapper
- XPLATFORM-880 - Main class not found in TOA when using embedded talon server
- XPLATFORM-913 - Server Monitoring Model xml not packaged with nvx-core-all
- XPLATFORM-916 - Overloaded method pooled string getters that take a default or a factory clash
- XPLATFORM-919 - ADM Code Generator should copy the source model to the generated source output folder
- XPLATFORM-933 - Change default value of pooledStringFieldTypeNameSuffixPolicy to be 'None' rather than 'OnConflict'
- XPLATFORM-942 - Change X-Server thread pool names to include the name of the server.
- XPLATFORM-973 - Default Solace session client name to binding user name
- XPLATFORM-974 - Default TCP_NODELAY in Solace binding to false
- XPLATFORM-975 - Rename fail_on_bad_message to fail_on_inbound_message_handling_fault in Solace binding
- XPLATFORM-979 - Remove quarantine functionality from solace binding
- XPLATFORM-981 - Remove fluent setters from generated interfaces.
- XPLATFORM-982 - Rename ADM generateBuilderSetters directive to generateFluentSetters
- XPLATFORM-983 - Talon Server should exit when it is fed unrecognized arguments.
- XPLATFORM-1001 - Transaction Log Tool's Result Count Estimate is Misleading
- XPLATFORM-1013 - Expose UnhandledMessageEvent as AlertEvent
- Bug
- XPLATFORM-408 - Indexer Files not deleted on index delete
- XPLATFORM-604 - upgrade Jackson Json parsing libraries to 2.4.3
- XPLATFORM-639 - Calling getLogFIle or backupLog on a non existent log creates a metadata file
- XPLATFORM-641 - Clearing a Query Indexer doesn't reset the indexer size
- XPLATFORM-681 - QueryEngine's FLUSH_NEVER policy incorrectly uses partially built indexes
- XPLATFORM-682 - Memory Leak in Solace JCSMP binding
- XPLATFORM-745 - Record XXXXX has not been loaded thrown
- XPLATFORM-764 - ArrayIndexOutOfBoundsException removing a node from State Graph
- XPLATFORM-773 - Setting nv.msg.latency.stats=false should disable output of the stat as well.
- XPLATFORM-779 - JsonProperty annotations are added to Entity fields in Xbuf And Protobuf encodings
- XPLATFORM-797 - Message will be dropped silently if Solace Message channel is null
- XPLATFORM-833 - Errors out of SrvController.init() are not trapped in SrvController.start()
- XPLATFORM-835 - TLT should automatically repair corrupt transacton log indexes
- 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.
- XPLATFORM-860 - TLT Divergence detection doesn't compare embedded entity fields.
- XPLATFORM-870 - SELECT MAX(filePostion) followed by dump -d results in an NPE
- XPLATFORM-881 - IllegalArgumentException: Comparison method violates its general contract
- XPLATFORM-883 - Compilation error on xxxOrThrow methods: cannot find symbol: class JsonIgnore
- XPLATFORM-884 - ADM code with required array fields fails to compile with generateRequiredFieldValidators directive.
- XPLATFORM-906 - Race Condition in ICR Receiver can cause dropped message during failover
- XPLATFORM-907 - TLT archive fails with dedicated outbound log and no dedicated inbound log
- XPLATFORM-909 - Replayed Message transaction ids can diverge on Backup or ICR Receiver
- XPLATFORM-920 - Deadlock between Server Stats Thread and Engine close thread on first stats interval
- XPLATFORM-934 - String field deprecation in ADM model causes compile error for Xbuf encoding.
- XPLATFORM-940 - x-ddl server multithreading generates incorrect xcs config scripts
- XPLATFORM-963 - AepOutOfOrderSendCommitCompletionAlertEvent events generated in the application with mixed QoS channels
- XPLATFORM-977 - o2s should be computed when nv.msg.latency.stats=true
- XPLATFORM-1007 - StoreMemberReplicationStatus.dispose attempt to access a pool (method=put()) after it has been closed after backup failure
- XPLATFORM-1011 - TLT Log Archive fails with -m flag and no inbound log present.
- XPLATFORM-1015 - AepEngine cannot be cast to com.neeve.sma.MessageBusBinding
- XPLATFORM-1016 - SOLCLIENT_SUBCODE_CONTROL_OTHER on failover to backup when starting messaging
- XPLATFORM-1017 - Reference counting error detected by detached outbound logger doesn't result in clean shutdown
New Feature
XPLATFORM-263 - Display a query's explain plan in the RogLogTool | ||||||||||||||||||||||||||||||||||||||||||||
To help diagnose query performance, a new configuration property showQueryPlan has been added to the TransactionLogTool which describes the execution plan for a query. HUMMINGBIRD TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-323 - Implement SELECT DISTINCT functionality for queries | ||||||||||||||||||||||||||||||||||||||||||||
Implemented SELECT DISTINCT, which lazily yields DISTINCT rows by comparing each row against the rows previously seen. HUMMINGBIRD TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-358 - Provide option to specify extraction location of logs in a transaction log archive | ||||||||||||||||||||||||||||||||||||||||||||
When opening an executable transaction log archive it is now possible to specify '-e <extraction-location>' to indicate the directory will serve as the root for creating an extraction folder. This can be useful in cases where the archive contents should be extracted to a drive that is different from the working directory. TOOLS | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-359 - Allow for automatic clean up of logs extracted from transaction log archive on exit | ||||||||||||||||||||||||||||||||||||||||||||
It is now possible to issue `set deletExtractedArchivesDirOnExit on` from within the Transaction Log Tool to specify that transaction log tool to clean up the extracted archive folder on tool exit. TOOLS | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-550 - Implement lookup tables for large key fields of indexes | ||||||||||||||||||||||||||||||||||||||||||||
With payload type mapping the TLT Query Engine no longer needs to deserialize an Entry's payload to query its type (Entry.object.class). This decreased a query of 2.1M records from 79 seconds to 14 seconds on average, a ~8% reduction in query time. Significantly, this savings only holds for queries that do not otherwise need to deserialize the Entry payload. Also, in conjuction with XPLATFORM-555 which introduces field based type inference this can represent a significant savings for queries that operate on types that are not frequent in a transaction log and uniquely have a particular field because the tool no longer needs to deserialize a payload to determine if it has a field against which to compare against a value. NOTE: This change required an upgrade of the guava collections dependency from 15.0 to 18.0, and truth.jar from version 0.13 to 0.23 HUMMINGBIRD | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-553 - Implement index read intersection | ||||||||||||||||||||||||||||||||||||||||||||
This feature allows more efficient execution plans to be constructed under certain situations. 1. The WHERE clause of the query references multiple fields In this case the indexes may be read individually and their results hashed together to allow fewer rows of the underlying log to be read. E.g. If both of the fields in the above WHERE clause are indexed then a hash join could be performed against their respective results, allowing fewer rows of the log to be read. HUMMINGBIRD | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-555 - Field based type inference for Transaction Log Queries | ||||||||||||||||||||||||||||||||||||||||||||
+This feature allows the query engine to inspect the fields that are queried and infer the classes to which they apply. E.g. a query such as could be determined to only correspond to classes having these fields, and thus would be transformed into: This "type inference" applies to any fields in any clause of the query. Note that in the above query the class Customer would be returned even though it does not have a 'salary' field because it has AT LEAST ONE of the fields present in the query. Note that if any fields from Entry or Metadata are used in the query we will not be able to apply type inference because every records has these fields. This can result in saving for between 15% and 70% of query run time because the class of an entry can be resolved without deserializing the entire entry. HUMMINGBIRD | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-595 - Add ability to pass key=value variables to scripts launched from within tlt | ||||||||||||||||||||||||||||||||||||||||||||
Interactive tools such as TLT have been enhanced to allow using the set and get commands to set user properties instead of just configuration properties. This allows users to set and get property values of their own as well as reference System properties passed into the tool: For example: TALON TOOLS | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-598 - Implement generateArrayGetterEmptyIfNull option for the ADM Code Generator | ||||||||||||||||||||||||||||||||||||||||||||
This release adds support for the generateArrayGetterEmptyIfNull option in the nvx-core maven plugin for Xbuf and Protobuf encodings generated by ADM. Specifying: Will cause getters for array fields to return an empty array rather than the 'null' when the field is not set. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-621 - Allow specifying additional files to include in Transaction Log Archive | ||||||||||||||||||||||||||||||||||||||||||||
The Transaction Log Tool tool's archive command has been enhanced to allow inclusion of non transaction log related files and folders in the archive by using the -a flag and specify path delimited pairs of <archive-target-dir>=<source-file-or-dir>. See http://wiki.neeveresearch.com/display/KB/Transaction+Log+Tool+Command+Usage#TransactionLogToolCommandUsage-Commands for more information. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-640 - TLT support for Checkpointed Transaction Logs | ||||||||||||||||||||||||||||||||||||||||||||
The Transaction Log Tool was updated with support for checkpointed State Replication Log's. When checkpointing is enabled, the underlying transaction log's filename is changed to included it's checkpoint version which necessitated changes in the Transaction Log Tool. TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-644 - Enhance TLT to allow control over timestamp format and timezone | ||||||||||||||||||||||||||||||||||||||||||||
The transaction log tool has been enhanced with two new configuration properties to allow the user to control the timestamp format and timezone: timestampFormat and timestampTZ. These properties will be used for Date fields in dumped entries, and can also be used for parsing timestamps specified in queries. See: http://docs.neeveresearch.com/display/KB/Transaction+Log+Tool+Command+Usage#TransactionLogToolCommandUsage-DatesandTimes For details. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-645 - Filter unset default fields in TLT Json output | ||||||||||||||||||||||||||||||||||||||||||||
This feature adds a new TLT config property filterUnsetFields that controls whether fields that have a hasXXX value will be filtered when the hasXXX method returns false See http://docs.neeveresearch.com/display/KB/Transaction+Log+Tool+Command+Usage#TransactionLogToolCommandUsage-FilteringUnsetFieldValues for more information | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-649 - Provide new TLT output display formats for Json Dumped Query Resutls | ||||||||||||||||||||||||||||||||||||||||||||
This TLT feature allow controlling the json pretty printing settings for log entries that are dumped with the -d flag (e.g. json). The following formats are available by setting the jsonStyle configuration property
See http://docs.neeveresearch.com/display/KB/Transaction+Log+Tool+Command+Usage#TransactionLogToolCommandUsage-JsonStyleFormats for more information QUERYING TOOLS | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-660 - Enhance ADM to add a validator method on messages and entities | ||||||||||||||||||||||||||||||||||||||||||||
Adds support for generating an isValid and getValidationErrors() on generated messages and entities to check for the presence of fields marked as required. Checks are made on primitive and embedded entity fields as well. ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-663 - Allow definition of poolable XString types in ADM Model | ||||||||||||||||||||||||||||||||||||||||||||
Introduced 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-664 - Enhance ADM Model to allow annotating the model with documentation, and generation of javadoc | ||||||||||||||||||||||||||||||||||||||||||||
The x-adml.xsd schema has been enhanced to allow adding documenation to model elements that translate into javadoc in the generated code. Documentation can added in two ways. Brief Documentation: Brief one line documentation can be added to a model by adding a doc="some description" attribute on the element. Long Documentation: Multiline documentation can be added by adding a child <documentation> element whose content can be multiline and use javadoc supported html (when wrapped in a CDATA block) ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-676 - Support for embedded field inlining | ||||||||||||||||||||||||||||||||||||||||||||
The Application Data Modeler and XML parser has been enhanced to allow 'inlining' the fields of an embedded entity into another entity or message. Additionally support was added allowing a message's fields to be inlined into another. When a type is inlined into another type the inlining type will implement the inlined entity's interface if it has one. ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-680 - Add subscription check startup to message bus | ||||||||||||||||||||||||||||||||||||||||||||
The solace binding after startup invokes a validate() method defined on ISolValidator interface. The application user must implement this method and the classname of that method is specified as startup parameter "subscription_validator" on solace url. It is left to the application developer to decide what to do for validation check. The application developer can throw an untyped exception in case the configured subscription check fails or log and continue or just ignore the check. Here is an example of how to specify validator parameter … An example of validator SMA | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-685 - Document ADM Message Library | ||||||||||||||||||||||||||||||||||||||||||||
Documentation describing the Application Data Modeler's (ADM) Messaging features has been created outlining existing and planned functionality for the 1.9 release. See http://docs.neeveresearch.com/display/KB/ADM+Message+Modeling MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-694 - Add the ability to define a reusable field in ADM model | ||||||||||||||||||||||||||||||||||||||||||||
The Application Data Modeler and XML parser has been enhanced to allow defining reusable fields in a new <fields> section. See http://docs.neeveresearch.com/display/KB/ADM+Message+Modeling#ADMMessageModeling-Fields for detailed usage. ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-712 - Make payload size accessible in TLT Queries | ||||||||||||||||||||||||||||||||||||||||||||
Adds the ability to query transaction logs on entrySize and payloadSize. The entrySize field is the serialized size of the entry included header data, the payloadSize is the serialized size of the entity or message that the transaction log entry contains. An example query against these fields would be: TOOLS | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-731 - Transaction Log Tool should provide the ability to accept an initialization script | ||||||||||||||||||||||||||||||||||||||||||||
The Transaction Log Tool now accepts a '-i' command line option that is interpretted as a comma separated list of initial scripts to run prior to entering the main command processing loop in interactive mode, or before running a script specified by the '-s' option. It is also possible to set the init scripts to run by setting -Dnv.tlt.initScripts to a comma separated list of scripts to run, though this value would be overwritten by a value specified by '-i' on the command line. QUERYING TOOLS | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-734 - Add w2w latency metric to message latency manager | ||||||||||||||||||||||||||||||||||||||||||||
This release adds the w2w latency metric that measures the time between when an inbound message in pulled of the wire by an SMA binding and the time just before an outbound message solicited by the inbound message is put on the wire by the outbound SMA binding | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-747 - Implement messaging waypoint callouts | ||||||||||||||||||||||||||||||||||||||||||||
X uses messaging waypoints to calculate and report latency stats for the various legs in the messaging path. Latency calculation is only one of the many applications that use waypoint callouts. For example, global transaction tracking can also use messaging waypoints to propagate global transaction identifiers across threads in the messaging path. This release adds support for an application to register a 'waypoint listener'. If registered, the listener is notified each time a waypoint is reached in the messaging path. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-752 - Filter out unnecessary INFO messages emitted from solace for unknown property | ||||||||||||||||||||||||||||||||||||||||||||
All the known properties used in either JCSMP and JNI binding have been rationalized, so no skipping property message would be emitted. However if any property is specified on solace url which is unknown to solace binding, warning message would be logged. An example of such warning in as below <10,1644,Ironman> 20150228-14:35:28:627 (wrn)...MsgBusBinding<test.aeptest1> Unknown property 'vpn' specified, Ignorning ... SOLACE BINDING | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-753 - Set appropriate clientName for singleSession | ||||||||||||||||||||||||||||||||||||||||||||
If the "single_session" property is specified for configuring the solace binding, the client for the session the binding will not create -IN and -OUT client named suffixed sessions in lieu of creating a single session. SOLACE BINDING | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-755 - Handle OOO Ack/Nacks from Solace in Solace SMA Binding | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this release, the Solace binding implementation assumes acknowledgements to be dispatched by the Solace runtime in the same order in which messages were sent. Although this is true of Solace, there are some situations (for example, when, due to an error of usage or in the code, an application and/or the platform concurrently send messages through Solace) when OOO acks can be dispatched by the Solace runtime. It would be good to detect and output trace warning of such situations. This release enhances the Solace SMA binding to handle OOO acks. Upon receipt of an OOO ack, it marks the message as acknowledged but only dispatches the stability event once all messages before the acked one are also acked. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-758 - Enhance ADM with defaultFactoryId and model name attributes. | ||||||||||||||||||||||||||||||||||||||||||||
See http://docs.neeveresearch.com/display/KB/ADM+Message+Modeling#ADMMessageModeling-ModelElement ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-761 - Enable ADM Generator option to thrown an exception when accessing a field that is not set. | ||||||||||||||||||||||||||||||||||||||||||||
This feature implements a generateThrowOnUnsetGetters ADM directive which generates getXXXOrThrow() getter variants for message and entity fields. The getXXXOrThrow() methods throw an exception when accessed on a field for which its hasXXX() method returns false, and otherwise return the value of getXXX() ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-762 - Rationalize parameter names across Java and JNI binding | ||||||||||||||||||||||||||||||||||||||||||||
To make switching between the solace JNI and JCSMP bindings a more fluid process, rationalized, implementation agnostic, properties have been defined that can be used with either binding. For backwards compatibility, if the implementation specific property is used it will be applied to either binding implementation if specific, but users are encourages to use the rationalized property name. If non rationalized properties are used that are specific to a particular implementation, those properties will be passed through to the binding, and will produce a warning if, for example an unrationalized jcsmp.XXX property is configured and the JNI binding is in use (See XPLATFORM-752). Here is final set of rationalized properties for JCSMP and JNI Binding
SOLACE BINDING | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-782 - Create builder style setter accessors on adm generated messages | ||||||||||||||||||||||||||||||||||||||||||||
Provides 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. ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-784 - Enhance AdmCodeGenerator and Maven Plugin to allow accepting ADM directives | ||||||||||||||||||||||||||||||||||||||||||||
The code generator and Core X Maven Plugin were enhanced to allow code generator directives to be supplied. See http://docs.neeveresearch.com/display/KB/ADM+Message+Modeling#ADMMessageModeling-Directives ADM MESSAGE LIBRARY | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-786 - Static Field Accessors for Entry.simpleClassName and Entry.className | ||||||||||||||||||||||||||||||||||||||||||||
This feature allows the fields Entry.className and Entry.simpleName to be used without deserializing the payload, Entry.object. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-787 - Field Based Type Inference Improvements | ||||||||||||||||||||||||||||||||||||||||||||
More restrictive type inference is possible by inspecting the predicates of a query's WHERE clause. Prefer this, and only apply type inference across all the fields of a query if there is no viable type inference against the WHERE clause. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-796 - Add getAppMain() in SrvAppLoader to fetch application main class | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this story, there is no way by which the SrvAppLoader can be programmatically queried for the application's main class object. This story implements SrvAppLoader.getAppMain(). The method returns the application's main class object | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-802 - Add latency instrumentation to JMS binding | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this release, the JMS binding does not participate in message path latency calculation and reporting. This release enhances the JMS binding to calculate and report latencies | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-809 - Implement Server Shutdown on Last App | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this release, a Talon server continued to run even if all applications in the server had stopped. This release changes this behavior such that the server will automatically stop when all applications in the server have stopped. Setting the nv.server.autostop.onlastappstop system property to false will revert to the old behavior. TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-811 - Implement heartbeat dispatch to application handlers | ||||||||||||||||||||||||||||||||||||||||||||
Prior 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. All rules regarding message and embedded entity lifecycle that apply to regular messages also apply to the heartbeat message i.e. the application needs to acquire a reference to the message and/or embedded entities in case it desires to keep the message beyond the scope of the call. | ||||||||||||||||||||||||||||||||||||||||||||
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
Notes
| ||||||||||||||||||||||||||||||||||||||||||||
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 BUILD/INFRASTRUCTURE | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-850 - Implement common IAlertEvent and ILifecycleEvent accessors | ||||||||||||||||||||||||||||||||||||||||||||
Prior 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 events Note: 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-856 - Support expected startup for Talon applications | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this release, there was no way to specify expected startup conditions for applications managed by a Talon server. Expected startup conditions could only be specified with AEP Engines explicitly created by the application. This release implements the following with regard to the configuration of an AEP engine's startup expectations
| ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-858 - Implement getTriggeringMessage() for IAlertEvents | ||||||||||||||||||||||||||||||||||||||||||||
This change adds the implementation of IAlertEvent.getTriggeringMessage for the following event types.
Applications can utilize the return message to provide more detailed diagnostics of the message. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-859 - Replicate Log Metadata | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this release, the transaction log metadata was not replicated between primary and backup. With compaction enabled, this means that the live log number and CDC metadata was not replicated resulting in (1) the backup being out of phase with the primary with respect to log numbering (2) log scavenging never occurring on the backup and (3) CDC restart occurring from the beginning on failover. This story replicates the log metadata to address these issues. This involves (1) metadata being replicated and applied at the backup during backup initialization from the primary (2) replication of the primary's metadata and application of the replicated metadata to the backup during steady state replication (3) real time scavenging of logs on the backup during #1 and #2 and (3) enhancing the CDC processor to be able to navigate around missing logs (which can legitimately happen if cluster members are stopped and restarted across compaction boundaries). With this story, the primary and backup remain in lock step not only with respect to the content of the logs but also log numbering and other log metadata. Note: Metadata replication does not occur for clusters that are not CDC enabled and with compaction disabled (since, with these settings, the metadata is effectively replicated by parallel writes to the logs). | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-864 - Enhance Talon SrvController to provide accessors for external config object | ||||||||||||||||||||||||||||||||||||||||||||
This release add the ability to tag a talon server's SrvController with an external configurer. Applications can access the object as follows: Applications that create Talon servers programmatically can set boostrap configuration with the following call: TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-873 - Poolable Strings using Copy Semantics | ||||||||||||||||||||||||||||||||||||||||||||
This change removes the "Copy from the name of the Pooled String getter method generated by ADM: becomes | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-876 - Re: Add the ability to create Poolable String Type factories Generically | ||||||||||||||||||||||||||||||||||||||||||||
This release introduces the ability to create factories for poolable string type factories introduced in XPLATFORM-873 in a generic fashion as illustrated below: | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-885 - Add server host name to SrvMonHeartbeatMessage | ||||||||||||||||||||||||||||||||||||||||||||
This enhancement adds a new serverHostName field to the SrvMonHeartbeatMessage emitted by a Talon server. The hostName is set with the value of: | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-887 - Dispatch "sent" objects to CDC handlers | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this release, objects of type "Send" in a transaction log were not dispatched to CDC handlers during CDC processing. This release adds support for such objects to be sent to the CDC handlers. | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-888 - Implement Binary Logger | ||||||||||||||||||||||||||||||||||||||||||||
This story implements a binary logger aka "blogger". A blogger is a simple, easy to use logger for binary data. The blogger is layered on top of a standalone ODS store. It inherits all the benefits of the store and the X transaction log i.e. zero-garbage, high performance, detached persistence, object replay, SQL based structured queries, compaction, CDC (i.e. tailing) and ICR (for decoupled replication to a remote node etc). | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-915 - Enhance X-DDL to allow configuration of server discovery descriptor | ||||||||||||||||||||||||||||||||||||||||||||
This feature introduces the ability to configure a server's discovery descriptor in x-ddl. This is accomplished with a new optional discoveryDescriptor attribute on server: | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-921 - Allow VMConfigurerer.configure to take an InputStream as alternative to a File | ||||||||||||||||||||||||||||||||||||||||||||
This improvement adds a VMConfigurer.configure(Inputstream is, ISubstResolver) signature that allows a user to pass in an input stream containing the deployment descriptor xml rather than a File which is useful for applications that supply the x-ddl from the classpath rather than the filesystem. TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-922 - Feature Request: Publish x-ddl.xsd documentation. | ||||||||||||||||||||||||||||||||||||||||||||
The x-ddl schema is now documented with comments on the elements and attributes and published to a web location with each release build. Additionally a comprehensive document describing it has been added to the knowledge base: Schema Published: http://build.neeveresearch.com/core/schema/LATEST/x-ddl.xsd Reference Document: http://docs.neeveresearch.com/display/KB/DDL+Schema+Reference TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-927 - Implement Embedded Talon Server Support | ||||||||||||||||||||||||||||||||||||||||||||
This feature add a new EmbeddedServer class to Core X which allows the bootstrapping and creation of an Embedded Talon Server in a fashion consistent with the logic used by a standalone Talon Server launched via com.neeve.server.Main. For example if an application has a com.foo.MyConfigurer defined in META-INF/services/com.neeve.server.Configurer, and the talon server is launched standalone via java -cp lib/* com.neeve.server.Main --name MyServer The server can be equivalently launched in an embedded fashion using The above code would:
| ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-929 - Implement AepEngine pre / post dispatch message handler. | ||||||||||||||||||||||||||||||||||||||||||||
This release replaces the current IAepCentralMessageHandler with IAepPredispatchMessageHandler and adds a IAepPostdispatchMessageHandler. This gives applications to do post dispatch message processing in addition to the pre dispatch processing that was enabled by IAepCentralMessageHandler previously. AepEngine now has setPredispatchMessageHandler and setPostdispatchMessageHandler methods for setting these, and the setCentralMessageHandler api has been deprecated along with IAepCentralMessageHandler. IAepPostdispatchMessageHandler is invoked only if all previous handlers before it completed successfully (including predispatch handler, normal and default handlers). If any of these throw an exception the engine will dispatch an AepApplicationExceptionEvent which can additionally trapped by an IAepPostdispatchMessageHandler if notification is needed in the event of an error. TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-937 - Non-blocking dispatch of inbound messages | ||||||||||||||||||||||||||||||||||||||||||||
This feature adds the capability to configure a bus manager to enqueue inbound messages into the engine's multiplexer in a non-blocking manner which can be useful in cases where an application that operates with message loops can cause a deadlock. In x-ddl this is configured with: <app> and may also be configured programmatically on an AepEngineDescriptor via it's bus manager properties | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-945 - Allow specifying default values in channel key variables | ||||||||||||||||||||||||||||||||||||||||||||
This release allows channel keys to specify default values for variable components of the key by using ${propName[::defaultValue]} syntax. The default value is applied only if propName is not found in the message, KRT provided to the send call, or the KRT configured for the channel (the global KRT) SMA TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-946 - Fluent setters on interfaces | ||||||||||||||||||||||||||||||||||||||||||||
This release adds 'fluent' builder style method signatures to interfaces generated by ADM when the generateBuilderSetters code generation directive is set to try. Prior to this release builder style setters were only generated on the impls. ADM | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-952 - ADM - access to default factory id and model documentation | ||||||||||||||||||||||||||||||||||||||||||||
The ADM model and XML schema has been enhanced to allow access to both the default factory and model documentation via the API as parsed from XML: The following enhancements have been made
| ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-953 - Implement simplified Annotated Command annotation for Talon apps | ||||||||||||||||||||||||||||||||||||||||||||
This release adds support for simplified server command handler annotations. Prior to this command methods annotations was done by specifying an AppCommandHandler annotation that indicated the command name, and the message signature had to take two parameters, the command name and an array of command arguments that it was left to the application to parse. In this release this AppCommandHandler annotation is still supported, but applications may opt to use the following new annotations instead:
For example an application may @Command annotated methods may use only primitive java types as parameters and return values. Some example commands are: Because the the above Command annotation doesn't specify a command name, the command name is taken as the name of the message. The command can take no parameters and has no return type. A more complex example would be: In the above command, the command name is "echo" and can be invoked via robin with or without the count option (to use its default value): TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-972 - Implement lendXXX() for ADM String fields | ||||||||||||||||||||||||||||||||||||||||||||
This release implements the lendXXX() accessor for String in ADM generated messages. The method accepts an immutable XString. The use of this method avoids an extra copy between the domain and the serialized form of messages on which it is invoked ADM | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-978 - Message type specific messaging latencies | ||||||||||||||||||||||||||||||||||||||||||||
Prior to this release, messaging waypoint latencies are computed as aggregate across all message types. This release adds the ability to configure the system to compute these latencies by message type. To enable latency computation and reporting by message type, set nv.msgtype.latency.stats=true | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-980 - Implement X-DDL Properties Based Overrides | ||||||||||||||||||||||||||||||||||||||||||||
This feature allows elements and attributes defined in x-ddl platform.xml files to be overridden via properties supplied to the VMConfigurer via the ISubstResolver. Configuration overrides have been documented at: http://docs.neeveresearch.com/display/KB/DDL+Schema+Reference TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-987 - Implement AdmFactoryInfo annotation to allow ADM messages to expose their factory for introspection | ||||||||||||||||||||||||||||||||||||||||||||
The ADM Code Generator has been enhanced to add an annotation on generated message and entity classes to allow the type's corresponding factory to be located. ADM | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-988 - Add factory registry variants that throw exceptions on factory id conflict | ||||||||||||||||||||||||||||||||||||||||||||
Provides new registerIfNoConflct methods for store object and message factories that throw OdsFactoryIdConflictException and SmaFactoryIdConflictException respectively if an attempt is made to register a factory class with an id that conflicts with another factory. This doesn't change the default behavior of AepEngine.registerFactory() which still uses the old variant that overwrites an existing factory definition TALON | ||||||||||||||||||||||||||||||||||||||||||||
XPLATFORM-992 - Implement global env section in X DDL and configuration repository. | ||||||||||||||||||||||||||||||||||||||||||||
This new feature introduces an <env> element to the x-ddl schema which allows XRuntime configuration properties to be specified in DDL. Properties defined in the <env> element are seeded into the X configuration repository along with the buses, apps and servers being configured. The Talon server loads these values into XRuntime. See http://docs.neeveresearch.com/display/KB/DDL+Schema+Reference#DDLSchemaReference-EnvironmentConfiguration for more details. TALON |
Improvement
XPLATFORM-257 - Auto Index creation should be improved to take into account whether the query requires full table scan | ||||||||||||
When TLT is not configured to wait for index creation when executing queries (e.g. FLUSH_NEVER), auto index creation should be deferred until after the query is executed, so that results can be returned faster. Additionally any auto indexed fields that are not used to satisfy the currently executing query are deferred until after query execution. | ||||||||||||
XPLATFORM-331 - Allow Select ClassName.* as a synonym for Select ClassName | ||||||||||||
Enable field syntax: "select Customer." as well as "select com/foo/Customer.". These are each semantically equivalent to "select Customer" or "select com/foo/Customer". QUERYING | ||||||||||||
XPLATFORM-392 - Provide feature parity for reflectors across encodings. | ||||||||||||
This release provides parity in functionality between Xbuf, protobuf and Json message reflectors in support of dynamic channel key resolution:
TALON | ||||||||||||
XPLATFORM-441 - TransactionLogTool metadata description doesn't match dumped metadata fields | ||||||||||||
Prior to this change transaction log ROG metadata fields dumped in the transaction log tool were displayed in the abbreviated form used for message trace (e.g. txnid instead of transactionId) rather than their bean accessor form. TLT now dumps the fields using their bean path names to make them consistent with query and describe syntax. This change also change the format of entries dumped vi 'next -d', 'dump -d' or 'dump -s' to display the entries as a valid block of json so that the entry can be cut and pasted into a json viewer, and adds additional entry fields to trace. QUERYING TALON | ||||||||||||
XPLATFORM-463 - Modify teamcity builds to publish javadoc to nexus for bundled and unbundled | ||||||||||||
The javadoc jar for nvx-core-all is now published to Neeve's nexus repository which provides Maven users with easier javadoc reference from within IDEs. BUILD/INFRASTRUCTURE | ||||||||||||
XPLATFORM-487 - Implement Zero Garbage Message reflectors for Xbuf. | ||||||||||||
This release enhances MessageReflectors for Xbuf to allow zero garbage append operations of non nested fields' string values to another XString for the folllowing field types:
This makes it possible to do zero garbage dynamic topic resolution for against variable channel keys for values that come from a message's non nested fields. ADM TALON | ||||||||||||
XPLATFORM-556 - Implement binary record search for monotonically increasing or decreasing fields at the repository level | ||||||||||||
Implement monotonic scanning as a query plan read step. This HUMMINGBIRD | ||||||||||||
XPLATFORM-648 - Autoindexing should support a threshold beyond which it will not consider fields in the select clause. | ||||||||||||
This improvement adds a new autoindexLimit property to the Transaction Log Tool to limit the number of fields autoindexed per query (default of up to 5 fields). This avoids the situation in which an issued query with a large number of fields and autoindexing enabled can slow down querying. Fields considered for autoindexing are taken from the WHERE, Order By, Group By and SELECT clause in that order, in the order they are specified in that clause. QUERYING TALON TOOLS | ||||||||||||
XPLATFORM-675 - Add trace of generated message factory versions during startup. | ||||||||||||
This release add support for displaying the version of the platform and user build against which ADM generated code was generated. Trace can be enabled that displays this information in several ways:
ADM TALON | ||||||||||||
XPLATFORM-689 - Provide config parameter to switch off setting messages to read-only post dispatch | ||||||||||||
Applications authored to older versions of X that did not set fields in nested entities to be read-only when the parent message was set as read only can be adversely impacted by the change that does propagate the read-only attribute down the message graph. To provide a time buffer for such applications to make the change to not touch inbound messages post return from its handler, a new config parameter - nv.aep.inbound.setasreadonly - has been implemented. If set to false, then inbound messages are not set as read-only upon return from its handler | ||||||||||||
XPLATFORM-706 - Upgrade to Solace 6.1.0 | ||||||||||||
This change upgrades the solace version from 5.5.1 to 6.1.0 (JCSMP version 6.1.0.197, CCSMP Version 6.1.0.148).
SOLACE BINDING | ||||||||||||
XPLATFORM-708 - Efficiently delete Sort Area data structures after they are no longer in use | ||||||||||||
Producing results for certain queries sometimes involves writing the data to a temporary storage area particularly in cases where large sets of entries need to be sorted. This fix resolves an issue in which clean up of this area could take a long time resulting in a subsequent query executing more slowly than it should. The relevant files are now simply deleted. In current testing the time to clean up these temporary data structures is no longer discernible from TLT. HUMMINGBIRD | ||||||||||||
XPLATFORM-710 - Optimize single field query performance | ||||||||||||
Queries that are against a single, indexed field can now be satisfied purely by reading the index. Because indexes are lighter weight than log files this results in a significant performance gain. E.g. select Order.orderNumber from logs where Order.orderNumber between 1000 and 1100 HUMMINGBIRD | ||||||||||||
XPLATFORM-714 - User setting should override nv.optimizefor when determining detached sends for AEP Bus Manager | ||||||||||||
Prior to this release, if nv.optimizefor is set to latency, then the system forces send commits to be detached in non-administrative AEP Bus Managers. There are certain low latency situations where attached commits are desired. This release enhances the AEP bus manager such that a detached commit setting by the user takes precedence over setting the detached flag via the nv.optimizefor setting. | ||||||||||||
XPLATFORM-715 - nv.optimizefor=throughput should default AEP Bus Manager send commit to detached | ||||||||||||
Prior to this release, the nv.optimizefor=latency setting is used to determine whether to default the send commits for non-administrative AEP Bus Managers to detached (provided the user has not explicitly set the detached setting). This story enhances the AEP Bus Manager to also set send commits to detached if nv.optimizefor=throughput for non-administrative bus managers (provided, once again, the user has not explicitly set the detached setting). | ||||||||||||
XPLATFORM-725 - Update x-adm schema's namespace to 'http://www.neeveresearch.com/schema/x-adm' | ||||||||||||
The namespace for x-adml.xsd has been updated from http://www.neeveresearch.com to http://www.neeveresearch.com/schema/x-adml. The schema is bundled in the platform jars and used to validate message model files. Any model files declared with the old namespace will therefore fail to validate until the xlmns attribute is updated to the new namespace ADM | ||||||||||||
XPLATFORM-727 - Provide config parameter to switch off setting messages to read-only post send | ||||||||||||
Applications authored to older versions of X that did not set fields in sent messages and their nested entities to be read-only can be adversely impacted by the change that sets outbound messages (and their nested entity graph) as readonly. To provide a time buffer for such applications to make the change to not touch outbound messages post return from its send method, a new config parameter - nv.aep.outbound.setasreadonly - has been implemented. If set to false, then outbound messages are not set as read-only upon return from the AEP engine send method | ||||||||||||
XPLATFORM-732 - Output Solace API version from binding | ||||||||||||
This improvement enhance the solace JNI binding to output the solace library version at startup to bring it in line with the JCSMP binding. SOLACE BINDING | ||||||||||||
XPLATFORM-735 - Rename 'Checkpoint' startup expectation to 'LogEmptines' | ||||||||||||
With the implementation of 'checkpointing', 'compaction' and CDC in Core X 1.8, the 'Checkpoint' startup expectation is incorrectly named for what it is intended. This story renames the 'Checkpoint' exception in AEP, ODS, ROG and PktRecoveryLog to 'LogEmptiness' since that is really what it is supposed to check for on startup Note: This is a breaking change for applications that use the 'Checkpoint' startup expectation. The applications would need to change to use the renamed 'LogReadiness' exception instead | ||||||||||||
XPLATFORM-736 - Remove shared PktRecoveryLog and RogLog readers | ||||||||||||
Prior to this release, the PktRecoveryLog holds a reader that can be used to read the log. The RogLog, layered on the PktRecoveryLog, extends the support of such logs to its own reader - RogLogReader. The support for use of shared and private readers is complex and therefore prone to issues while providing little or really no benefit. The model where anyone who wishes to read a log needs to create a reader, use it and then close it is robust since the lifecycle of the reader is not tied in any way to the log itself which is for writing purposes. This release removes support for shared PktRecoveryLog and RogLog readers. | ||||||||||||
XPLATFORM-738 - Add method on Solace binding to expose stats collected from solace appliance | ||||||||||||
This improvement additionally dumps Solace session level stats along with other bus binding stats when bus binding stats are logged. SOLACE BINDING | ||||||||||||
XPLATFORM-739 - Handling of bad messages in solace binding | ||||||||||||
In case of bad message, the following action would be taken 1) Log the bad message id SOLACE BINDING | ||||||||||||
XPLATFORM-756 - Enable cut through persistence by default for JNI binding | ||||||||||||
This improvement enabled cut through persistence when the solace JNI binding is used (translates to setting FLOW_FORWADING_MODE in the solace binding to "2") SOLACE BINDING | ||||||||||||
XPLATFORM-765 - Implement Xbuf getSerializeToNativeLength() method to help callers of serializeToNative serializer | ||||||||||||
Adds a getSerializedToNativeLength() method to xbuf generated embedded entities. This allows callers to allocate memory up front and/or do target buffer bounds checking. ADM MESSAGE LIBRARY | ||||||||||||
XPLATFORM-770 - Embedded entities generated by protobuf and json don't have acquire/dispose methods | ||||||||||||
This change adds reference counting related methods (acquire/dispose/getOwnershipCount) to embedded entities generated with Protobuf/Json encoding to provide api compatibility with Xbuf generated source. Because Protobuf and Json embedded entities are not pooled the method implementations don't actually perform reference counting and as such will not trigger an IllegalStateExceptions related to reference counting. To allow applications to determine if reference counting is actually implemented for a type, an additional method isReferenceCounted() has been added across all encodings. When false is returned by this method the application should not expect validation of referencing counting for acquire/dispose calls, and can ignore the value of getOwnershipCount(). ADM MESSAGE LIBRARY | ||||||||||||
XPLATFORM-771 - Add Native Serializers to embedded entities generated with Json and Protobuf encodings | ||||||||||||
This change adds API parity for the embedded entity serialization methods that allow serialization / deserialization to a native memory address allowing. Prior to this change the native serialization methods were only generated for xbuf generated entities. Additionally, this change adds an isBufferBacked() method to embedded entities, to allow applications to test if using native serialization would efficient. Because json and protobuf generated entities aren't buffer backed calling getSerializedToNativeLength() followed by serializeToNative() would result in the entity being serialized to an intermediate byte[] on each call. So applications may prefer to instead call serializeToByteArray(), and serialize the bytes directly to avoid the extra byte[] serialization. MESSAGE LIBRARY | ||||||||||||
XPLATFORM-776 - Remove TLT query filter caching | ||||||||||||
In 1.8 the ability to cache the ids of matching transaction log enties in a temporary disk backed structure. The goal of this feature was to make subsequent rescan of results more efficient (particularly in cases where there the selectPreviewCount in the tool is non zero). However, further testing has shown that for some types of filtering steps this can be less efficient due to the I/O overhead of writing out the cached ids. Consequently, this 'optimization' has been disabled for query plan filter steps which can improve initial query result times significantly to queries that are not very selective of results. PERFORMANCE QUERYING | ||||||||||||
XPLATFORM-781 - Improve TLT json dump performance | ||||||||||||
Dump of json entries from the TLT has been made mode effiicient (dump observed to be 4000% faster in some tests) TOOLS | ||||||||||||
XPLATFORM-788 - Avoid TLT entry deserialization when querying on simpleClassName or className | ||||||||||||
Transaction Log Tool querying has been to avoid deserializing an entry's payload to to determine its type. The tool now inspects the binary factory and payload type values to look up the type without deserialization which can be a significant improvement for queries that filter heavily on type. QUERYING TOOLS | ||||||||||||
XPLATFORM-792 - Implement the ability to read a repository via an unindexed monotonic field | ||||||||||||
Impliment monotonic scanning as a query plan read step. This enables more efficient reads of a repository (transaction log) when there are query predicates restricting a monotonically increasing or decreasing field and that field is not indexed. (Given a suitable index, an indexed read is preferred as it will perform better.) HUMMINGBIRD TALON | ||||||||||||
XPLATFORM-800 - TLT shouldn't allow opening a log with --repair flag and read only access mode | ||||||||||||
Improves TLT to disallow open transaction logs with the --repair flag and a read only open mode. Transaction logs cannot be repaired in read only mode as the repair operation requires writing to the repaired log. Prior to this improvement, a cryptic "Error executing 'open': null" would be displayed if stracktrace display is off. TOOLS | ||||||||||||
XPLATFORM-801 - Potential for 'false positive' Aep Engine Stuck Alert event on idle engines. | ||||||||||||
Stuck alert events are now only emitted if the stuck condition has persisted through two stuck alert threshold checks. This prevents a 'false positve' alert from occurring in the case where an engine has been idle for more than the stuck alert threshold and a new transaction is started just before a stuck engine check is made. In this case, the previous logic would 'see' that there are incomplete transaction, and that the last completed transaction occurred beyond the stuck alert threshold, even though the newly started transaction may have just started. The new check prevents such a situation, but can lead to a slightly increased time to detect a stuck engine (but still less than 2 stuck alert threshold periods) TALON | ||||||||||||
XPLATFORM-812 - Replace IAepWatcher callbacks with dispatch of AEP engine events | ||||||||||||
This improvement removes the IAepEngineWatcher interface in lieu of emitting events. The ILifecycleEvent and IAlertEvent interfaces have been introduced to allow applications to register interest in these event types by declaring a single EventHandler annotated method. The following lists the current event types that implement those interfaces respectively: LifecycleEvent
AlertEvent
| ||||||||||||
XPLATFORM-828 - Enable Spring-like environment substitution in VMConfigurer and Interactive Tools | ||||||||||||
Currently property substitution by VMConfigurer and InteractiveTool supports the following syntax: $subst(%propName::defaultValue%) This feature additionally allows doing substitution in the form: ${propName} or ${propName::defaultValue} For backwards compatibility, the old style of substitution is performed first followed by the new substitution mechanism. TALON | ||||||||||||
XPLATFORM-830 - Allow private and protected method AppXXX and EventHandler annotated method discovery and invocation. | ||||||||||||
This change allows discovery and invocation of private and protected annotated methods for annotations in the following packages.
This allows applications better control over what methods are exposed without having to resort to inner or anonymous classes to hide such methods. In terms of precedence in contexts where an annotation can only be used once, publicly declared methods will be discovered first and will be preferred over a protected or private method signature unless specifically documented to behave otherwise. TALON | ||||||||||||
XPLATFORM-853 - Facility for Talon Server to Print Version Numbers at Startup | ||||||||||||
Enhance the Talon Server's Main class to print out the version of the platform it is being launched from when the server is started in embedded mode. Prior to this change version information was only printed when running the server from a standalone distribution. Additionally a static api was added to Talon server main class (com.neeve.server.Main) to return the ProductInfo that contains the product version: | ||||||||||||
XPLATFORM-857 - XPlatform BOM should specify version for native jars | ||||||||||||
This change enhances the nvx-platform-bom to include versions for artifacts with classifiers including:
Prior to this change user poms that use the above classifiers would have to set the version explicitly. | ||||||||||||
XPLATFORM-862 - Add triggering message to AepInboundLogExceptionEvent | ||||||||||||
This release adds the ability to get the message that triggered the inbound message logging failure using the standard IAlertEvent.getTriggeringMessage() accessor. | ||||||||||||
XPLATFORM-863 - Document Server Mon Alert Lifecycle and Heartbeat models. | ||||||||||||
ADM documentation to the server monitoring Alert and Lifecycle models which add javadoc to the generated messages that back Alert and Lifecycle events when running in a Talon Server. The following packages are now included in javadoc: | ||||||||||||
XPLATFORM-868 - BackingMessage not set on dispatched AepEngineApplicationExceptionEvent | ||||||||||||
This release adds a backing message to the event AepApplicationExceptionEvent. The backing message is of type AepApplicationExceptionMessage and is populated for the event when running in a Talon Server TALON | ||||||||||||
XPLATFORM-877 - Primary and Backup transaction log sizes should be the same | ||||||||||||
Prior to this release, the primary and backup transaction logs did not always have the same size. In many cases, the backup transaction log would be larger than the primary's. This is because of the presence of the ODS subheader in the log entries on the backup when not being present on the primary. This release fixes this so that the log sizes are the same. | ||||||||||||
XPLATFORM-879 - Poolable String types generated from entity/message field names can conflict with other types. | ||||||||||||
Fixes an issue in which poolable string types created based on a field's name can conflict with other types either declared in the model or in that are built in. A new directive was added called pooledStringFieldTypeNameSuffixPolicy which can take the following values:
Finally, an additional directive, 'pooledStringFieldTypeNameSuffix' was introduced to allow the user to change the type name suffix to a value of their choosing. ADM | ||||||||||||
XPLATFORM-932 - XString.Factory.PROP_INITIAL_LENGTH doc should specify that it refers to the size in bytes not characters. | ||||||||||||
The javadoc for XString.Factory.PROP_INITIAL_LENGTH was clarified to indicate that the length refers the size of the backing buffer preallocated (as need to encode the string as UTF-8 encoded bytes). Note, that at present XStrings still only support string manipulation of ascii encodable characters, so in many cases the distinction is not important, but as XString do allow pass through transport of non ascii Strings this can still be an important consideration. HUMMINGBIRD | ||||||||||||
XPLATFORM-938 - Failures seeding configuration repository from VMConfigurer are not logged | ||||||||||||
Prior to this release the trace output to the "nv.config" logger was suppressed by VMConfigurer when seeding the configuration repository. This release updates the configuration plugins to provide more granular error and warning trace along and changes VMConfigurer to see X's configuration repository with a trace level of WARNING, allowing applications that use VMConfigurer along with an x-ddl, to better diagnose configuration errors. | ||||||||||||
XPLATFORM-947 - Add support for disabling native buffer management in favor of Unsafe | ||||||||||||
This release allows disabling optimized buffer management operations provided by the Neeve native kernel, and enhances support for sun.misc.Unsafe based buffer management which Unsafe has been shown to be faster in some cases. Kernel based buffer management can be disabled by specifying: When native kernel buffer management is disabled the platform falls back to Unsafe buffer management. Unsafe buffer management can, in turn, be disabled with: In which case the system will fall back to traditional byte buffer and arrays based buffer management. An AepEngine will display trace about what type of buffer management is enabled when config trace is enabled: For applications not using an AepEngine lower level buffer management config trace can be enabled via: which will print buffer management config to the console. HUMMINGBIRD | ||||||||||||
XPLATFORM-950 - Change default claim strategy for AEP detached send to be SingleThreaded instead of MultiThreadedSufficientCores | ||||||||||||
The default publisher claim strategy for AEP using detached sends was changed from multi threaded to single threaded which improves performance. Mutli Threaded claim was not necessary because it is not legal for multiple threads to the bus manager simultaneously. | ||||||||||||
XPLATFORM-966 - Detached dispatch in Solace binding | ||||||||||||
Prior to this release, the Solace binding supported performing the actual send of messages in a thread separate from the thread that performs serialization. However, it is the Solace runtime dispatch thread that does both receipt from Solace and deserialization. This release adds the capability to perform "detached" dispatch i.e. hand off the received message to a separate thread to perform deserialization. This separates the machinery that copies the serialized message out of the Solace runtime and the machinery that deserializes this serialized form into a message that is usable by the application. This has a considerable improvement in throughput performance. The new descriptor parameters that control detached dispatch are as follows: | ||||||||||||
XPLATFORM-971 - Configuration property to override use of native UtlTime.now() | ||||||||||||
Prior to this release, UtlTime automatically switched to using the native implementation for now() if the native X libraries can be located. This release adds a new configuration parameter - nv.time.usenative - that can be used to override this behavior. The default value of this parameter is true i.e. default behavior is backward compatible. If set to false, UtlTime.now() will use System.nanoTime() even if native X libraries can be located. | ||||||||||||
XPLATFORM-985 - ADM generated enum fromValue should include invalid argument when throwing IllegalArgumentException | ||||||||||||
This change enhances the IllegalArgument thrown from an ADM generated enumeration's fromValue(int) method to include the illegal argument value in the exception text to make it easier to diagnose issues. ADM | ||||||||||||
XPLATFORM-995 - Enhance Aep Message Tracing to use same trace as TransactionLogTool | ||||||||||||
This improvement enhances the AepEngine message trace output displayed when nv.aep.msg.trace=true is specified to provide the same formatting options as the Transaction Log Tool. The trace options are not controlled as follows:
This change deprecates the 'nv.aep.msg.trace.full' property in favor of nv.aep.msg.trace.metadata above. See http://docs.neeveresearch.com/display/KB/AEP+Engine+Trace for more details TALON | ||||||||||||
XPLATFORM-996 - Allow setting store discovery as individual element in x-ddl | ||||||||||||
This improvement allows for configuration of the cluster discovery descriptor to be specified in x-ddl outside of the main descriptor. Prior to this change configuring a unique discovery descriptor for the store was only possible by setting it in the store descriptor's address portion which didn't allow passing in additional discovery descriptor parameters. Example: TALON | ||||||||||||
XPLATFORM-998 - Enable class specific reference tracking. | ||||||||||||
This improvement allows reference tracking to be enabled for individual classes. Prior to this change reference tracking could only be enabled globally which results in too much overhead for some cases because it involves additional memory and introduces significant processing overhead. Reference tracking may now be enabled as follows:
| ||||||||||||
XPLATFORM-999 - Enhance UtlThread should test for affinity enablement on each call. | ||||||||||||
This change allows for the the properties 'nv.enablecpuaffinitymasks' and nv.defaultcpuaffinitymask' to be updated via XRuntime and take effect for newly created thread. This change is necessary because the affinitizer can be initialized prior to execution of an application's VMConfigurer. HUMMINGBIRD | ||||||||||||
XPLATFORM-1005 - Implement support for nv.checked to globally switched off checked processing | ||||||||||||
Prior to this release, there was no configuration setting to toggle checked processing at a global level. This release implements support for nv.checked to be used to globally switch checked processing on/off. Default value for this property is true | ||||||||||||
XPLATFORM-1014 - Ensure that setAsPriority messages are sent in order with respect to other priority messages with adaptive batching enabled | ||||||||||||
This change ensures that messages sent with the new setAsPriority() flag set are sent in order with respect to previous messages sent in the same batch when adaptive batching is enabled. TALON | ||||||||||||
XPLATFORM-1025 - Provide option for ADM XML Parser to cache parsed model imports | ||||||||||||
Enhances the ADM XML Parser to provide an option to cache imported models. This improves parse times for applications that load models with large shared imports. ADM |
Change
XPLATFORM-285 - Disable support for detached persistence with State Replication | ||||||||||
X currently does not support state replication with detached persistence. Prior to this release, X also did not check and protect against this configuration. This release adds checks to protect against this configuration. If a state replication engine is configured for detached persistence, it will cause the AEP engine creation to fail with an IllegalStateException | ||||||||||
XPLATFORM-519 - Create extensible RawString base type | ||||||||||
This release changes the XString interface into a concrete extensible based type which is a replacement for the RawString interface introduced in 1.8. RawString has been deprecated and applications should be updated to use XString in place of RawString in all locations where it was previously used. This change lays the ground work for allowing the introduction of XString pooling and extensible pooled String types. Source Code Compatibility In many cases existing code written using RawString will continue to compile. However, because RawString was deprecated, it extends XString rather than XString extending it. This was necessary because of the nature of some of the old RawString's invocation chaining style of methods. Because of this and the additional API changes in Core X and ADM generated code, application code may need to be updated to use XString types or compilation errors will be occur. HUMMINGBIRD | ||||||||||
XPLATFORM-669 - Implement Runtime Compatibility Check in ADM Generated Code | ||||||||||
Starting 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-748 - Disallow usage of outbound logging for Store Persister | ||||||||||
This release of X drop support for using the store's transaction log for outbound message logging. Consequently, the outbound message logging policy may now only specify UseInbound if the inbound message logging policy is set to UseDedicated (or Off). Note that in future releases, the notion of sharing a persister for inbound and outbound message may be dropped entirely, so users are encouraged to use separate persisters explicitly. TALON | ||||||||||
XPLATFORM-775 - Create Index Schema Version check for Query Indexes to prevent compatibility issues | ||||||||||
As 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. QUERYING TOOLS | ||||||||||
XPLATFORM-805 - Update To Solace 7.x Libraries. | ||||||||||
This release updates the Solace JCSMP dependency version to 7.1.0.207 and the JNI CCSMP version to 7.1.0.227. SOLACE BINDING | ||||||||||
XPLATFORM-855 - Ensure all lifecycle and alert events that pass through AepEngine have the engine as the source | ||||||||||
Prior 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-867 - Upgrade MapDB to version 1.0.7 | ||||||||||
This release upgrades the mapdb version from 1.0.6 to 1.0.7 to address index consistency issues observed in the transaction log indexes created by the Transaction Log Tool. | ||||||||||
XPLATFORM-878 - Disable automatic JVM restart by Tanuki wrapper | ||||||||||
Prior to this release, the Talon servers managed via Robin were configured to restart if the JVM exits unexpectedly. This release disables this behavior i.e. Robin managed Talon servers will not restart automatically if the JVM exits | ||||||||||
XPLATFORM-880 - Main class not found in TOA when using embedded talon server | ||||||||||
This change enhances talon's app loader to check the thread context classloader for the class when it is launched in an embedded mode. The check for the context class loader is done before using the classloader that loaded the class to give the caller better control over classloading. TALON | ||||||||||
XPLATFORM-913 - Server Monitoring Model xml not packaged with nvx-core-all | ||||||||||
Because the server monitoring models (lifecycle, alert and heartbeats) are not artifacts that might be used directly by end user applications, this change bundles the model.xml in the built jars:
| ||||||||||
XPLATFORM-916 - Overloaded method pooled string getters that take a default or a factory clash | ||||||||||
Prior to this change the generated poolable string accessors: and made it necessary to cast when supplying a null defaultValue for the default value accessor.
| ||||||||||
XPLATFORM-919 - ADM Code Generator should copy the source model to the generated source output folder | ||||||||||
ADM models generated by the code generator should be included in the built jar so that components can introspect the model at runtime, because the presence of code generator directives external to the model may alter the model to some degree, the code generator now outputs a copy of the model in a namespace qualified path in the generated source output directory.
ADM | ||||||||||
XPLATFORM-933 - Change default value of pooledStringFieldTypeNameSuffixPolicy to be 'None' rather than 'OnConflict' | ||||||||||
This release changes the default ADM pooledStringFieldTypeNameSuffixPolicy to be None. Prior to this release the default policy was OnConflict, which is less predicable and therefore an unsuitable default value. See http://wiki.neeveresearch.com/display/KB/ADM+Message+Modeling#ADMMessageModeling-PoolableStringTypes ADM | ||||||||||
XPLATFORM-942 - Change X-Server thread pool names to include the name of the server. | ||||||||||
To avoid conflicts when two talon servers are launched within the same JVM and to ease debugging of thread dumps, the Talon server's main and IOThreads have been renamed as follows:
TALON | ||||||||||
XPLATFORM-973 - Default Solace session client name to binding user name | ||||||||||
Prior to this release, the Solace binding defaulted the client name used when establishing the Solace session to "" if not specified by the user via the binding's connection descriptor. This release changes the binding to use the binding's user name as the default. For applications using the AEP engine, the engine sets the user name as the engine's name. SOLACE BINDING | ||||||||||
XPLATFORM-974 - Default TCP_NODELAY in Solace binding to false | ||||||||||
Prior to this release, the Solace binding defaults TCP_NODELAY to true. This is inconsistent with other configuration parameters that default to favor high throughput instead of low latency. This release changes the default for TCP_NODELAY to false from true. SOLACE BINDING | ||||||||||
XPLATFORM-975 - Rename fail_on_bad_message to fail_on_inbound_message_handling_fault in Solace binding | ||||||||||
Prior to this release, the Solace binding supported a configuration parameter named fail_on_bad_message that can be specified via the connection descriptor. The name of this parameter is not reflective of the behavior it invokes since setting this parameter to true will cause the binding to shut down if any fault is encountered during the processing of an inbound message prior that prevents the message from being enqueued in the app's AEP engine's inbound multiplexer. This release changes the name of this parameter to more accurately reflect the behavior that it invokes. The name of the parameter is now fail_on_inbound_message_handling_fault SOLACE BINDING | ||||||||||
XPLATFORM-979 - Remove quarantine functionality from solace binding | ||||||||||
This change drops support for quarantining message on an inbound message handling fault in the solace binding. Prior to this release a use could specify quarantine="true" in the binding url, and the binding would attempt to transmit the raw message in error on the "quarantine" channel. In practice, this functionality was of limited use because often times in such cases the binding itself is in a bad state and not able to quarantine the message. Instead it is recommended that users declare an @EventHandler for UnhandledMessageEvent. SOLACE BINDING | ||||||||||
XPLATFORM-981 - Remove fluent setters from generated interfaces. | ||||||||||
This miletsone removes generation of fluent setters are generated interfaces when the generateFluentSetters directive is enabled because it introduces too many possible type conflicts for the return type when a class implement multiple interfaces with the same field. ADM | ||||||||||
XPLATFORM-982 - Rename ADM generateBuilderSetters directive to generateFluentSetters | ||||||||||
The ADM directive generateBuilderSetters has been renamed to generateFluentSetters. The old property name has been deprecated. ADM | ||||||||||
XPLATFORM-983 - Talon Server should exit when it is fed unrecognized arguments. | ||||||||||
This change improves argument parsing in the Talon Server main class to abort the launch of the server if there are unrecognized arguments on the command line. Prior to this changed unrecognized arguments were silently ignored which can lead to error if the user makes a typo. TALON | ||||||||||
XPLATFORM-1001 - Transaction Log Tool's Result Count Estimate is Misleading | ||||||||||
When a select statement is issue to the TransactionLogTool, the tool builds a query plan, but does not necessarily execute it. Instead it returns control to the user and attempts to give the user a sense of how expensive the query will be to execute (e.g. whether or not a full scan of the logs will be required, or an estimated number of entries that will need to be read to serve results). This change makes this clear to the user by change the display text from: query> select * FROM logs where transactionId = 0 to: query> select * FROM logs where transactionId = 0 TOOLS | ||||||||||
XPLATFORM-1013 - Expose UnhandledMessageEvent as AlertEvent | ||||||||||
This release changes UnhandledMessageEvent to extend AlertEvent and backs it with alert monitoring model message SrvMonUnhandledMessageMessage. An UnhandledMessageEventis dispatched by a MessageBusBinding to notify that a received message could not be dispatched by the message bus binding. This is different from AepUnhandledMessageEvent (backed by SrvMon*App*UnhandledMessageMessage) in that the former indicate a failure prior to dispatching the message to the engine, while the latter indicates a failure after the message has been dispatched from the bus binding to the engine. Some examples of situations that result in an UnhandledMessageEvent are:
TALON |
Bug
XPLATFORM-408 - Indexer Files not deleted on index delete | |||||||||
The mapdb library was upgraded from 1.0.1 to 1.0.6 to resolve file locking issues on windows which resolves an issue where indexer files weren't deleted successfully. QUERYING | |||||||||
XPLATFORM-604 - upgrade Jackson Json parsing libraries to 2.4.3 | |||||||||
The jackson libraries used for Json serialization have been upgraded from 2.0.4 to 2.4.3 | |||||||||
XPLATFORM-639 - Calling getLogFIle or backupLog on a non existent log creates a metadata file | |||||||||
Resolves an issue in which certain operations on a non existing transaction log file would result in a .metadata file be created even if the transaction log itself does not exist. TALON | |||||||||
XPLATFORM-641 - Clearing a Query Indexer doesn't reset the indexer size | |||||||||
Resolves and issue in which the index size metric may not be reset correctly when divergence is detected between the index and transaction log which could cause the transaction log Query Engine to create inaccurate query execution plans. QUERYING | |||||||||
XPLATFORM-681 - QueryEngine's FLUSH_NEVER policy incorrectly uses partially built indexes | |||||||||
If a query with an ORDER BY clause is executed via an index-ordered read of a relevant index this index must be fully populated. Previously there were scenarios where partially indexed field could inaccurately return less than the entire relevant result set. Note that if auto-indexing is enabled a query may generate one or more indexes. If its execution plan uses one of these indexes and the indexingPolicy is set to FLUSH_ON_USE then the query will wait for the index to be populated before it returns its results. In testing against 2.1M entries this could take up to 195 seconds. QUERYING | |||||||||
XPLATFORM-682 - Memory Leak in Solace JCSMP binding | |||||||||
Addresses a memory leak in BestEffort delivery for the Solace JCSMP binding, introduced during the transition to a shared kernel between the JNI and JCSMP binding. BestEffort messages were being held in acknowledgement queue and not being cleaned up because BestEffort messages are not acknowledged by downstream entities. This fix avoids holding best effort messages in the acknowledge queue. SOLACE BINDING | |||||||||
XPLATFORM-745 - Record XXXXX has not been loaded thrown | |||||||||
Resolves a timing issue in which an exception like com.neeve.query.QueryException: Record 60260352 has not been loaded. Can be seen when executing a TLT Query QUERYING TOOLS | |||||||||
XPLATFORM-764 - ArrayIndexOutOfBoundsException removing a node from State Graph | |||||||||
Fixes a concurrent modification issue that manifests as an ArrayIndexOutOfBoundsException which can occur when removing a node from a State Replication state graph where the node itself has child nodes. TALON | |||||||||
XPLATFORM-773 - Setting nv.msg.latency.stats=false should disable output of the stat as well. | |||||||||
Bus manager stats were fixed not to dump latency stats along with the engine stats when the latency stats are disabled. | |||||||||
XPLATFORM-779 - JsonProperty annotations are added to Entity fields in Xbuf And Protobuf encodings | |||||||||
The Json serialization for Protobuf and Xbuf generated entities was erroneously serializing non embedded entity fields. With this fix newly generated code will no longer serialize non embedded entity fields to json. | |||||||||
XPLATFORM-797 - Message will be dropped silently if Solace Message channel is null | |||||||||
1) Added log message for Channel not found for inbound message with message with that particular message id and which topic the message was received on. SOLACE BINDING | |||||||||
XPLATFORM-833 - Errors out of SrvController.init() are not trapped in SrvController.start() | |||||||||
Resolves an issue in which a java.lang.Error thrown during Talon server initialization was not being trapped which made diagnosing startup issues difficult to diagnose. HUMMINGBIRD | |||||||||
XPLATFORM-835 - TLT should automatically repair corrupt transacton log indexes | |||||||||
If the query engine encounters a corrupt index file it will be TALON TOOLS | |||||||||
XPLATFORM-852 - Should be able to clear read only flag on ROG metadata | |||||||||
This release adds setReadOnly(boolean) method on IRogMetadata, which allows the metadata to written after being read off the wire or from disk. This should only be called by tools that are using the RogLog api; it should never be called by application code. | |||||||||
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. TALON | |||||||||
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. | |||||||||
XPLATFORM-870 - SELECT MAX(filePostion) followed by dump -d results in an NPE | |||||||||
Allow ResultSet rows that are not record-based, e.g. an QUERYING | |||||||||
XPLATFORM-881 - IllegalArgumentException: Comparison method violates its general contract | |||||||||
Resolves an issue in the ADM code generator when optimizing field ordering using JDK 7 or higher. Prior to this fix the comparison logic for fields could result in "IllegalArgumentException: Comparison method violates its general contract" for certain combinations of fields types in a given messsage or entity. | |||||||||
XPLATFORM-883 - Compilation error on xxxOrThrow methods: cannot find symbol: class JsonIgnore | |||||||||
Resolves an issue in AMD code generation with the <generateDefaultGetters>true</generateDefaultGetters> directive resulting in a interface compile error due to a missing JsonIgnore import. ADM | |||||||||
XPLATFORM-884 - ADM code with required array fields fails to compile with generateRequiredFieldValidators directive. | |||||||||
Resolves a compile issue in ADM generated code for required array fields. The validation logic relies on the presence of a hasXXX method for the field, and those methods were removed from ADM generated code for array fields. | |||||||||
XPLATFORM-906 - Race Condition in ICR Receiver can cause dropped message during failover | |||||||||
This fix resolves an race condition in an ODS Store's ICR Receiver, in which the ICR message bus binding can start receiving messages before the Receiver is considered to be in the 'Open' state. Because the Receiver doesn't process received ICR traffic when it isn't Open, this could result in missing replication entries at the beginning of the ICR stream. This fix eliminates the race condition and ensures that traffic received while the Receiver is opening is processed. | |||||||||
XPLATFORM-907 - TLT archive fails with dedicated outbound log and no dedicated inbound log | |||||||||
Fixes an bug in the Transaction Log Tool `archive -m` command when archiving logs for an engine with an outbound log but no inbound message log. Prior to this fix the command would result in a NullPointerException | |||||||||
XPLATFORM-909 - Replayed Message transaction ids can diverge on Backup or ICR Receiver | |||||||||
This bug fix resolves an issue in which a backup or ICR receiver can overwrite the transaction id of a replicated message with an older transaction number which could cause a received message to be ignored by an ICR receiver in the event that the primary fails and it resumes processing a replication stream from a backup member. | |||||||||
XPLATFORM-920 - Deadlock between Server Stats Thread and Engine close thread on first stats interval | |||||||||
This fixes a deadlock that can occur for a Talon Application running in a Talon Server with server stats enabled when the the server or one of its applications is stopped concurrently with the first stats collection interval. TALON | |||||||||
XPLATFORM-934 - String field deprecation in ADM model causes compile error for Xbuf encoding. | |||||||||
Resolves a code generation issue with xbuf code generation of the setXXXAsLong method for an ADM Model that declares a String field as deprecated. Prior to this fix the code generated applied to @Deprecation annotations to the method which results in a "duplicate annotation" compile error. ADM | |||||||||
XPLATFORM-940 - x-ddl server multithreading generates incorrect xcs config scripts | |||||||||
Fixes a bug in seeding the platform's configuration repository from an x-ddl (platform.xml) descriptor that specifies multiple server IO threads and their affitinities. TALON | |||||||||
XPLATFORM-963 - AepOutOfOrderSendCommitCompletionAlertEvent events generated in the application with mixed QoS channels | |||||||||
Fixes an issue where an AepOutOfOrderSendCommitCompletion alert is dispatched when using mixed QoS. The logic that checks whether a send commit completed out of order now permits a BestEffort send to complete prior to a Guaranteed send which is a plausible scenario for many SMA providers. This change only affects whether the alert is generated, the AepEngine still provides total commit completion ordering so if an outbound BestEffort message from transaction 2 is completed before transaction 1 which had a Guaranteed message, completion of transaction 1 and 2 won't complete until the ack for the transaction 1 comes back. TALON | |||||||||
XPLATFORM-977 - o2s should be computed when nv.msg.latency.stats=true | |||||||||
Prior to this release, the o2s latency metric was only computed if nv.aep.<app>.latency.stats was set to true. However, it should be computed if either nv.aep.<app>.latency.stats is set to true or nv.msg.latency.stats is set to true. This release fixes this bug STATS AND ALERTS | |||||||||
XPLATFORM-1007 - StoreMemberReplicationStatus.dispose attempt to access a pool (method=put()) after it has been closed after backup failure | |||||||||
This fix resolves a severe bug that can occur when a primary engine that uses pooling (for example an engine configured to use optimizefor=latency or optimizefor=throughput) loses the connection to the backup. <55,20477,perf5.neeveresearch.com> 20151005-19:44:36:114 (sev)...Multiplexer event handler [com.neeve.aep.AepEngine@45f7c030] faulted with error [java.lang.IllegalArgumentException: attempt to access a pool (method=put()) after it has been closed] on event {[event=MESSAGE, type=105, source=blackbird, owners=1, endOfBatch=true, delay=0, scheduledTime=0, dispatchTime=0, channel=xsim-orders, view=com.neeve.poc.electronic.messages.OMSNewOrderSingle, autoAck=true, local=true]} with the following stack trace: jvm 1 | java.lang.IllegalArgumentException: attempt to access a pool (method=put()) after it has been closed jvm 1 | at com.neeve.util.UtlPool.putUnprotected(UtlPool.java:893) jvm 1 | at com.neeve.util.UtlPool.postWash(UtlPool.java:966) jvm 1 | at com.neeve.util.UtlPoolWasher.washAndPut(UtlPoolWasher.java:173) jvm 1 | at com.neeve.util.UtlPoolWasher.wash(UtlPoolWasher.java:187) jvm 1 | at com.neeve.util.UtlPool.put(UtlPool.java:1024) jvm 1 | at com.neeve.ods.impl.StoreMemberReplicationStatus.dispose(StoreMemberReplicationStatus.java:54) jvm 1 | at com.neeve.ods.impl.StoreCommitCompletionStatus.clearReplicationStatuses(StoreCommitCompletionStatus.java:47) jvm 1 | at com.neeve.ods.impl.StoreCommitCompletionStatus.reset(StoreCommitCompletionStatus.java:73) jvm 1 | at com.neeve.ods.impl.StoreCommitCompletionEvent.reset(StoreCommitCompletionEvent.java:94) jvm 1 | at com.neeve.event.Event.init(Event.java:327) jvm 1 | at com.neeve.event.Event.init(Event.java:18) jvm 1 | at com.neeve.util.UtlPoolWasher.washAndPut(UtlPoolWasher.java:172) jvm 1 | at com.neeve.util.UtlPoolWasher.wash(UtlPoolWasher.java:187) jvm 1 | at com.neeve.util.UtlPool.put(UtlPool.java:1024) jvm 1 | at com.neeve.event.Event.dispose(Event.java:294) jvm 1 | at com.neeve.event.EventMultiplexer.dispatchEvent(EventMultiplexer.java:349) jvm 1 | at com.neeve.event.EventMultiplexerSingleThreaded.dispatch(EventMultiplexerSingleThreaded.java:545) jvm 1 | at com.neeve.event.EventMultiplexerSingleThreaded.access$1300(EventMultiplexerSingleThreaded.java:33) jvm 1 | at com.neeve.event.EventMultiplexerSingleThreaded$CarrierEventProcessor.onEvent(EventMultiplexerSingleThreaded.java:392) jvm 1 | at com.neeve.event.EventMultiplexerSingleThreaded$CarrierEventProcessor.onEvent(EventMultiplexerSingleThreaded.java:385) jvm 1 | at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:113) jvm 1 | at java.lang.Thread.run(Thread.java:745) jvm 1 | at com.neeve.event.EventMultiplexerSingleThreaded$ProcessorThread.run(EventMultiplexerSingleThreaded.java:225) jvm 1 | Ignoring... TALON | |||||||||
XPLATFORM-1011 - TLT Log Archive fails with -m flag and no inbound log present. | |||||||||
Fixed an issue with the TLT archive command. Issuing the command `archive -n mylog -m` was causing the main log to be added to the list of logs to be archived twice when no inbound log is present which caused the archive operation to fail. TOOLS | |||||||||
XPLATFORM-1015 - AepEngine cannot be cast to com.neeve.sma.MessageBusBinding | |||||||||
This resolves a bug in which MessageBusBindingEvent.getMessageBusBinding was throwing a ClassCastException. TALON | |||||||||
XPLATFORM-1016 - SOLCLIENT_SUBCODE_CONTROL_OTHER on failover to backup when starting messaging | |||||||||
Addresses an issue in which message on a backup fails to start when using the solace message bus binding. In some cases solace may not immediately detect that the primary's connection has failed. This change adds two new connection properties to the solace binding to allow a backup instance to retry connections on failover:
The session open retries logic above is not specific to failover scenarios and are applicable to any solace binding in which they may be useful. SOLACE BINDING | |||||||||
XPLATFORM-1017 - Reference counting error detected by detached outbound logger doesn't result in clean shutdown | |||||||||
Resolves an issue in detached message loggers (inbound and outbound) in which reference counting errors introduced in application code can cause the detached writer thread to exit without properly failing the journaller, which in turn could block the main engine event processing thread. This fix also covers a store's transaction log persister and ICR sender/receivers which share the same code and were thus also subject to a risk of hanging in the presence of reference counting errors. |