dxFeed/QDS 3.200 released

dxFeed/QDS 3.200 has been released to public.
Available at: /downloads/api/java/latest-release/

Build 3.200 introduces a number of changes since the last public build 3.154, including implementation of new transaction mechanism for historical snapshots and book delivery, a lot of changes in RMI and order source support for blended full order depth order books.

Summary of changes in internal builds 3.160-3.200:

Release Notes – QD – Version 3.200
** Change Request
QD-678: dxFeed API shall have consistent properties documentation for all event types
QD-680: dxFeed API shall use enum types in Order and TimeAndSale events
QD-687: dxFeed API: Default doubles values in event objects shall be Double.NaN
QD-699: dxFeed API: Expose Short Sale Restriction flag in Profile
QD-701: dxFeed API: OrderBookModel sort order
QD-703: QD Core: Add sequence to Order records and events
QD-708: dxFeed API: Undeprecate Promise.whenDoneAsync method
QD-710: dxFeed REST API JSON serialization must be similar to results of dxFeed JS API
QD-711: dxlib: enable sync flush for ZIP compression
** Defect Report
QD-694: Tools: Dump doesn’t support filtering anymore
QD-702: NullPointerException in AgentChannel/AgentAdapter
QD-704: dxViewer: Application stops updating after any exception
QD-707: NullPointerException in OrderBookModel
QD-712: History snapshot flags do not pass through when using striping
** Improvement
QD-705: DXFeed API: Optimize QDCore usage when DXFeedSubscription.addSymbols is used with new string reference
QD-706: DXFeed API: Optimize DXFeedSubscription.addSymbols for a case of one symbol that is already in subscription set
Release Notes – QD – Version 3.199
** Change Request
QD-685: Introduce OrderSource for DirectEdge BATS One Market Depth Feed
** Defect Report
QD-671: String representation of built-in filters like “feed” should not be expanded to a list of records
QD-690: BUG FIX: Writing data with restricted event flags breaks data format.
QD-691: BUG FIX: History collector shall ignore incoming records which has no time.
QD-695: NullPointerException at AgentQueue.retrieveSnapshotForHistory
QD-696: BUG FIX: NullPointerException in FeedFileHandler.writeFile
QD-697: BUG FIX: stats overflow
Release Notes – QD – Version 3.198
** Change Request
QD-663: dxFeed API: Support subscription and publishing of indexed events from a specific source
QD-665: dxFeed API: Support getIndexedEventsPromise and getTimeSeriesPromise with snapshots
QD-666: dxFeed API: Deprecate Promise.whenDoneAsync method
QD-667: dxFeed API: Optimize Promise for a case of a single PromiseHandler
QD-668: dxFeed REST API for time series and indexed events
QD-669: dxlib: TimeFormatTest shall support parsing and formatting of full ISO6801 (like in XML)
QD-670: dxFeed API: Provide DailyCandle event with impVolatility and openInterest
Release Notes – QD – Version 3.197
** Change Request
QD-476: Support storeEverything mode in History
QD-642: dxFeed API: IndexedEventModel should not extend List, but provide getEventsList method
QD-643: QD History shall set transaction flags in examineData() method
QD-644: QD Core: Update QDCollector.remove method and support it in History
QD-645: Tools: Multiplexor shall write DESCRIBE_PROTOCOL header to its snapshot file and support flags
** Defect Report
QD-611: QD Core: Examine Data from History shall avoid holding global lock while flushing data to disk.
Release Notes – QD – Version 3.196
** Change Request
QD-320: dxFeed API: Add support for Complex Orders (e.g. ISE Spread Book / Complex Order feed)
QD-335: dxFeed API: Implement IndexedEventModel and TimeSeriesEventModel
QD-549: History snapshots and cleanups
QD-625: dxFeed API: support for snapshots and transactions on indexed events and time series events
Release Notes – QD – Version 3.169
** Change Request
QD-640: RMI: Introduce BasicSubject with user+password and use it when there is no explicitly set subject
QD-693: Schedule: add new holiday calendar for TR
** Improvement
QD-684: Use JSR-305 annotations for nullability, GuardedBy, etc
Release Notes – QD – Version 3.168
** Change Request
QD-595: IPF filter: ability to specify user/pass and escape special symbols in URL
QD-612: QD Core: Support dynamic filters on agent (data provider) side without connection reset
QD-649: dxlib: Introduce explicit Marshalled.NULL constant with the result of Marshalled.forObject(null)
QD-652: RMI: Support remote interface methods with Promise<T> as their declared return type
QD-654: Common configuration framework for application protocols and agent adapters
QD-655: QD AgentAdapter shall support channels configuration properties
QD-656: RMI: More mechanisms to fail-fast when client code is using suspend/resume improperly
QD-659: RMI: RMIServiceInterface annotation
QD-660: Tools: “-s|–stat” shall be specified for each tool when running multiple tools using “+” option
** Defect Report
QD-530: Tools: Connect and compare “-f|–fields” option does not understand property names (new field names)
QD-620: RMI: Tests are highly unreliable, time-depended, and fail randomly
QD-647: Tools: Compare does not work (IllegalArgumentException) again
QD-648: Marshalled, which supports Null Object incorrectly deserialized
QD-657: RMI: When task is cancelled before it has started execution error type is TASK_CANCEL_LISTENER_NOT_SET
QD-658: RMI: Unknown subject identifier
QD-662: dxFeed API methods shall operate silently without exception on closed endpoint
** Improvement
QD-650: Improve user-perceived latency of QD History snapshot retrieval
QD-651: RMI: Improve memory footprint of some RMI client-side and server-side data structures
QD-661: Do not use DXEndpoint.close() in sample code to make it fool-proof
Release Notes – QD – Version 3.166
** Change Request
QD-513: RMI: Support request continuations (suspend/resume) for convenient asynchronous calls that do not consume executor thread
QD-635: dxFeed API: Enable safe and convenient use of xxxModel classes in multi-threaded backend application via setExecutor
QD-637: TDP: Analyze and show true stack trace trees in thread dump parser
** Defect Report
QD-627: RMI: A race in abort of incoming request on close of RMIEndpoint that may lead to non-aborted requests on a closed connection
** Improvement
QD-629: RMI: Shall log local request processing errors of all type (with the only exception of checked application exceptions)
QD-638: Agent channels shall buffer subscription requests in chunks filled up to buffer capacity
Release Notes – QD – Version 3.165
** Defect Report
QD-615: Different monitored QD endpoints in the same JVM are in conflict when publishing their stats under the same MARS node
QD-636: MARS Connectors log with “ERROR” level
Release Notes – QD – Version 3.164
** Defect Report
QD-634: NullPointerException at AgentAdapter.prepareProtocolDescriptor
Release Notes – QD – Version 3.163
** Change Request
QD-598: dxFeed API and RMI: Default executors shall log unhandled exceptions
** Defect Report
QD-628: dxFeed API: Missing logging of uncaught errors in event listener
** Improvement
QD-630: Agent channels shall filter subscription before submitting it to QD core to increase throughput
QD-631: QD Core shall support REMOVE_SYMBOL event flag in addSubscription invocation to combine add/remove sub under one lock
QD-632: NIOConnector shall have better configuration and monitoring of reader/writer thread pools
Release Notes – QD – Version 3.162
** Defect Report
QD-621: RMI: Task that is cancelled before it had a chance to run in executor throws IllegalStateException
QD-622: ThreadDumpParser does not recognize “eliminated” locks in stack trace
QD-626: AddressSyntaxException when trying to use filter with DXEndpoint
** Improvement
QD-623: ThreadDumpParser shall print consistent percents (vs number of dumps) and sort depth by the number of occurrences (descending)
QD-624: ThreadDumpParser shall not count recursive methods multiple times
Release Notes – QD – Version 3.161
** Defect Report
QD-613: ArrayIndexOutOfBoundsException in TransformContext
QD-618: IndexOutOfBoundsException in History
QD-619: Copying data between RecordBuffers in different modes does not correctly transfer extra stuff
** Improvement
QD-606: RMI: RMIRequest shall be an abstract class that is extended by RMIRequestImpl
QD-610: Improve speed of RMI tests
Release Notes – QD – Version 3.160
** Change Request
QD-88: RMI: Explicit class-loader support
QD-250: RMI: Should not require ExecutorService implementation, should work with Executor
QD-313: RMI: Support basic forwarding of requests from one endpoint to another
QD-388: Tools: Multiplexor shall support RMI request forwarding
QD-408: QD Core: Retrieve first incoming data record on subscription separately as snapshot, prioritize its processing and network transfer
QD-506: RMI: Asynchronous server-side task API
QD-510: Schedule: update RussellTick
QD-511: RMI: Expose RMIServiceImplementation class and simplify a set of RMIServer.export methods
QD-512: Tools: Forward: RMI request forwarding tool
QD-523: RMI: add getPromise methods to RMIRequest
QD-524: RMI: Provide client-side executor for notification
QD-533: RMI: Introduce RMIEndpoint.Side enum
QD-592: dxFeed API: Integrate news API via RMI
QD-594: QD Core: Support linking of records in RecordBuffer
QD-596: MessageConnectors shall support special characters in password and other properties
QD-599: dxlib: Provide additional utility methods in SystemProperties class for use in class-local static magic constants
QD-600: Timing: Add US holidays for 2015-2023 to Timing.
QD-603: RMI: Shall do nothing when connect is called with the same address
QD-604: RMI: Provide public QD-level API integrate arbitrary QDCollectors with RMI
** Defect Report
QD-525: RMI: Non-public exported class does not work
QD-607: DXFeed API: User and password set via DXEndpoint methods are not sent with SSL
QD-608: RMI: Race condition can get RMIRequest stuck queued on closed connection
QD-609: QD Core: IllegalStateException when using Ticker.examineData, OnDemand in DXFeed API does not work
** Improvement
QD-79: RMI: Local toString handling in RMIInvocationHandler when toString is not explicitly declared in remote interface
QD-473: RMI: Provide separate RMIClient and RMIServer for RMIEndpoint
QD-475: RMI: Support internally-marshalled representation of RMIOperation
QD-481: RMI: Extract immutable marshalled RMIxxxMessage classes
QD-521: RMI: Make sure that the order of calls to RMIRequest.send and RMIRequest.setListener does not matter
QD-541: RMI: Should work when connect method is invoked on an attached DXEndpoint
QD-552: RMI: Proxy invocation handler shall have a local cache of operations
QD-597: RMI: Ensure that RMIRequest is fully thread-safe