Fixed an unwanted restriction that could have been posed on some particular kinds of licenses.
Removed unwanted occurrences of the "Failed to handle hijacked messages in this connection: must close the socket" WARN log, introduced in build 1949 with the extended support of the <max_delay_millis> setting. In fact, upon most of the occurrences of this log, the reported condition was harmless.
Fixed a bug introduced in build 1949 with the extended support of the <max_delay_millis> setting. Under particular conditions, the bug could have caused a significant delay in the delivery of updates upon session startup.
Replaced internal libraries for delivery of mobile push notifications (MPN)
for both Apple™ and Google™ platforms, with the objective of improving
performance and introducing the support for web push notifications (i.e.
MPN delivered to a web application running on a desktop web browser).
In particular, the new Apple™ APNs libraries take advantage of the HTTP/2
transport. On the Google™ side, the GCM libraries have been replaced
with the newer FCM libraries, which also support web push notifications.
This change has several side effects:
apple_notifier_conf.xml
configuration file:google_notifier_conf.xml
configuration file:COMPATIBILITY NOTE: If an existing installation supports clients based on a version of the Android Client SDK before 4.2 and MPN features are used, they may not work properly. In this case, an update to Android Client SDK version 4.2 is needed. See paragraph "Special Considerations on the GCM to FCM Transition" in the General Concepts document for more information and how to update. However, the MPN Module is not available with this edition.
Also revised the thread usage involved in MPN Module operations. The "COMPOSER" and the various "NOTIFIER" thread pools have been collapsed in a single "NOTIFIER" pool. As a consequence, the <notifier_pools> block and the <composer_pool_size> element in the configuration file have been replaced by the optional <notifier_pool_size> element. COMPATIBILITY NOTE: If keeping a configuration file in which the pool configuration was leveraged, it should be revised. Obviously, the changes in the thread pools are also reflected by the instances of ThreadPoolMBean returned by the JMX extensions SDK. However, the MPN Module is not available with this edition.
Applied various improvements to the backpressure mechanisms to better cope with the case of massive connection or reconnection of clients:
Revised internal handling of logging to improve separation between the logback
libraries and kernel code. This allows you to configure custom appenders,
or filters or other extensions with no risk of conflict with other libraries.
Look for the new notes in lightstreamer_log_conf.xml.
To achieve this, the following further changes were needed:
Introduced a separate kernel library, ls-mpn.jar, to host the MPN module code. Also added various third-party libraries and removed some. COMPATIBILITY NOTE: if trying to upgrade an existing installation, make sure you have removed the libraries no longer used. Moreover, if using a custom launch script, ensure that the new libraries are now referred. Aligned the factory log configuration file to allow for configuration of the error log from the new third-party libraries. COMPATIBILITY NOTE: if keeping an existing log configuration file, the error log from the new third-party libraries will not be received, unless the configuration is extended.
Introduced a separate kernel library, ls-mpn.jar, to host the MPN module code (however, the MPN Module is not available with this edition). Also added a few third-party libraries and renamed some. COMPATIBILITY NOTE: if using a custom launch script, ensure that the new libraries are now referred.
Revised the factory log configuration file with regard to configuration of the
error log from third-party libraries.
Fixed a possible inefficiency in the management of the log from third-party libraries.
Introduced a heuristic mechanism to temporarily enlarge the TCP send buffer when a big amount of data is ready to be sent. This removes the negative effect of the use of small TCP send buffers (needed for congestion detection) on throughput when a high roundtrip time is involved. The problem affected, in particular, long snapshots and big updates.
Introduced various improvements on the support for client https connections (see the <https_server> configuration block).
Discontinued the support for java 7 SDK and runtime environment. Java 8 or later is now required. COMPATIBILITY NOTE: installations of the Server still based on a java 7 JVM have to be upgraded. Existing Adapters that were compiled for a java 7 or earlier JVM don't need to be upgraded.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license file, an upgrade of the license file is needed.
Fixed the "stop" script, which was ineffective when the JMX RMI connector
port was configured with TLS/SSL. The bug also affected the startup test
of the connector.
On the startup test, also fixed the log message about the test outcome,
which always reported "successful".
Fixed a bug which could have caused wrong interpretation of non-ascii characters in client requests when longer than single TCP packets. The bug affected Java, Android, iOS, macOS, tvOS, watchOS, and Generic client SDKs. It could affect create_session requests with long user/password. It could also affect long or aggregated subscription requests and long send_message requests, but only for HTTP (i.e. non-WebSocket) Sessions.
Fixed a bug which could have caused session recovery attempts to fail when the client had specified a maximum bandwidth limit. This affected, for instance, the Monitoring Dashboard.
Fixed a wrong statement in the Clustering.pdf document regarding the invocation
of setEarlyWSOpenEnabled(false) on the client when cookie-based persistency
is leveraged. Actually, this invocation is not just related to performance,
but it is mandatory, as needed to ensure the correct behavior.
Also revised some configuration examples in the Clustering.pdf document,
with a uniform policy on port numbers and listening interface settings.
Fixed a bug in the JMX Tree of the Monitoring Dashboard, which caused the setting of the "AllocatedMaxBandwidthKbps" property of the Session MBean to fail.
Revised the conditions under which a suspended MPN device is reactivated: now it is sufficient for the client to register its device again, even with the previous device token. A token change, while still working as before, is no more necessary. However, the MPN Module is not available with this edition.
Removed a wrong (though harmless) warning log that was issued in case a dual RSA/ECDSA certificate were stored in a PKCS12 keystore.
Removed a possible unneeded pause of several seconds during the shutdown operation, only related with online license validation.
Modified the way internal library paths have to be specified on the JVM command line and modified the launch scripts accordingly. However, the whole handling of library paths by the launch scripts has been revised. COMPATIBILITY NOTE: if using a custom launch script, any customization should be ported to the new script structure. You may contact Lightstreamer support for help.
Removed a memory allocation inefficiency in the management of "delta delivey" which could have doubled the memory footprint related with the caching of last values sent to the clients for each subscribed item and field.
Improved the handling of sessions abandoned by the client before receiving any response. Now they are immediately discarded, rather than kept for the recovery timeout.
Introduced the <service_url_prefix> configuration flag. See the factory configuration file for details. It may also be used as a partial replacement of the already deprecated <base_url_path>.
Extended the variable-expansion feature, available in the main and edition configuration file and in the various adapters.xml files, by
See the details by looking for the description of the variable-expansion
feature for each file, starting from the file's head comment.
Also clarified in the head comments the case-sensitivity policies.
Added checks to prevent duplicated configuration of port and listening interface in the <http_server> and <https_server> blocks. COMPATIBILITY NOTE: Existing configurations are not expected to fail on the new checks; otherwise, the Server startup would have failed during the socket bind operation. Moreover, added a check to refuse configuration of port 0. COMPATIBILITY NOTE: Existing configurations were never supposed to specify port 0, which caused the Server to open a system-determined port.
Extended the Internal MONITOR Data Adapter with the CLIENTS.REFUSED_SESSIONS
field for the "monitor_statistics" item, which reflects the
"CumulRequestsRefused" property provided by the JMX interface (Resource MBean).
Likewise, extended the Internal Monitor log.
COMPATIBILITY NOTE: If a custom automatic elaboration process of the
Internal Monitor log is in place, it may have to be aligned.
Removed an annoying startup log message about the JDK's
javax.management.mbeanserver logger not being configured.
Slightly revised the startup sequence.
Slightly revised the startup log regarding Adapter loading.
Improved log messages upon startup failure during JMX startup.
Slightly revised the log of web requests (the ones on loggers
LightstreamerLogger.webServer and descendants).
Improved the log of unsuccessful polling requests.
Improved the log messages upon "sync errors".
Extended the log upon sessions closed by missing rebind
(i.e. cause code 39), to identify the scenario.
Added the "requests" sublogger of the "LightstreamerLogger.mpn" logger and migrated the log of client requests to the MPN module there. In the recommended, factory configuration, the "LightstreamerLogger.mpn" logger has been extended to INFO level. However, the MPN Module is not available with this edition.
Improved internal request processing.
Slightly revised the request parsing and the error notifications in case
of low-level syntax errors.
Extended the support of the <max_delay_millis> setting, which is meant for data updates but only partially applied to other messages. This should slightly reduce the overall outbound bandwidth usage with recent SDKs on WebSocket.
Extended the Clustering.pdf document with notes on the new support for session draining added to the JMX service (Server MBean).
Aligned the documentation of the Internal Monitoring Data Adapter in the General Concepts document, by adding the field related to the new .NET Standard SDK in the "monitor_details" item. The alignment was forgotten in the 7.0.3 release.
Documented that the configured <session_timeout_millis> is also involved in client inactivity checks.
Updated the Client Library included in the Monitoring Dashboard to SDK for Web Clients (Unified API) Version 8.0.1. COMPATIBILITY NOTE: If the current licensing doesn't support Web SDK Version 8.0.x, still no upgrade is needed in order to use the Monitoring Dashboard.
Fixed this changelog, as the build number of the previous 7.0.2 version was mistakenly reported as 1855.3 instead of 1885.3.
Fixed an annoying bug introduced in version 7.0.1 and affecting the "relative appenders" provided with the Server and preconfigured in the factory log configuration file as LSRolling and LSDailyRolling. Upon the first modification (of any kind) of the file while the Server was running, the position of the generated log files would have changed and become relative to the launch directory instead of the configuration file directory, until the next restart.
Fixed a bug which could have caused a ClassCastException during update forwarding. As a consequence, this would have caused a streaming session to be suddenly closed with error code 43. The bug was triggered by a rare race condition, only possible with items subscribed to in both RAW and MERGE mode.
Fixed the check that at least one custom Adapter Set is defined. A warning log saying "No custom Adapter Set defined." might have been issued (or not issued) wrongly.
Completed the support for .NET Standard Client SDK, recently published on NuGet, which was partial in the preexisting versions of the Server. Added, in particular, handling of Session recovery, support in edition configuration file, and dedicated fields in the "monitor_details" item of the Monitoring Data Adapter.
Ensured runtime compatibility with Java 11; this involves changes and additions of third party libraries, as well as changes in the launch script. COMPATIBILITY NOTE: As the updated libraries have different names, if upgrading an existing installation, make sure you have removed the previous version of the libraries first. Moreover, if using a custom launch script, ensure that the new libraries are now referred. COMPATIBILITY NOTE: If an existing installation uses a custom launch script, the changes should be ported.
Fixed a bug introduced in version 6.0.2 which prevented the handling of JVM variable expansion in the main configuration file, when such variables were used to define tag attributes.
Fixed a bug in the reporting of unexpected exceptions on some Websocket requests, which caused a nullPointerException to be reported instead.
Removed spurious startup log messages, possible when starting with the factory configuration file, mentioning duplicated <remove_protocols> settings.
Fixed the preconfigured error page, ErrorPage.html, which was not aligned after renaming the internal logo in version 7.0.1. This renaming was in turn missed in 7.0.1 changelog. COMPATIBILITY NOTE: If you have configured a customized error page, which, nevertheless, still links Lightstreamer internal logo, it should be aligned as well. Also improved the logo.
Introduced various improvements on the support for client https connections (see the <https_server> configuration block).
Discontinued the support for java 6 SDK and runtime environment. Java 7 or later is now required. COMPATIBILITY NOTE: installations of the Server still based on a java 6 JVM have to be upgraded. Existing Adapters compiled for a java 6 SDK don't need to be upgraded.
Fixed a bug that, under conditions of huge activity and high parallelism, could have caused one or more threads to enter a strict loop and the whole Server to hang.
Fixed a bug introduced in 7.0.0 which caused the configuration of TLS/SSL on the JMX RMI connector to be refused as not licensed in case the DEMO license type was configured.
Fixed a bug introduced in 7.0.0 which caused the <truststore> configuration block in the <https_server> block to be ignored. This only affected the case in which either <use_client_auth> or <force_client_auth> (or both) was set to Y.
Fixed bug in MPN module that could have caused an error when a new Server instance was taking over devices from a previous instance. This would have caused delays in the takeover operation.
Improved handling of control requests targeted to closed sessions on WebSockets. Such requests might have been reported as "Bad request"; now a proper error notification will always be issued.
Clarifying some logging messages and improved logging in various ways:
Added to the included Monitoring Dashboard (License tab) a section, only available when the online license validation is leveraged, which reports the number of Server instances currently active and validated for the same contract ID.
Improved the reporting of client IPs in the internal Monitoring Data Adapter and Monitoring Dashboard.
Added a check to refuse session recovery requests specifying an event not yet sent; in fact, in principle, such request could be fulfilled, but they are implicitly forbidden by the specifications.
Aligned the Clustering.pdf document (paragraph 4) to account for the extension recently introduced in some client SDKs to notify the client of the Server's detection of wrong affinity.
Clarified the SSL Certificate.pdf document with respect to keytool limitations and acquisition of the certificate chain.
Fixed a bug in the included welcome page which caused malfunctioning in case of network issues. However, the welcome page is for internal use only.
Fixed a serious bug in the recently introduced session recovery mechanism, which could have caused update event duplication upon a successful recovery on clients based on the Web and Node.js client SDKs (of versions suitable for session recovery support). The bug was triggered by previous subscription requests that were refused, because illegal or disallowed by the Metadata Adapter (such errors are notified to the client application through onSubscriptionError or onCommandSecondLevelSubscriptionError).
Fixed a compatibility issue which affected the validation of ONLINE licenses. With some custom configurations of the JVM security settings, a valid license could have been refused.
Fixed a bug on the handling of suspension of MPN devices returned by Apple’s feedback service. This prevented the removal of the devices.
Improved logging upon session recovery, by adding a missing log of the related bind_session request.
Slightly revised the log of online license checks.
Introduced two different editions: "COMMUNITY" for FREE license (replacing the old
"Moderato" edition) and "ENTERPRISE" for all other types of license (replacing the old
"Allegro/Presto/Vivace" editions).
For this purpose, revised the licensing configuration, with the introduction
of the new "lightstreamer_edition_conf.xml" configuration file, which replaces
the old "lightstreamer_version_conf.xml". In particular, the <license> section
has been heavily modified. See <edition> in the new "lightstreamer_edition_conf.xml"
configuration file for details; and the specific section of each
edition depending on your choice:
- <community_edition_details>
- <enterprise_edition_details>
Also a new mandatory <edition_conf> configuration element in the main
configuration file "lightstreamer_conf.xml" has been introduced, replacing the old
<version_conf>. See the inline comments in the factory configuration
file for details.
COMPATIBILITY NOTE: In existing installations, the new <edition_conf>
element and "lightstreamer_edition_conf.xml" file must be added (and the old
<version_conf> element must be removed).
If previously using the "Moderato" package, configure the "COMMUNITY" edition;
otherwise, configure the "ENTERPRISE" edition. In the latter case:
The currently used "lightstreamer_version_conf.xml" file should be abandoned, and any changes to the <proxy> block and the <audit_log_path>, <automatic_update_check>, and <automatic_audit_upload> elements should be ported to the new "lightstreamer_edition_conf.xml" configuration file.
For DEMO licenses, introduced the possibility to only activate the
optional features you want to use, instead of choosing only among the three old available
editions. See the <optional_features> section in the "lightstreamer_edition_conf.xml"
configuration file.
For online-validated licenses (previously the LICENSE_SERVER type), the optional features
are now provided by your license, instead of choosing among the three old available
editions. Yet, it is still possible to furtherly restrict the optional features
you want to use through the <optional_features> section.
Also for file-based licenses (previously the LICENSE_FILE type) it is now possible
to furtherly restrict the optional features you want to use through the
<optional_features> section.
The COMMUNITY edition allows to choose one of the available Client SDKs to use with the Lightstreamer Server; instead, the old "Moderato" edition forced Web, Node.js, and Flash client SDKs. COMPATIBILITY NOTE: If upgrading from "Moderato" to "COMMUNITY" edition, whereas Web, Node.js, and Flash client SDKs were all enabled at the same time, now only one of them can be enabled at the same time.
Revised the licensing configuration, with the introduction
of the new "lightstreamer_edition_conf.xml" configuration file, which replaces
the old "lightstreamer_version_conf.xml".
Also a new mandatory <edition_conf> configuration element in the main
configuration file "lightstreamer_conf.xml" has been introduced, replacing the old
<version_conf>. See the inline comments in the factory configuration
file for details.
COMPATIBILITY NOTE: In existing installations, the new <edition_conf>
element and "lightstreamer_edition_conf.xml" file must be added (and the old
<version_conf> element must be removed).
The currently used "lightstreamer_version_conf.xml" file should be abandoned
Introduced the possibility to deactivate some features you don't want to use, instead of sticking to the features provided by the license. See the <optional_features> section in the "lightstreamer_edition_conf.xml" configuration file.
Introduced the possibility to customize the path of the generated audit logs through the <audit_logs> block in the "lightstreamer_edition_conf.xml" configuration file. However, with this edition, the generation of audit logs has been discontinued and is no longer available.
Wholly revised the support for Mobile Push Notifications
offered through the internal MPN Module.
The support is now available through the recently introduced TLCP client protocol.
This makes it part of the SDK for Generic Clients and enables support on more client SDKs.
See the MPN chapter on the General Concepts document for all the details.
But in particular, the revision brings the following consequences:
However, the MPN Module is not available with this edition.
Discontinued the support for Mobile Push Notifications for clients based on the previous version of the MPN Module. This affects the old non-Unified-API versions of the Android, iOS, and macosOS Client SDKs. The Server will remain formally compatible with these clients, but any request for Mobile Push Notification services will be actively refused. COMPATIBILITY NOTE: Existing clients leveraging the Mobile Push Notifications support should be upgraded by porting them to the corresponding Unified-API versions of the old SDKs, which have now been extended with Mobile Push Notification support based on the new MPN Module. However, the MPN Module is not available with this edition.
Introduced the support for the recovery of a session upon an interruption of a streaming or long polling connection. If the interruption is due to network issues, a client can request a rebind starting from the last event it received. See the new <session_recovery_millis>, <max_recovery_length>, and <max_recovery_poll_length> configuration elements for details.
Modified the default for the <server_pool_max_size> to become 1000. This should reduce the delays caused by slow adapters on those installations in which the settings for the SERVER thread pool and its optional subpools are not leveraged. COMPATIBILITY NOTE: For installations leaning on the default pool size, in case of slow adapters, the memory footprint could increase by about 1GB. If an installation cannot afford this memory increase, <server_pool_max_size> should be manually redefined. The previous default was the maximum between 10 and the number of cores. Only if <server_pool_max_size> is missing and left at its default, the default of <server_pool_max_free> also changes and becomes 10.
Added a check on client's activity and heartbeats as a way to detect streaming connections kept open by some intermediate node while the client is stuck or already detached. The check has to be requested by the clients.
Introduced an experimental support for external
implementations of the PKCS#11 standard to be used as keystores. Contact
Lightstreamer Support for details.
Introduced the explicit support of keystores of type PKCS12, which, however,
may not be available with old JDKs. The extension involves the
<keystore> and <truststore> blocks under <https_server>
and the <keystore> block under <rmi_connector>. Updated the
included SSL Certificates.pdf document accordingly.
Enforced the syntax checks on the mandatory subelements of the abovementioned
blocks. COMPATIBILITY NOTE: Only in case of
illegal missing subelements, an existing configuration that used to be
tolerated (by assuming an empty block) may now be refused on startup.
Limited the responses of the form "License not valid for this Client version",
which were issued also in cases in which the client version was not correctly
specified in the request (which, actually, could also be due to request
corruption). These cases are now treated as normal syntax errors (which are
notified in different ways depending on the client type).
Relieved the above license notifications for all clients based on the
Web and Node.js client SDKs,
also for old versions. Instead of issuing an alert (Web) or a console log
(Node.js), a suitable error code is now reported; where not available,
the issue is notified as a syntax error.
Updated the included versions of some third-party libraries; also added a few more libraries and removed some. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred. In particular:
Added a heuristic detection of client requests that may be targeted to a different Server instance of a cluster and routed to the wrong instance. The information is made available in the log and to the most recent clients.
Introduced a preliminary test of the reachability of the RMI Connector for the JMX interface.
In fact, without the test, the Server could start by leaving the RMI Connector not
reachable even by the "stop" script when lanched from the same environment as the Server.
COMPATIBILITY NOTE: if the RMI Connector were not reachable
from the Server environment with the configured hostname, an existing working installation
will now fail to start. To disable the test, see the new <test_ports> configuration
flag under <rmi_connector>.
Added a configurable timeout to cope with cases in which the establishment or the test
of the RMI Connector could block and delay the Server startup. See the new
<test_timeout_millis> configuration flag under <rmi_connector>.
Improved the log of setup and connection to the RMI Connector.
Modified the handling of the HTTP headers configured through the
<response_http_headers> block. If the same header is reported multiple
times, multiple header lines will be now produced, instead of a single line
with comma-separated values.
This fixes the handling of multiple occurrences of the Set-Cookie header,
for which multiple occurrences are indeed legal, but a comma-separated
format, overriding the general HTTP rule, is not.
COMPATIBILITY NOTE: For any other HTTP header
currently configured, no change is expected in the behavior of the user-agents,
as the multiple-lines and the comma-separated forms are supposed to be
equivalent. At the most, for some other non-standard HTTP header, we can
expect an improvement.
Improved the robustness of the Internal Web Server and the Monitoring Dashboard.
Fixed missing escaping in the Internal Web Server, which might have caused some
requests on directories with unusual names to fail.
Fixed a bug affecting update dispatching, which could have been triggered by the combination of a very fast unsubscription-resubscription sequence and significant delays in internal update processing, possibly due to high load. The bug could have caused one or more updates for the previous subscription to be used in place of an equal number of updates for the new subscription.
Fixed a bug in the handling of session termination which, in case of a
concurrent unsubscription, could have caused the corresponding notifyTablesClose
invocation to be missed. As said, this could only occur upon session close,
hence just before the final notifySessionClose notification.
Fixed other harmless bugs in the handling of session termination which,
in rare cases, could have caused an exception to be logged.
Fixed a bug which caused the Server response to be empty upon requests made with the recently introduced TLCP protocol and containing syntax errors. The response should have reported error code 65, 67, or 68. This could only affect clients based on the SDK for Generic Clients.
Fixed the handling of empty requests, which caused an exception to be thrown.
Ensured compatibility with Javascript strict mode for clients based on the Node.js Client SDK.
Fixed a bug triggered by reuse, by the Data Adapter, of an update event of HashMap type in multiple update/smartUpdate calls for different items, when the modes of the two items were different. In this case, some field values could have been treated as null and a WARN message could have been issued.
Fixed a bug that, in rare and isolated cases, could have caused the average wait on a thread pool queue to be computed as a negative number. This affected the JMX Extension SDK (including the JMX Tree) and the internal MONITOR Data Adapter and log.
Ensured runtime compatibility with Java 9; this also required a change in the launch script, to use Java 9's JDK_JAVA_OPTIONS environment variable. COMPATIBILITY NOTE: If an existing installation uses a custom launch script, it can be left unmodified; however, in order to take advantage of the improvement, the change should be ported.
Fixed the documentation comment of the <server_tokens> configuration element, as the Server identifies itself as "Lightstreamer Server" instead of "Lightstreamer" since version 6.0.
Improved the communication with the embedded version of the Proxy Adapters. This will impact on the count of "active threads" involved in the invocations of notifyUser and notifyUserMessage, which should become much smaller. Nevertheless, the related "queued tasks" and "pool queue wait" statistics should remain similar, to still take into account the wait for the answers from the Remote Adapter. As a consequence, the behavior of the various "max_queue" configuration flags should also remain similar.
Added preliminary checks on the completeness of the configured keystores. If a keystore doesn't define a private key, the startup will fail. COMPATIBILITY NOTE: Existing installations are not expected to configure an empty keystore, since, in this case, the port wouldn't accept any connection; however, the Server would start and other ports would still work. Now, to achieve the same, that port should be removed from the configuration.
Moved to case-sensitive checks for the recognition of the values set for the "classloader" parameters in adapters.xml. COMPATIBILITY NOTE: Only existing configuration using non-lowercase values would be refused, but this case is not expected, as never explicitly allowed.
Introduced the <handshake_timeout_millis> configuration element to replace <read_timeout_millis> when TLS/SSL handshakes are involved. This also modifies the applied timeout, which is now 4000 ms, unless reconfigured. COMPATIBILITY NOTE: If an existing installation needs to keep the TLS/SSL handshake timeout unchanged, a new <handshake_timeout_millis> element with the same value specified for <read_timeout_millis> has to be added. Clarified when the various I/O timeout checks can be suppressed.
Modified the HTTP 404 response issued to WebSocket opening requests that specify a wrong URI. The page configured through <error_page> is now returned as the body.
Revised and improved the Monitoring Dashboard.
Added the new tab "License" summarizing the details of your edition and the specific
license features active in the server running.
Optimized the subscriptions handling for "Logs" tab in case of get/lost focus events.
Extended the internal MONITOR Data Adapter with new items, "monitor_details" and "monitor_client_libs", which provide details of your edition and the specific license features active in the server running. Look for the new items in the General Concepts document for details.
Brought various efficiency improvements, to increase the scalability with respect,
in particular, to the overall frequency of client control requests.
The scenario of massive client disconnections has also been addressed.
Reduced the allocation of short-lived memory for various tasks, which should
save some Garbage Collection work.
Improved the checks associated to the <unexpected_wait_threshold_millis> setting, to embrace all invocations to the adapters.
Revised the handling and improved logging of http parsing issues.
Improved the log of connection issues by adding socket information where missing.
Changed the suggested setting for the <write_timeout_millis> configuration element to enable the check, though with a long timeout, to cope with half-open connections.
Moved to case-sensitive checks for the recognition of the values set for the "classloader" parameters in adapters.xml. COMPATIBILITY NOTE: Only existing configuration using non-lowercase values would be refused, but this case is not expected, as never explicitly allowed.
Extended the <disable_session_mbeans> configuration element; with the new "sampled_statistics_only" setting, these MBeans will still be available from the SDK for JMX Extensions, but the properties based on periodic sampling (which can cause scalability issues in some scenarios) will not be computed.
Introduced a size limit on the internal buffers that can be kept allocated for reuse.
Only in particular cases, the overall allocation of these buffers could have grown
too much and caused memory shortage.
Introduced the <max_common_pump_buffer_allocation> and
<max_common_nio_buffer_allocation> configuration elements to manage the limit.
Addressed a compatibility issue with Safari which, when leveraging the newly introduced session recovery feature, could have caused unexpected exceptions in pages based on the Web Client SDK.
Revised the internal approximation in item frequency management. This avoids that, with very high requested frequencies, the "real" frequency may be higher.
Increased the length of the generated session IDs by a few bytes.
Improved the log of WebSocket requests, by adding the involved session id when it is
omitted from the request.
Introduced the "upd" sublogger to the LightstreamerLogger.subscriptions logger,
to distinguish the part of log related with the events coming from the Data Adapter.
By setting it to ERROR, the warnings issued upon updates for items currently not
subscribed to can be suppressed.
Slightly revised the log on startup.
Improved the "stop" script to act faster.
Aligned the included SSL Certificates.pdf document to recent standards. In particular, suggested the inclusion of the "subject alternative name" field in the certificate, which may be required by some user agents.
Revised the Clustering.pdf document and aligned it to the current state of the client SDKs with regard to cookie handling requirements. Also reformulated the HTTPS section to consider acquisition of multi-domain certificates as the normal practice.
Revised naming convention and format of Audit logs. See files header in the "audit" folder for details.
Slightly revised the preinstalled welcome page. Added a new section with "Edition" details.
Introduced the support for a new client protocol, named TLCP, with various improvements, that can be leveraged by client SDKs and by custom clients. See the SDK for Generic Clients for details.
Fixed a bug related with the content-length configuration. When a value higher than 2^31
was configured for <content_length> or specified on the client side, it would be
read wrongly and an internally determined lower bound of 10000 would be used instead.
The same bug affected the <max_streaming_millis> setting; in that case,
high values were interpreted as not limiting at all.
Fixed the documentation for the "name" attribute of the <http_server>
and <https_server> blocks, where the allowed
character range was missing. The use of non ASCII or ASCII control characters could,
in particular cases, have caused errors in the communication with the clients.
Added a check on the configured names which now refuses disallowed characters.
COMPATIBILITY NOTE: If disallowed characters have
been used, the configuration may have to be modified.
Fixed the documentation and the management of the
<control_link_address> and <control_link_machine_name> configuration
elements, where the use of non standard characters could, in particular cases,
have caused errors in the communication with the clients.
Unicode names are currently supported by the Web, Node.js, Java, and Android
(Unified API) Client SDKs and by the Generic Client SDK. More will come.
Introduced a limited support for JVM property expansion in the interpretation of the adapters.xml files. It has to be enabled through a new configuration flag, <enable_expansion_for_adapters_config> in the main configuration file. The new factory configuration enables the feature. COMPATIBILITY NOTE: In existing installations the interpretation will not change, as the feature is disabled by default.
Improved the factory settings of the log configuration file, with regard to the display of the logger name by the preconfigured "LSDailyRolling" appender. The new "%-19.19c{19}" setting is recommended, because it causes Logback to shorten the "LightstreamerLogger" part of the names to "L", allowing for a reduced field, while preserving the other parts of the names. The previous setting was "%-33.33c"
Added the "private" property to the <client_identification> configuration element, to prevent sending the determined client address to the client, which is done by some of the Unified Client SDKs.
Clarified the description of the <cross_domain_policy> configuration block,
for what concerns the origin checks on WebSockets.
Clarified the description of the <max_buffer_size> configuration element,
to cite the case of the snapshot for DISTINCT items.
Revised the error messages sent to the client. Improved the messages upon request syntax errors, for the benefit of tests with the Generic Client SDK. Used less specific messages on subscription errors, to avoid specifying item names.
Slightly modified the behavior upon unexpected request URLs. The configured error page
will no longer be sent upon URLs related to features that are currently not supported
or not enabled, but a HTTP 400 error will be issued instead.
Modified the behavior upon syntactically wrong requests. A HTTP 400 error instead
of a HTTP 500 error will now be issued.
Revised the low-level WebSocket close code used, so as to report a non-successful
close only when really needed.
Added a suggested configuration setting in the <response_http_headers> block, which may help to enable streaming support when proxies of several types are involved.
Revised internal optimizations on field value processing to focus on the most recent client SDK libraries.
Improved logging by LightstreamerLogger.requests.messages by adding message
forwarding details at DEBUG level.
Improved logging by LightstreamerLogger.subscriptions at DEBUG level, by handling
the case of byte array values.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license file, an upgrade of the license file is needed.
MPN Module: fixed handling of cases where a device tries to subscribe
multiple times in a short period of time, possibly causing device duplication.
Note: duplication is still possible if multiple subscriptions are sent on different
client sessions connected to different Server instances at the same time. In this
scenario the MPN Module tries to detect the spurious devices and deletes them
automatically.
MPN Module: fixed handling of "InvalidPackageName" error code from the GCM (now Firebase Cloud Messaging) service. The device is now suspended, similarly to a "NotRegistered" error code.
Updated the included versions of some third-party libraries used by the MPN Module. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred.
Aligned the install scripts to current naming of macOS system.
Fixed a bug in Mobile Push Notification module that resulted in payloads for APNs being rejected if longer than 256 bytes. Now payloads up to 2048 bytes are accepted, as expected.
Fixed a bug introduced in version 6.0, which could have caused incorrect, hence refused, responses to session requests by very old versions of Web Client SDK Library. However, the malfunctioning was only associated with the use of uncommon transports, usually needed only as fallbacks for old browsers.
Fixed a bug introduced with version 6.0, which caused the "pool queue wait" statistics to be always reported as 0. This affected managers based on JMX Extension SDK (including the JMX Tree) and the Special MONITOR Data Adapter; the latter, in turn, affected the Monitoring log.
Fixed a bug in the implementation of the JMX Extension SDK, which caused the values for the AvgQueueWaitMillis and CurrQueueWaitMillis properties in the ThreadPool MBean to be switched.
Updated the included versions of some third-party libraries. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred. Updated the included version of the slf4j library from 1.7.8 to 1.7.21. This library can be accessed by custom code from Adapters configured for the "log-enabled" ClassLoader. COMPATIBILITY NOTE: no compatibility issues are expected, but see the slf4j changelog for any details. Updated the included version of the logback library from 1.1.2 to 1.1.7. This library governs the interpretation of the logging configuration file. COMPATIBILITY NOTE: this library has added some consistency checks and may behave differently with existing log configuration files that are not fully compliant. See the logback changelog for any details.
Performed several improvements to the preinstalled welcome page.
Fixed a bug in the management of clearSnapshot for items subscribed to in DISTINCT mode. The bug affected the first update after clearSnapshot and could cause some fields to be dispatched with wrong values. Specifically, let [B2,B1,CS,A1] be a sequence of events sent to a client (where CS is the ClearSnapshot): any field in A1 that was identical in B2 but different in B1 would have been reported with the value it had in B1, hence wrongly.
Fixed a syntax error in the installation script for Linux, that was introduced in version 6.0.1 build 1778.
Fixed a bug introduced in version 4.0 and regarding encoding of custom error messages when sending them to clients based on Web and Node.js (Unified API) Client SDKs; such messages can be supplied through the exceptions thrown by notifyUser and notifyNewSession. The bug only affected messages which included double quotes and would cause the onServerError callback not to be invoked at all on the client JavaScript code.
Fixed an inefficiency in the processing of COMMAND mode snapshot introduced in version
6.0 build 1737. The issue was noticeable only with snapshots of many thousands of keys.
Removed the same kind of inefficiency also with regard to real-time updates.
Improved the handling of cross-origin requests (used by the Web (Unified API) Client SDK), by returning the appropriate headers also upon most error responses.
Revised the parsing of the various configuration files (including adapters.xml) to improve diagnostics. Some space characters are now ignored. COMPATIBILITY NOTE: No change is to be expected in the interpretation of correct configuration files.
Slightly revised the page supplied by the internal Web Server upon a 404 error, to also have IE and Edge display it rather than a custom page.
Enforced upload of audit logs by default when LICENSE_SERVER is configured in lightstreamer_version_conf.xml. COMPATIBILITY NOTE: If the upload is undesirable or problematic for any reason, it can be suppressed with the subsequent <automatic_audit_upload> element.
Extended the factory settings for the <remove_cipher_suites> elements, to comply with the current common recommendations.
Clarified in the configuration file that the names chosen for the <http_server> and <https_server> blocks are available to the clients.
Realigned the launch script to suggest the use of java 8.
Put a reminder about JMX RMI connector credential setting in PRODUCTION_SECURITY_NOTES.TXT.
Updated the Client Library included in the Monitoring Dashboard to SDK for Web Clients (Unified API) Version 7.0.2. COMPATIBILITY NOTE: If LICENSE_FILE is configured in lightstreamer_version_conf.xml and the supplied license file doesn't support Web SDK Version 7.0.2, still no upgrade is needed in order to use the Monitoring Dashboard.
Changed the default for the <handshake_pool_size> setting, from 1 to half the number of available cores, to better cope with intense client reconnection activity.
Updated the "file tag" of the launch scripts. The update was due, but forgotten, in the previous release, to reflect the applied changes.
Put a reminder of the <server_tokens> setting in PRODUCTION_SECURITY_NOTES.TXT.
Fixed a bug triggered by thread pool settings of a 0 "max_size" (which means unlimited in this case) and a 0 "max_free", for pools which support these settings. The bug would cause a progressive and unlimited growth of the pool.
Fixed a bug introduced with version 6.0, which caused the count of the total number of internal selectors to be always reported as 0. This affected managers based on JMX Extension SDK (including the JMX Tree) and the Special MONITOR Data Adapter; the latter, in turn, affected the Monitoring log and the Monitoring Dashboard.
Fixed a bug which, in case of a massive disconnection of clients, could have caused some harmless error conditions on single connections to be reported and handled as serious errors affecting the whole NIO selector.
Extended the check of the <read_timeout_millis> setting in the case of
TLS/SSL handshake operations. Now this delay limit is applied not only to read,
as well as write, operations related to the handshake, but also to any queueing of
elaboration tasks on the "TLS-SSL AUTHENTICATION" or "TLS-SSL HANDSHAKE" thread pool.
Clarified in the log when a connection is closed due to the
<read_timeout_millis> setting.
Updated the included versions of some third-party libraries. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred.
Extended the launch scripts to allow for the customization of the path of the main configuration file through an environment variable; before, a custom modification of the script was the only way to achieve that. COMPATIBILITY NOTE: The script now checks a variable named LS_CONFIG; in case the same name were currently used for a custom variable in the launching environment, this would rise a conflict.
Extended the launch script for unix/linux to clarify how to handle the case in which the file descriptor limit has to be manually supplied.
Extended the installation script for Redhat, so that the installed System V init script now supports the "status" option to determine the current status of Lightstreamer server. This enables the "status" command for the "service" utility.
Revised the internal handling of field values to improve the most common usage scenarios. This also extends the cases of early conversions of field values, hence extending the scope of the <force_early_conversions> configuration element.
Applied some performance improvements to cope with a huge number of concurrent requests for new sessions.
Reorganized the initial configuration phase; some log messages related to adapters and jmx initialization may have changed.
Slightly refactored the launch scripts, to simplify custom changes.
Applied some improvements to the Monitoring Dashboard layout. Changed the layout of the "JVM Memory Heap" chart.
Added some clarifications to the General Concepts document.
Added an early check of the correctness of any trigger expressions configured, whose failure will prevent startup; before, all related notification deliveries would just fail.
Clarified in the Clustering document how to handle the case
in which a Load Balancer discontinues the stickiness during a session and
improved the internal handling of this case.
Also clarified how a rebalancing can be enforced. Introduced, to this purpose,
the <max_session_duration_minutes> configuration flag, to set a maximum
duration for client sessions, after which a client has the opportunity
to recover with a new session, and the Balancer has the opportunity to migrate
the client to a different Server instance.
Fixed a wrong startup check which caused the startup to fail upon a missing <reaction_on_database_failure< flag also when the MPN Module was not enabled.
Fixed a bug in the computation of statistics on the MPN Module activity, used by the PushNotificationsMBean and the internal MONITOR Data Adapter and log. The values that represent averages over an interval were reported delayed, among the data for the subsequent interval.
Revised and improved the Monitoring Dashboard.
Fixed a bug which caused wrong decimal parts to be displayed for the "total bytes"
fields when more than 1GB was reported.
Fixed a bug which caused a wrong value to be displayed in the "total heap" donut
when more than 1GB was reported.
Fixed the general behavior related to the case in which the Server was not reachable.
In particular, when reconnecting after a temporary disconnection, the charts are
now cleared to avoid confusion.
Improved the usability in several other small aspects.
Improved the functionality of the preinstalled welcome page in several small aspects and fixed some browser compatibility issues. This also removes some possible harmless warning messages from the Server console.
Fixed a bug introduced in build 1737 which caused loss of compatibility with very old Metadata Adapter binaries (as IllegalArgumentException was thrown upon the invocation of methods with an old signature).
Fixed the determination of the SDK versions used by the clients, which was ignoring the subminor version number. This also affects the values reported by the JMX interface.
Extended the install script for MACOSX (now macOS) with suitable variables to customize the IDs if a new user and/or group has to be created.
Added a default configuration for loggers used by the included third-party "Apache Velocity" library.
Added identification tags at the beginning of various configuration files and launch scripts. By keeping them, future upgrades of these files may be automated.
Removed the main README file, but kept directives on how to upgrade in the new HOW_TO_UPGRADE.TXT file.
Introduced a Push Notification Service (or MPN Module),
which can be leveraged by the clients to have notifications sent to their
devices, through an available third-party Push Notification Service, upon
updates for subscribed items. Currently, only sending notifications
through Apple's APNS and Google's GCM is supported
and requesting subscriptions for such notifications is only supported by the
iOS / OS X (now macOS) and the Android Client SDKs, respectively. See the new chapter 5
in the General Concepts document for an introduction to the feature.
Introduced several new thread pools for the MPN Module operations.
The module also leans on an external database, which, in case of a cluster
of Server instances, can be shared among all instances.
See the new optional <mpn> configuration block for configuration details.
The new optional <max_mpn_devices> element is also available, to set
activity limits for protection.
Introduced a suitable logger, "LightstreamerLogger.mpn", with several
subloggers, for the MPN Module log (see the factory logging configuration
file for details).
When enabled, the MPN Module will also produce its own Audit Logs.
Note that the feature may not be available, depending
on the license terms. It is always available in the LICENSE_SERVER and DEMO
cases, in the latter case with a limit of 20 devices served.
However, the MPN Module is not available with
this edition.
New libraries have also been added under the "lib"
directory for this extension.
COMPATIBILITY NOTE: If using a custom launch script,
ensure that the new libraries are referred.
Conflicts between the new
libraries and existing Adapter code are no longer possible, because of the
newly introduced ClassLoader separation.
Extended the provided MONITOR Data Adapter with statistics related
with the newly introduced MPN Module. See the last paragraph of the General
Concepts document and Look for the PUSH_NOTIFICATIONS.* fields for details.
Extended the Internal Monitor log to include some of the new MPN Module
statistics, but only when the module is enabled.
The extension is also leveraged by the new Monitoring Dashboard.
However, with the included license, all the new
statistics will always hold a 0 value.
However, the MPN Module is not available with this
edition, hence all the new statistics will always hold a 0 value.
Introduced the Monitoring Dashboard, which extends and replaces the Monitor Console. The new page has multiple tabs, which show the information available in the previous Monitor Console with significant visual improvements; moreover, the last tab shows the newly introduced JMX Tree, which exposes the JMX interface in web form. COMPATIBILITY NOTE: *** IMPORTANT *** The security level previously adopted for the access to the Monitor Console may no longer be adequate for the full Monitoring Dashboard, which enables data view and management, including the Server shutdown operation (note that the JMX Tree is enabled by factory settings). We recommend configuring the credentials and protecting them by making the Monitoring Dashboard only available on https server sockets, by leveraging the settings in the <dashboard> configuration block. See PRODUCTION_SECURITY_NOTES.TXT for a full check-list. The Monitoring Dashboard can be reached through a different URL path, whose default is /dashboard. The path can be changed through the <dashboard_url_path> element under the <dashboard> block. COMPATIBILITY NOTE: If keeping an existing installation where the Internal Web Server is leveraged, ensure that there are no conflicts with the new reserved path. The extension is associated to several changes with respect to the previous configuration rules:
New libraries have also been added under the "lib" directory for this extension.
COMPATIBILITY NOTE: If using a custom launch script,
ensure that the new libraries are referred.
Conflicts between the new
libraries and existing Adapter code are no longer possible, because of the
newly introduced ClassLoader separation.
Removed the proprietary Sun/Oracle HTML adaptor to the JMX interface; now, web access to the JMX interface can be performed through the new Monitoring Dashboard, with the included JMX Tree. As a consequence, web access to JMX can now be performed through the normal listening ports, with no need for a dedicated port. This also allows for access through https, which was not available with the old HTML adaptor. COMPATIBILITY NOTE: If there is a requirement to still rely on a dedicated port, perhaps with restricted firewall rules, for web access to JMX, then it is possible to setup a new server port through <http_server> or <https_server> and restrict the visibility of the JMX Tree to only this server port, through the settings in the <dashboard> block. COMPATIBILITY NOTE: Any credentials set to ensure restricted access to the HTML adaptor can be transferred to the Monitoring Dashboard, through the settings in the <dashboard> block. Note that the involved users will have access to the full Monitoring Dashboard features. Removed the <html_adaptor> configuration section from the <jmx> block. COMPATIBILITY NOTE: If keeping an existing configuration file, the <html_adaptor> block, if present, must be removed; otherwise the Server will refuse to start, in order to avoid confusion.
Introduced separate ClassLoaders for the loading of the external libraries used by the Server internally. This means that all these libraries are no longer visible from Adapter code and this should prevent the rise of any conflicts. COMPATIBILITY NOTE: No issues are expected, but see the SDK for Java In-Process Adapters changelog for the details. Should any problem arise, the previous behavior can also be restored, by changing the classpath setting in the Server launch script (see the inline comment for details). As a consequence, added separate libraries in the "lib" directory, containing the custom helper classes needed for the log configuration and the minimal server startup code. Also moved most external libraries in dedicated subdirectories. The above has also required a thorough modification of the launch scripts. COMPATIBILITY NOTE: It is not possible to reuse a current installation of the previous 5.1.2 version and just overwrite the libraries; a fresh installation is needed and the new launch script has to be used. Any custom launch script should be revised.
Extended the log configuration to handle some of the included third-party libraries (see the factory logging configuration file for details). COMPATIBILITY NOTE: Conflicts with any configuration for the same libraries in existing Adapter code are no longer possible, because of the newly introduced ClassLoader separation. COMPATIBILITY NOTE: If reusing an existing configuration, the new loggers should be added; otherwise, some undesired log may be received from the newly included libraries.
Introduced the management of the Proxy Protocol, which allows a local reverse proxy or load balancer to provide information on the remote endpoint in a direct way. See the new configuration elements in the <client_identification> blocks for details, also about how the existing elements interact with the new ones. A dedicated logger, LightstreamerLogger.connections.proxy, has also been added.
Introduced the <allow_protocol> and <remove_protocols>
configuration elements in the <https_server> to make it possible to restrict
the protocol versions to be used in the TLS/SSL interactions.
Introduced the same elements also in the <rmi_connector> block, to configure
the JMX communication channel.
Changed the factory and recommended settings for TLS/SSL sockets, to remove weak protocols, by leveraging the new <remove_protocols> configuration elements. This may cause some clients to no longer be able to connect; in this case, the added configuration can be modified. COMPATIBILITY NOTE: As the change only involves the factory configuration file, if an existing configuration is kept, it will not be affected by the restriction. However, we recommend manually applying the same restriction to these installations as well.
Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license file, an upgrade is needed.
Fixed a bug on the management of sendMessage requests for which a sequence is specified; the bug could have caused some messages to be wrongly considered as duplicated, hence discarded, due to a race condition.
Fixed a bug in the internal detection of connection close causes, which could give rise to cause code notifications of 43 (failure) upon some cases of normal close.
Fixed the "stop" scripts, to take the <hostname> specified for the JMX RMI connector or the "java.rmi.server.hostname" property into account, as the Server does.
Fixed a bug which caused the "stop" scripts to fail when the Server was still blocked in the startup phase, typically while waiting for the initialization of some Adapter.
Improved the launch scripts to enforce, by default, a maximum pause setting for the GC. This fixes cases in which the default settings could allow for pauses incompatible with the default timeouts used by the various Client SDKs in socket inactivity checks.
Fixed a memory leak triggered by exceptions thrown by the Metadata Adapter upon notifyNewTables, which also caused the subscription attempt to never be retried until reissued by the client application.
Fixed a bug in the initialization phase, which could have caused the generation of more threads and NIO selectors than configured. These spurious resources wouldn't have been used by the Server, so they would have been just redundant.
Fixed a missing case in which the error page (customizable through the <error_page> configuration element) should have been issued instead of a generic response.
Fixed the install script provided in bin\unix-like\install for the Redhat case,
which wouldn't have run correctly if the default installation user had been left.
Changed the install script for the openSUSE case, to also force run-at-startup,
as for all other scripts.
Fixed the install script for the MACOSX (now macOS) case, which would have generated a wrong
launch script; also revised the way it creates the dedicated user.
Improved the policy for the speculative sizing of the TCP buffers. Fixed cases in which
the resizing was inappropriate.
Improved the management of internal buffers; this should reduce the use of short-lived memory
for high numbers of sessions, particularly when <reuse_pump_buffers> is set to N.
Fixed missing cases of buffer optimization when <reuse_pump_buffers> is set to N;
this significantly improves the scalability in terms of concurrent TLS/SSL connections.
Improved parsing of HTTP requests for the internal Web Server, to limit the cases of unrecognized requests.
Extended the scope of the <server_tokens> configuration element to all aspects of the interaction with the clients. This fixes a few rare cases in which further identification information could be sent also when "MINIMAL" was specified.
Fixed a harmless bug which could have caused redundant logs of lost updates.
Improved the support for request pipelining upon responses in HTTP 1.1, to deal with the case of pipelined requests occurring during streaming or long polling responses.
Improved the management of items requested in COMMAND mode with unfiltered dispatching: unless <preserve_unfiltered_command_ordering> is Y, a round-robin policy is enforced among the keys on updates waiting to be sent. This should prove to be beneficial when no license-related frequency restrictions are in place.
Changed from N to Y the default of the <disable_session_mbeans> configuration flag, so that the related, potentially high, overhead will not affect JMX clients and the Server, unless explicitly requested. COMPATIBILITY NOTE: If keeping an existing configuration file with this element not defined and taking advantage of the JMX interface and the Session MBeans, <disable_session_mbeans> should be explicitly set to N.
Improved the check related with the <server_pool_max_queue> setting. Now, if optional pools are configured in adapters.xml to absorb specific subsets of tasks from the SERVER pool, their task queues are included in the count under check.
Changed the default configuration when installing the Server as a service on
Windows: NSSM is now configured not to relaunch the Server in case of failure.
If needed, you may configure the service to restart in case of failure by
changing the 'Recovery' property of the service.
COMPATIBILITY NOTE: Obviously, if the Server is currently installed as
a service, it can be updated without being affected by this change; the
change will take place only on the next installation.
Improved the support for the installation of the Server as a service under
Windows; now it is possible to configure the display name, the description
and the startup type. See "README.TXT" under "bin/windows" for details.
Improved the LS.bat script by returning, in turn, the exit code returned by
Lightstreamer server; the error code is useful if Lightstreamer Server
is installed as a service and NSSM is configured not to relaunch the Server,
to let Windows correctly manage the service restart.
Removed the log4j jar from the "shared" folder. It was there only for the benefit of the preinstalled demos. COMPATIBILITY NOTE: If there were custom Adapters relying on the predeployed log4j jar, they could be ported in the new structure only by copying the log4j jar too; preferably, the jar should be put in the Adapters own folders.
Updated the included versions of some third-party libraries.
COMPATIBILITY NOTE: As the new libraries have different
names, ensure that the previous version of the libraries is removed. Moreover,
if using a custom launch script, ensure that the new libraries are now referred.
Conflicts between the new libraries and existing Adapter code are no longer possible,
because of the newly introduced ClassLoader separation.
Improved the implementation of internal timers; this may reduce memory footprint when strong update merging/filtering is involved.
Modified the default setting of the <selector_max_load> configuration element for the Windows case; previously, it had a dedicated value of 1000 to overcome a known JDK 5 NIO bug; however, the currently supported JDK versions are unaffected. COMPATIBILITY NOTE: If leaning on the default setting, the change should just cause a visible reduction in thread usage. Note that very old versions of JDK 6 for Windows are affected by another NIO bug (2177606) and a higher load on the selectors might, in principle, trigger it.
Added the <snapshot_pool_size> configuration element; now there is full
control on the number of threads allocated for all the various internal pools.
Added the <selector_pool_size> configuration element, which allows some control
on the overall number of NIO selectors and related threads used by the Server.
Added the <timer_pool_size> configuration element, which allows for
parallelization of internal timer activity.
Extended the supplied "MONITOR" Data Adapter by adding a "TIME_MS" field,
carrying a UTC timestamp, in all monitor_log_* items.
Extended the supplied "MONITOR" Data Adapter with new statistics on the overall
number of item subscriptions performed by the Clients. Look for CLIENT.ITEM_SUBSCR
and CLIENT.MAX_ITEM_SUBSCR on the General Concepts document for details.
Extended the Internal Monitor log to include the actual number of item subscriptions.
The new statistics is also reported by the new Monitoring Dashboard.
Improved the handling of unexpected empty elements in the "adapters.xml" files.
Moved the activity log of the send_message requests to a suitable sublogger (namely LightstreamerLogger.requests.messages), which allows for easy removal of this log, if overwhelming.
Adjusted the Server's self-identification in answers to clients.
Revised the format of error pages.
Revised the names of some internal thread pools.
Improved logging of closed connection and sessions with details on the connection close cause.
Improved logging of new sessions with information on the type and version of the involved client library, when available.
Introduced the "accept_extra_headers" and "accept_credentials" properties to the <cross_domain_policy> configuration element: if specified they respectively allow the clients to send extra headers and credentials on CORS requests. See description in the configuration file for details.
Optimized memory usage related to item and field names.
Introduced support for the WebPositive web browser.
Clarified in the "SSL Certificates" document how to cope with incomplete certificate chains received.
Revised the Clustering.pdf document, to clarify the conditions for the support of
WebSockets by the Load Balancer.
Simplified the document by removing notes pertaining to the support of old browsers;
added references into the JavaScript SDK documentation for notes on special cases.
Revised and improved the "General Concepts" document, also with the addition of a thorough introductory section.
Added clarifications on when the <enabled> configuration element within <websocket> can be leveraged to cope with a Load Balancer not handling WebSockets correctly.
Wholly revised the preinstalled welcome page and the related demos. Now, the preinstalled resources are no longer meant as a deployment example that can be used as a starting point for creating your own POC. See the new "demos" site at demos.lightstreamer.com for all the available examples.
Modified the policy for the active session count to be reported in the generated audit logs: sessions will no longer be considered as long as they are in "prestarted" state (see CLIENTS.SESSIONS in paragraph 4.2.1 of the General Concepts document for details). This may give rise to lower averages in the audits, which may actually be seen as a relief of contractual terms. In fact, prestarted sessions may include sessions that have not been completely established because of communication issues, but (perhaps for the same cause) are being kept open for some time.
Improved the internal dispatching of NIO tasks; this may remove bottlenecks
in extreme cases.
Improved the internal mechanism of I/O buffer reusal;
this may remove bottlenecks in extreme cases.
Introduced the possibility of customizing the page to be returned upon a "404 Not Found" response, through the <notfound_page> configuration element in <web_server>. Note that the 404 response is not used normally, but only when the Internal Web Server is enabled.
Fixed a bug introduced with version 5.0, by which the <delta_delivery> configuration setting was ignored and delta delivery was always applied. Note that applying delta delivery is the normal case.
Introduced the <use_enriched_content_type> configuration
element; now it possible to choose between two options, text/plain and text/enriched,
the content-type to be specified in the response headers when handling requests issued
using the text output protocol.
By default, text/plain is still used, but the factory configuration supplied specifies
the text/enriched content-type. This has some consequences on the Generic Client SDK;
see the related changelog.
Fixed a bug on the internal statistics, which, under high load, might have caused spurious logs of the form "Current delay for tasks..." with very high delay.
Fixed a race condition that, in rare cases, could have caused a session not to be removed from the statistics when closed.
Fixed a bug that could have caused a startup error if the "max_free" setting of some thread pool had been configured as 0.
Improved the internal implementation of some thread pools.
Revised the internal timers to reduce thread contentions; this should reduce
potential bottlenecks under very high load.
Tested the compatibility with the new Java 8 release.
Changed the factory and recommended settings for TLS/SSL sockets, to remove weak cipher suites. This may cause some clients to no longer be able to connect; in this case, the <remove_cipher_suites> configuration elements should be modified. COMPATIBILITY NOTE: The change only involves the configuration file; if an existing configuration is kept, the Server upgrade will have no effect, although we recommend checking if the restriction can be manually applied to these installations as well.
Fixed the restart.sh launch script, which could have failed to stop the running Server for particular choices of the custom JVM arguments. Also clarified the script use case.
Improved the launch scripts and the installation scripts for the unix/linux environments
in order to support the use of unusual names for the installation directory, such as names
including spaces.
Revised the installation scripts for the unix/linux environments to better handle the case
in which the standard DESTDIR environment variable is not supplied (see the details in
bin/unix-like/install/README.TXT). COMPATIBILITY NOTE:
If using the supplied scripts in order to reinstall the Server, just make sure again that
the scripts are compliant with your environment.
Addressed a possible incompatibility issue on the installation script for MacOSX (now macOS).
Extended the "Clustering.pdf" document, to clarify the conditions for the availability of WebSocket connections when a Load Balancer is in place.
Fixed a bug affecting the configuration of the DEMO license. The <edition> element was ignored, so that the Server would always run in Vivace edition.
Fixed a bug on unfiltered subscriptions in COMMAND mode, whereby an ADD immediately following a DELETE on the same key could have been delayed until the next event on that key.
Fixed a bug which affected the log of "create_session" requests, by stripping the first and the last character; the bug was introduced in version 5.1.
Fixed a bug that could have caused data inconsistency or system vulnerability issues in particular client environments and under particular conditions.
Improved and optimized the allocation and parsing of client requests. Particularly improved the efficiency in the handling of SendMessage requests over WebSocket.
Extended the provided MONITOR Data Adapter with new statistics on the elaboration of Client
Messages, sent through the SendMessage requests. Look for MESSAGE.* on the General Concepts
document for details.
Extended the Internal Monitor log to include some of the aforementioned
message-related statistics.
Extended the Monitor Console to display some of the aforementioned
message-related statistics.
Introduced the automatic audit log upload service, to be leveraged based on the current license terms; for details, see also the newly added <automatic_audit_upload> configuration element in lightstreamer_version_conf.xml. To this purpose, the pubkey.cer file has been added to the "lib" directory.
Fixed a bug on the HTTP header parsing, that could have caused particular cases of headers lying on multiple lines to be parsed incorrectly.
Fixed a bug on the WebSocket handshake that could have caused the websocket establishment
to be delayed on some browsers.
Fixed a bug on WebSocket closure that might have caused a closure handshake to fail.
Fixed the notification of trial license expiration, corrupted in build 1513.1.11.
Fixed the reporting of syntax errors in the configuration file, which caused further errors.
Fixed the installation script for Redhat, which caused the Server to always run as root,
regardless of the user configured.
Fixed a typo in the console output of the launch script.
Improved the compatibility with the Android browser for Android version 4.x; this may also fix connection issues on some devices.
Deprecated the <base_url_path> configuration flag, which was only leveraged by the SDK for HTML Clients, but it is no longer leveraged by the new SDK for JavaScript Clients. COMPATIBILITY NOTE: If the existing configuration uses this flag, it can be left unchanged and the flag will be still obeyed. However, the support may be discontinued in future releases.
Finally removed the support for the old-style configuration of the listening ports, not based on the <http_server> and <https_server> blocks. Also removed the support for the obsolete configuration element <redundant_delivery>. COMPATIBILITY NOTE: Existing configurations still using the old elements have to be updated.
Made the <server_pool_max_free> configuration flag to be mandatory when <server_pool_max_size> is set to 0, since the previous default as also 0 was not suitable. COMPATIBILITY NOTE: Existing configurations leaning on the mentioned default have to be completed, otherwise the Server startup will fail.
Revised the format of the log messages. Revised the log messages upon syntax errors in client requests (only possible with clients based on the SDK for Generic Clients). Slightly revised the format of the lines produced by the Internal Monitor log, to improve readability.
Added in the Clustering.pdf document notes on how to enable cookie-based stickiness for non-browser clients.
Put minor changes to the sample StockListDemo Adapter.
Introduced support for requests through the WebSocket protocol; the supported versions of the
WebSocket specifications are 8 and 13.
Client libraries can now open a single WebSocket to send all requests and messages and to receive
all data pertaining to a session. At the moment, this feature has been exploited by the JavaScript
Client Library.
The support is enabled by default; see the new <websocket> element in the configuration
file.
A public specification of a network protocol based on WebSockets for custom clients is not
available yet.
Introduced support to cross-origin requests. See the new mandatory <cross_domain_policy> element in the server configuration file for further details. COMPATIBILITY NOTE: Current configuration files must be extended with the <cross_domain_policy> element; as long as an old HTML Client SDK is used, the element can be left empty. Note that the new JavaScript Client Library, on most browsers, uses cross-origin XHR or WebSocket requests to ask for streaming data; hence, the new <cross_domain_policy> element should be set properly and allow your site origin, in order to ensure that web pages supplied from your site can access the Server. COMPATIBILITY NOTE: The above also holds for the Internal Monitor Console, though the page origin, in that case, is the Server itself, so that a same-origin access is performed; though most browsers don't need that, the Server origin should be explicitly allowed in <cross_domain_policy> in order to ensure that the Monitor Console keeps working on all browsers; see the Client Guide in the JavaScript SDK for details. The factory setting of <cross_domain_policy> allows any kind of cross-origin access to the Server; note that this kind of access was not even possible with the previous HTML Client Library.
Disabled the forwarding of request cookies to some Metadata Adapter methods. As a consequence,
the new factory setting of <use_protected_js> is now N, which is recommended in order
to enable cross-origin access for some browsers which don't support cross-origin XHR
(see the Client Guide in the JavaScript SDK for details).
Introduced the <forward_cookies> configuration element (which defaults as N) to reenable
forwarding when needed.
COMPATIBILITY NOTE: Only if cookie information is used by
Metadata Adapter methods, <forward_cookies> should be set as Y. However, if cookie
information were used for authentication purpose (which is to be avoided, though),
<use_protected_js> should be left as Y and <cross_domain_policy> should be set
carefully.
Revised the licensing configuration, with the introduction of the new "lightstreamer_version_conf.xml" configuration file and the new mandatory <version_conf> configuration element in the main configuration file. See the inline comments in the factory configuration files for details. The <trial> and <production> blocks in the main configuration file have been dismissed. The <production> block in the main configuration file has been dismissed. COMPATIBILITY NOTE: In order to keep using an existing configuration file, it must be ported ; for the <production> block, refer to the "LICENSE_FILE" license type; for the <trial> block, refer to the "LICENSE_SERVER" license type and to the <http_proxy> block (note that the other parts of the <proxy> block are not available for trial license configuration). to the new conventions.
Introduced the "DEMO" license type, which is not based on a license key or trial account. See <type> in the new "lightstreamer_version_conf.xml" configuration file for details.
Introduced the generation of audit log files when trial accounts are in use.
Discontinued the generation of audit logs for any other non-production licenses.
Provided an automatic update check service. See <automatic_update_check>
in the new "lightstreamer_version_conf.xml" configuration file for details. Note that a proper
proxy configuration, through the <proxy> block, may be needed.
New libraries have been added to the "lib" directory for this extension.
COMPATIBILITY NOTE: If any existing Adapter were based
on a different version of one of the libraries in "lib", conflicts may arise.
Changed the names returned by the "MONITOR" Data Adapter for the "LICENSE_TYPE" field, according to the new licensing policy.
Discontinued the support for java 5 SDK and runtime environment. Java 6 or later is now required. COMPATIBILITY NOTE: installations of the Server still based on a java 5 JVM have to be upgraded. Existing Adapters compiled with a java 5 SDK don't need to be upgraded. Revised the suggested JVM configuration in the launch scripts.
Improved the launch scripts for Windows and major Linux and Unix-like Operating Systems,
supplied under the "bin" folder.
As a consequence, manually setting the LS_HOME variable is no longer requested.
Provided suitable scripts to install the Server for automatic execution in many Unix
and Linux environments, including MAC OS X (now macOS); see "install" under "bin/unix-like".
Updated the included version of the third-party slf4j and logback libraries. COMPATIBILITY NOTE: As the new libraries have different names, ensure that the previous version of the libraries is removed. Moreover, if using a custom launch script, ensure that the new libraries are now referred. COMPATIBILITY NOTE: Existing java Adapter binaries leaning on the included support for slf4j/logback should not be affected (but see the slf4j/logback release notes). COMPATIBILITY NOTE: In case further slf4j/logback libraries are needed by the adapters, ensure that their versions are consistent with the new libraries included.
Removed the third-party JUG libraries. Removed the "lib/native" directory and any reference to it in the launch script. COMPATIBILITY NOTE: Existing launch scripts will still work; any included reference to the "lib/native" directory will be useless. Added more third-party libraries to support the new update check service. COMPATIBILITY NOTE: Existing launch scripts should be extended to include the new libraries in the "lib" directory in the classpath. Simplified the factory launch script in order to do a bulk add of the third-party libraries to the classpath.
Revised the implementation of the scripts that stop a running Server. They are now based on the RMI connector to the JMX service. As a consequence, the requirement for the script to work is that the <rmi_connector> block is properly configured, no longer the <jmxmp_connector> block. If the JMXMP connector is not used directly, it can be disabled. COMPATIBILITY NOTE: If an existing configuration disables the RMI connector, it should enable it, possibly exposing the port to local connections only, in order to restore the "stop" script functionality.
Removed the third-party Oracle's jmxtools.jar and jmxremote_optional.jar libraries, previously redistributed. This drops the support for the HTML Adaptor and JMXMP Connector to the JMX service. The support can be restored by manually downloading and reinstalling the libraries. See README.TXT in the SDK for JMX Extensions for details. COMPATIBILITY NOTE: If just upgrading an existing deployment, the aforementioned libraries should be manually removed. On the other hand, if the current deployment leans on the HTML Adaptor or the JMXMP Connector, the needed libraries must be obtained from Oracle as shown. Removed the factory preconfiguration of the HTML Adaptor and JMXMP Connector.
Introduced a distinction between "prestarted" and started sessions; see CLIENTS.SESSIONS
in paragraph 4.2.1 of the General Concepts document for details. Prestarted sessions
are not included in the session count as far as Server activity metrics are concerned.
Starting a prestarted session may fail if it would cause any existing limit on the
number of sessions to be exceeded.
Introduced the optional <client_identification> configuration block, in order to help to better identify the remote address of the connected clients. The block is related to each single <http_server> or <https_server> block. See the configuration file for details.
Changed the factory setting of <max_delay_millis> from 200 to 30 ms (setting <max_delay_millis> may improve performances at the expense of a less smooth data delivery). The new, less restrictive, value is suitable for applications in which push data is used to map moving positions, provided that no edition-related frequency limits apply.
Improved the support for TLS/SSL renegotiation
requests by the clients.
Introduced dedicated thread pools to handle the load related with TLS/SSL handshakes;
see <handshake_pool_size> and <https_auth_pool_max_*>
in the configuration file.
Introduced configuration settings to suspend acceptance of new connection requests when the thread pools devoted to request handling are busy; see <*_pool_max_queue>.
Improved the implementation of the temporary refusal of new client connections that can be requested through JMX (see the Server MBean). In case of an HTTPS connection, the refusal now occurs before the initial handshake takes place.
Fixed a compatibility issue with Html Client Library version 5, which could have caused error messages related to session creation refusal to be ignored by the library.
Fixed a bug, introduced in build 1513, which prevented the clean closure of TLS/SSL connections. This shouldn't have had any impact on normal operation.
Fixed a bug which could have caused some connections in long polling to return unnecessarily early, with no data.
Fixed a bug which would have provoked an error in the internal Web Server when sending an empty file, if the compression_threshold had been set to 0.
Fixed a bug which could have caused the processing of "remote logs" sent by the HTML Client Library to fail for unusual user-agents.
Fixed a bug in the management of logback's own log, whereby the log related to
logback initialization issues were not dumped. Now, it is available on the error console;
the log is shown only in case of errors and in that case it is in verbose form.
Introduced a custom Logback StatusListener implementation
(OnConsoleErrorWarningStatusListener). Such StatusListener is now configured by default
and will show on the standard error any internal ERROR or WARN event from Logback
internal status.
Discontinued the support for the old syntax of the JMX configuration. COMPATIBILITY NOTE: if any of the <html_adaptor_port>, <html_adaptor_public>, <html_adaptor_user>, <rmi_connector_port>, <jmxmp_connector_port> is still used in the configuration file, it should be rewritten with the current syntax.
Reduced the response overhead on polling requests issued by the Javascript Client Library.
Extended the format of the audit logs with a random identifier of the Server run. COMPATIBILITY NOTE: existing and new audit log lines can coexist with no problems.
Ensured that, for each type of monitor statistics, the same value is collected by the various consumers for each time period; consumers include the monitor log, Monitor Console and any "MONITOR" Data Adapters.
Extended the logging of client activities, by adding information on the server socket (i.e. <http_server> or <https_server> block) related to the connection.
Revised various error log messages.
Moved some harmless "Sync error" log messages from INFO to DEBUG level.
Expanded and clarified info log messages about session closing.
Discontinued support for the LS_top_max_frequency and LS_slowing_factor request parameters. Such parameters had already been dismissed in the client protocol and all client libraries. COMPATIBILITY NOTE: only clients based on a very old version of the client protocol or a client library might make use of these features. For them, the settings will no longer have any effect.
Slightly changed the response content-types for requests by the HTML/JavaScript Client Library; this may give rise to compatibility issues only for Opera browsers earlier than version 10.
Improved the performances under heavy load and under spikes of external requests, by reducing internal thread contention.
Changed the Connection counts
returned by the internal MONITOR Data Adapter and the
related log, to include sockets currently involved in the initial TLS/SSL handshake.
Similarly, moved the log of accepted connections in https, to be issued immediately,
before the initial TLS/SSL handshake, rather than after.
Improved the parsing of incoming HTTP requests, to make syntax checks more strict.
Denied support for specifying a network interface for the JMX RMI connector when the <data_port> setting is omitted, as this configuration is in fact not working properly. COMPATIBILITY NOTE: we assume that no existing installation could be configured in this way, as it wouldn't have worked correctly; anyway, in such a case, only a warning message will be issued. Fixed a bug which, with the above configuration, would have caused a port conflict error message to be issued.
Introduced the stdout/stderr redirection when launching the Server as a service under Windows. The LS.out file in the predefined logs directory is now generated.
Revised the layout of the Internal Monitor Console and fixed a formatting issue.
Updated the Clustering.pdf document, according with the new features added in the JavaScript SDK.
Fixed the jars of the included StockList demo: LS_StockListDemo_DataAdapter.jar also included the classes already in LS_quote_feed_simulator.jar.
Revised the documentation, in regard to the names of the main concepts.
Fixed the handling of uncommon pathnames in the utility scripts for using the Server as a service under Windows.
Fixed the documentation of the <license_path> configuration element with the extensions introduced in build 1513.1.4
Enlarged the "SNAPSHOT" thread pool (devoted to dispatching of snapshot contents) so as to match the number of available processors, if greater than 10.
Fixed a bug, introduced in version 3.6, which affected subscriptions by the HTML Client Library to items in MERGE mode in case their snapshots was also requested; the update representing the snapshot could have been notified as not being a snapshot by the library.
Fixed a bug in the RelativeFileAppenders$RollingFileAppender implementation: the <FileNamePattern> specified in the <rollingPolicy> was interpreted relative to the launch directory instead of being interpreted relative to the log configuration file location, as it should have been. Now the paths specified in the <FileNamePattern> elements are correctly interpreted. On the other hand note that the <File> element was already correctly interpreted and thus its handling has not changed.
Introduced the support for dinamically reconfiguring the maximum frequency of currently subscribed items, that can be leveraged by client libraries.
Introduced the optional "randomize" attribute for both the <default_keepalive_millis> and <max_idle_millis> configuration elements, that can be used in particular scenarios; see the descriptions in the configuration file.
Fixed a bug in the handling of the <allowed_domain> setting, by which the check could have been avoided by purposedly altering the Html Client Library.
Clarified how resampling works for the LightstreamerMonitorText and LightstreamerMonitorTAB loggers configuration.
Adopted java 7 as the recommended SDK runtime environment and as the factory setting in the launch scripts.
Added the <max_streaming_millis> configuration flag; see the configuration file for details.
Fixed a bug, introduced in version 4.0, affecting polling sessions; under particular conditions of slowness, poll requests could have returned immediately even with no data available, thus causing an unneeded increase of the overall frequency of requests.
Fixed a bug affecting polling sessions; under particular conditions of fastness, poll requests could have returned with no data even if data were available, thus causing data delivery to be delayed.
Fixed the supplied scripts for running the Server as a Windows service, which, under some conditions, could have failed to correctly install the service.
Fixed an issue with potential conflicts regarding proxy settings when a trial license is used; if proxy settings are supplied in order to access the LS trial license validation server, they could also affect connections performed by the Adapters.
Fixed a bug introduced in version 4.0 which could have caused an html client to receive wrong data in case of issues with the use of XHR during a polling session. The error was serious, but the triggering environmental conditions were very rare.
Fixed a potential race condition which could have led to an internal thread deadlock. A high rate of socket disconnections (about 100 per second) was the only triggering scenario observed.
Changed, from 6666 to 6600, the factory setting for the port to be used for accessing the HTML-based JMX interface; in fact, access to port 6666 could be restricted by some browsers because of conflicts with known protocols.
Extended license configuration support by allowing to specify multiple <license_path> elements, so that, at any moment in the Server life, at least one should refer to a valid license. Slightly changed the log upon license refusal.
Fixed a bug that could have caused read failures on TLS/SSL connections upon long requests.
Fixed and changed the timestamp format on the audit logs. COMPATIBILITY NOTE: existing and new audit log lines can coexist with no problems.
Introduced the execute permission flags for launch scripts also in the zip version of the package.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Introduced the ServerSocketMBean, with one instance for each server socket configured through the <http_server> and <https_server> blocks. It reports server socket attributes and various activity statistics, similar to those reported by the ResourceMBean, restricted to the related server socket.
Added the CumulRealTimeEvents property to the SessionMBean, with usage similar to CumulLostEvents and CumulFilteredEvents.
Added operations getNewSessionCloseCauses and getCumulSessionCloseCauses
to the ResourceMBean, to report statistics on the reasons why the various
sessions are closed.
Likewise, added operations getNewConnecionCloseCauses and
getCumulConnecionCloseCauses to the ResourceMBean, to report statistics
on the reasons why the various connections are closed.
Revised the "MaxThreads" property of the ThreadPoolMBean, to report 0 when the pool is unlimited, rather than a large value. COMPATIBILITY NOTE: Custom managers evaluating the "MaxThreads" property should take this convention into account.
Improved the various counts of filtered events to include some corner cases.
Added properties "CumulAcceptPauseMillis" and "NewAcceptPauseMillis" in the Server MBean, to report pauses enforced in the accept loops, that can be related with some "max_queue" settings.
Added the "drainSessions" operation in the Server MBean, useful to force migration
of sessions to other instances in a cluster with a controlled rate.
Added a boolean argument to the "block" operation in the Server MBean
to support migration of sessions to other instances in a cluster.
COMPATIBILITY NOTE: Existing custom managers that
invoke the "block" operation should be updated to pass false or null.
Added property CurrentPrestartedAverageWaitMillis, to supplement CurrentPrestartedSessions, in the ResourceMBean.
Extended the EditionDetailsMBean to support the newly introduced .NET Standard SDK.
Added missing documentation notes in the provided inline "MBeanInfo" descriptions,
to align with the static docs.
Improved the "see" references in the "MBeanInfo" descriptions (but they still
lean on the javadoc-style naming convention adopted for the static docs).
Fixed the MaxVersionsAllowed property of the EditionDetailsMBean in case of DEMO license.
Added information about the new watchOS SDK to the EditionDetailsMBean.
Aligned the documentation to comply with current licensing policies.
Added a Data Adapter MBean for the new internal Data Adapter introduced for the MPN Module (when enabled). Note that, even though the Data Adapter is automatically added to all Adapter Sets, it is a single one and its MBean requires a special query for the access; see the Data Adapter MBean docs for details. On the other hand, it is not reported in any Adapter Set MBean.
Added the SampledStatisticsEnabled read-only property to the SessionMBeans, to reflect the new "sampled_statistics_only" Server configuration keyword available. If configured, some properties of the SessionMBeans can now issue null values (see the docs for details).
Extended the ThreadPoolMBeans to report statistics on CPU usage and blocked state for the threads. Since these statistics need enablement at JVM level, suitable enabling methods have also been added both in the ThreadPoolMBeans and, at global level, in the LoadMBean. See the docs for details.
Changed the names used in the PushNotificationsMBean to identify the MPN platforms, according to the changes in the SDK for In-Process Adapters. COMPATIBILITY NOTE: Custom managers invoking the getCurrentMPNDevice or getMPNDevicePlatformType operation should be aligned.
Added a new MBean EditionDetails to recap license characteristics.
The getLSEdition and getLSLicenseType methods in the ServerMBean will also reflect
the new concepts.
Added getEditionConfigFile and getEditionConfigAsProperties in the ServerMBean to
reflect the new configuration deployment, as lightstreamer_version_conf.xml has been
replaced by lightstreamer_edition_conf.xml. The previous getVersionConfigFile and
getVersionConfigAsProperties methods now refer to the new file, but have been
deprecated.
Fixed a bug which caused the extension on the Resource MBean introduced in build 1803
(that is, the handling of multiple subrequests) to become ineffective.
Clarified the documentation of the Resource MBean with respect to the abovementioned
extension.
Introduced the computation of the ThreadPool MBean's AvgExecTimeMillis property also for the TLS-SSL HANDSHAKE pool. Previously, the property was not computed (as for all cpu-bound pool) and its value was always null.
Modified the statistics on Control Requests (hence, on all Requests as well) in the Resource MBean, so that, when a single Request from the client comprises multiple subrequests, the count will report all subrequests rather that the aggregated one.
Revised the javadocs overview.
Revised javadoc formatting style.
Modified the Session MBean, by removing the recently added ClientBuild property and extending the ClientVersion property to report the full version signature. COMPATIBILITY NOTE: Custom managers relying on the ClientBuild attribute, or on ClientVersion to report only a version number, should be revised.
Extended the Session MBean with more information on the Client SDK type, if available (see getClientBuild).
Introduced the support for the new Push Notification Service. This includes the new PushNotifications MBean and extensions in the DataAdapter, AdapterSet, Server, and Load MBeans, to report the served devices and the new thread pools.
Introduced the ThreadPool MBeans, one for each of the thread pools used internally
by Lightstreamer Server. See the ThreadPoolMBean class documentation for details.
Extended the Load MBean to provide a list of the names of all active thread
pools (see getThreadPools). Note that the pool naming has changed in Server
version 6.0.
Introduced a fake MBean of type "Session" and no SessionId associated, which is added when the creation of the Session MBeans is disabled; it acts as a reminder that the feature can be enabled. COMPATIBILITY NOTE: Custom managers should recognize and ignore the new MBean; it does not expose the properties of a normal Session MBean. Added a "destroySession" operation in the Resource MBean; this overcomes the unavailability of this functionality when Session MBeans are disabled.
Introduced the "clearSnapshot" operations on the DataAdapter MBeans, for clearing the state of an item bypassing the Data Adapter (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the documentation for details and usage clarifications.
Extended the Resource MBean and the DataAdapter MBeans with new statistics on the overall number of item subscriptions performed by the clients (see get*ItemSubscriptions).
Extended the Session MBean with information on the Client SDK type, if available (see getClientType and getClientVersion).
Extended the life of the Session MBean until the termination of the
notifySessionClose invocation; hence, from within this callback, the Metadata
Adapter can access the MBean and get the final value of cumulative statistics.
Added, for completeness, the IsClosed property (which is true in that case).
Fixed the getSessionListForItem method in the DataAdapter MBeans to return an empty list instead of null upon items not subscribed to.
Clarified the docs about the inclusion of "prestarted" sessions.
Fixed wrong links in the docs.
Extended the Stream MBean and the Session MBean, with new properties carrying statistics on the elaboration of Client Messages, sent through the SendMessage requests. See the documentation for details.
Revised the reporting of bandwidth limits in the Session and Stream MBeans.
Fixed an inconsistency in the Session MBean; the AllocatedMaxBandwidthKbps
property getter now returns the server-side bandwidth limit for the Session,
according with the setter behavior; before, it used to return the limit currently
enforced on the session, which is now returned by the new read-only property
AllocatedBandwidthKbps. COMPATIBILITY NOTE: Custom
managers that use the AllocatedMaxBandwidthKbps getter may need to be changed.
Clarified when the special 0 value is possible in bandwidth limit values.
Introduced a 3-decimal approximation for the reported bandwidth limit values.
COMPATIBILITY NOTE: Custom managers that rely
on the reported bandwidth limits for internal computations may need to be
revised.
Changed the count of the overall number of connected sockets in the
Resource MBean to include sockets currently involved in the initial TLS/SSL
handshake.
Extended the Resource MBean by introducing the count of sockets currently
performing a TLS/SSL initial handshake and the count of failed handshakes.
Extended the Resource MBean with new properties to report the connections used for WebSocket interaction. The current and maximum number of such connections and the cumulative number of upgrades from HTTP/HTTPS are reported. See the documentation for details.
Extended the Load MBean to report the current queue on the newly introduced
thread pools; see "getQueueStageHandshake".
Removed from the Load MBean the previously deprecated "getQueueStageIOPush"
and "getQueueStageHTTPSAccept" methods.
COMPATIBILITY NOTE: Custom managers that still request these properties may
may need to be revised.
Revised the various session count statistics in the Resource MBean: prestarted sessions
are no longer included; see CLIENTS.SESSIONS in paragraph 4.2.1 of the General Concepts
document for details.
Extended the Resource MBean to provide the count of current prestarted sessions.
Extended the Session MBean to indicate when a session is in prestarted state.
Removed the deprecated getSubscribedItemList and getSubscribedItems methods from the Session MBean. COMPATIBILITY NOTE: Any custom managers still using those methods may have to be changed.
Added the getVersionConfigFile and getVersionConfigAsProperties methods in the Server MBean to make it available the contents of the newly introduced version configuration file.
Changed the names returned by getLSLicenseType in the Server MBean, according to the new licensing policy.
Fixed the comment on the "CumulControlRequest" property of the Session MBean on the html adaptor.
Refined the periodic statistics carried by the getAveragePoolQueueWait property of the Load MBean.
Fixed the included Version.txt file, which was not reporting the latest build number.
Regenerated the API documentation with the newest JDK default template.
Specified the version number in the javadocs.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Discontinued the support for old Remote Adapters targeted to Adapter Remoting Infrastructure version up to 1.4.x. The backward compatibility mode was triggered by setting the "init_remote" parameter to false. Now this setting will cause the Proxy Adapter startup to fail. COMPATIBILITY NOTE: Existing installations using very old Remote Adapter SDKs that require Adapter Remoting Infrastructure version 1.4.3 or earlier cannot be upgraded, until the Remote Adapter SDK is also upgraded to a more recent version.
Revised the support for custom configuration parameters defined in adapters.xml and forwarded to the Remote Adapter upon initialization. All parameter names without a ':' character are now reserved. To enforce this, the prefix specified in the "remote_params_prefix" parameter must also contain a ':' character, although the indication of an empty prefix is still supported. COMPATIBILITY NOTE: If custom parameters are used and they don't contain a ':', they should be renamed, and the specified "remote_params_prefix" should be changed accordingly. As a consequence, the Remote Adapter should also be modified. However, by specifying an empty prefix in "remote_params_prefix" the names can be kept, but name conflicts with new reserved parameters, with unpredictable consequences, will become possible.
Introduced the support for TLS encrypted connections from the Remote Adapters. This is enabled by the new "tls" parameter, available independently for each Remote Adapter in the corresponding <metadata_provider> or <data_provider> block in adapters.xml. Further parameters are available for the configuration of the certificate and the handshake preferences; see the sample adapters.xml files for details.
Introduced the support for authentication of the Remote Adapters based on user/password credentials. This is enabled by the new "auth" parameter, available independently for each Remote Adapter in the corresponding <metadata_provider> or <data_provider> block in adapters.xml. Further parameters are available for the configuration of the credentials; see the sample adapters.xml files for details.
Allowed the <install_dir> configuration element for all Proxy Adapters, to better support the new configuration options. Previously it was refused with an error when <classloader> was set to "log-enabled".
Revised the initialization phase, in which the connections from the Remote Adapters
are expected. Now multiple connections may be accepted and evaluated concurrently
on the same listening port, although only one per port will eventually be elected
and the others will be closed. If authentication is configured, a connection will be
elected only after successful authentication. However, after electing a connection,
the listening port will be closed, as before.
Modified the meaning of the "connection_recovery_timeout_millis" setting for Robust
Proxy Adapters accordingly.
Note that the log of the initialization phase may be quite different than before.
Enabled the support for multiple protocol versions, to allow for backward compatibility with the Remote Servers upon future extensions. To achieve this, a proper initialization parameter is sent to the remote counterpart. COMPATIBILITY NOTE: Existing Remote Servers based on previous remoting SDKs are still supported. They will just forward the additional "ARI.version" parameter to the Remote Adapter upon initialization, which is not supposed to hurt the Adapter (BTW, in the unlikely case that the same parameter were supplied to a Remote Adapter by the Remote Application, as possible with some SDKs, the supplied value would be preserved and no changes at all would occur).
Introduced the indication to the remote counterpart of the suggested time for keepalive messages (when needed), through a proper initialization parameter. Recent Remote Adapter SDKs can obey the suggestion instead of using a custom time. COMPATIBILITY NOTE: Existing Remote Servers based on previous remoting SDKs will (if received) forward the additional "keepalive_hint.millis" parameter to the Remote Adapter upon initialization, which is not supposed to hurt the Adapter (BTW, in the unlikely case that the same parameter were supplied to a Remote Adapter by the Remote Application, as possible with some SDKs, the supplied value would be preserved and no changes at all would occur). Added the "keepalive_hint_millis" parameter in both the <metadata_provider> and <data_provider> block in adapters.xml, to customize the suggested keepalive time instead of using a library-determined default.
Added the "notify_user_on_disconnection" parameter for the Robust Proxy Metadata Adapter and, when set, enforced the consistency with "notify_user_disconnection_code". Added, in particular, the possibility to have the Server instruct the client to retry when the Remote Metadata Adapter is disconnected.
Extended the client context provided to the remote counterpart upon the notifyNewSession invocations, by adding the CLIENT_TYPE and CLIENT_VERSION keys, with information on the client API in use.
Fixed the implementation of the activity (or keepalive) check, which could have been heavy in case of very frequent request or update rates. This only affected the cases in which the "keepalive_timeout_millis" setting was leveraged.
Improved logging of the connection phase, with information on the remote side,
which was missing.
Improved activity and error logging.
Changed the suggested settings for some of the dedicated thread pools
in the adapters.xml templates, and revised the count of queued tasks,
according to ARI specificities.
Fixed the documentation of <authentication_pool> and <messages_pool>
to account for changes introduced in ARI version 1.8.0.
Added a new configuration parameter, "keepalive_timeout_millis", for both Proxy Metadata and Data Adapters. The new configuration allows to set a timeout for received data and keepalives from the Remote Adapters to detect unresponsive connections (that will be handled differently by the "robust" and "non robust" versions. See the sample adapters.xml files for details.
Aligned the protocol documentation to comply with current licensing policies.
Modified the communication protocol for the Remote Metadata Adapters in the part related to the MPN Module, after its full revision. COMPATIBILITY NOTE: Only if the MPN Module is enabled, existing Remote Metadata Adapters based on the current SDKs have to be ported to the new versions of the SDKs. But note that the MPN Module is not available with this edition. COMPATIBILITY NOTE: Existing Remote Metadata Adapters will not be affected.
Changed the default of the <sequentialize_table_notifications> flag available in adapters.xml from Y to N, to better cope with cases in which many subscriptions are performed at once. COMPATIBILITY NOTE: If any existing Remote Metadata Adapter relies on the invocations of notifyNewTables and notifyTablesClose for the same session to never overlap, ensure that the flag is explicitly configured as Y for this Adapter.
Improved some error messages.
Changed the preconfigured settings for the dedicated thread pools in the adapters.xml templates, to leverage the new defaults for the SERVER pool.
Introduced a "first_connection_timeout_millis" configuration parameter for the Robust Proxy Data Adapter, similarly to what is available for the Robust Metadata case (but with a 0 default, which is consistent with the previous behavior).
Introduced a new strategy for the "events_recovery" configuration parameter of the Robust Proxy Data Adapter. See "enforce_snapshot" in the sample configuration file under "adapter_robust_conf_template".
Extended the configuration templates to advertise the variable-expansion feature introduced in Server version 6.1.
Improved a log message, which was unclear, related with Remote Adapter unavailability.
Embedded the Proxy Adapter binaries related with the current version of the Adapter Remoting Infrastructure. Previously, the ls-proxy-adapters.jar file supplied by the ARI SDK had to be added to the Adapter Set libraries. As a consequence, the ls-proxy-adapters.jar binaries are no longer provided directly. As a further consequence, the compatibility constraint of the Adapter Remoting Infrastructure is now stated directly with respect to the Server. COMPATIBILITY NOTE: Existing Adapter Set deployments based on the old Proxy Adapters supplied in ls-proxy-adapters.jar are supported seamlessly.
Introduced the "PROXY_FOR_REMOTE_ADAPTER" and "ROBUST_PROXY_FOR_REMOTE_ADAPTER" reserved names to be used in place of the class names for the inclusion of the new embededd Proxy Adapters in adapters.xml. COMPATIBILITY NOTE: The new reserved names are not expected to conflict with custom class names in an existing adapters.xml. COMPATIBILITY NOTE: In order to port an existing Adapter Set configured for Remote Adapters to the new Proxy Adapters, the adapters.xml configuration file has to be changed to comply with the new naming (and ls-proxy-adapters.jar can be discarded).
Introduced an explicit initialization request sent by the Proxy Adapters to the Remote Adapters upon connection. This now allows for:
See "remote_params_prefix" in the sample "adapters.xml" files for details on how the initialization parameters can be specified. COMPATIBILITY NOTE: Existing Remote Servers based on the .NET and Generic Adapter SDKs have to be upgraded to the new SDK version. However, backward compatibility can be restored by disabling the new request through the new "init_remote" configuration parameter.
Discontinued the support for the "Piped" versions of the Proxy Adapters. Only the "Networked" versions and their "Robust" extensions are now available. COMPATIBILITY NOTE: Existing installations based on the "Piped" versions should be ported to the "Networked" versions. But we don't expect this case to occur for production deployments, as the use of the "Piped" versions was not recommended for production. Removed the "eos_count_limit" and "eos_sleep_time" configuration parameters, which were only used by the "Piped" versions of the Proxy Adapters.
Introduced the "remote_address_whitelist" parameter, to be used to specify a list of IP addresses, from where Remote Adapter connections are accepted by a Proxy Adapter. If missing, connections are still accepted from any host.
Changed the logger names used by the Proxy Adapters for their own logging and replaced the old logger configuration with the new one in the Server's factory log configuration file (see the supplied file for details). COMPATIBILITY NOTE: To keep using an existing log configuration file, the logger should be manually replaced too. Obviously, as long as existing Adapter Set deployments based on the old Proxy Adapters are in use, the old logger should also be kept.
Removed the description of the ARI protocol (made available to custom Remote Servers for implementing the Adapter interface via TCP) from the scope of this component. Now, the "Adapter Remoting Infrastructure" component (no longer an SDK) only covers Lightstreamer-Server-side support (based on the Proxy Adapters) for all remoting SDKs. See the new "SDK for Generic Adapters" for the ARI protocol topic.
As a consequence of the introduction, in Server version 6.0, of separate ClassLoaders for the loading of the external libraries used by the Server internally, specifed the suggested settings in the factory Proxy Adapter configuration (through the new <classloader> setting), to enforce sharing of the slf4j/logback logging libraries with the Server. This confirms the previous behavior, hence the log configuration of the Proxy Adapters is still included in the Server log configuration file.
Revised the factory configuration of the optional thread pools in adapters.xml; with the new suggested configuration, some adapter-related pools are enabled and will take on some tasks previously falling in the "SERVER" pool.
Revised the default naming of connections (for logging purposes) and related threads,
by leaning on the configured proxy names instead of progressive numbers.
Introduced name suffixes to distinguish subsequent streams that may be
created by the Robust Proxy Metadata Adapter.
Moved the configuration examples (which include parameter descriptions) under "doc".
Provided a new introductory document.
Revised and relieved the Notes on Method Sequence for the Notify New Tables and Notify Tables Close methods, according with the locking policy change and the new <sequentialize_table_notifications> parameter introduced in SDK for Java Adapters version 5.1.
Discontinued the compatibility with the previous version of the Server.
Revised the low level log of the Proxy Adapters, to allow for suppressing
the log of real-time messages while logging the requests and replies from
the Remote Server; see com.lightstreamer.adapters.remote in the Server log
configuration file.
Fixed a typo in the com.lightstreamer.adapters.remote logger description.
Introduced new configuration properties to let the RobustNetworkedMetadataProvider return a custom error notification to the client upon a request for a new session when the Remote Server is currently unavailable; see "notify_user_disconnection_code" and "notify_user_disconnection_msg" in "conf\sockets(robust)\adapters.xml".
Introduced new configuration properties to let the RobustNetworkedDataProvider manage a custom item which carries notifications about the availability of the Remote Server; see "remote_adapter_status" in "conf\sockets(robust)\adapters.xml".
Added checks on the correct configuration of the Proxy Adapters; in fact, wrongly setting a notify port on a Proxy Metadata Adapter could lead to wrong behavior.
Improved the extraction of HTTP headers supplied by the "NUS"/"NUA" request.
Added log to detect issues caused by obsolete Remote Servers
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Extended the MetadataProvider interface with a setListener method. The new listener, provided by the Kernel just after initialization, adds support for operations requested by Metadata Adapter code. In particular, it is now possible to enforce the termination of a Session and to notify the Kernel of a fatal issue in the Adapter. Look for the new MetadataControlListener class in the docs for details. COMPATIBILITY NOTE: The new method has a default implementation which ignores the listener; so both source and binary compatibility with existing Adapters is guaranteed.
Extended the TableInfo bean class with new getters that provide further information
on the involved subscription. Added, in particular, getDataAdapter, getSubscribedItems,
and getSubscriptionStatistics; the latter are only available at subscription close.
See TableInfo and look for the new SubscriptionStatistics class in the docs for details.
Note that the change also involves the TableInfo constructor.
COMPATIBILITY NOTE: Existing Adapter code using the constructor
would not be compatible with the new jar; however, the constructor is just provided
for descriptive purpose and was never meant to be used by Adapter code.
Extended the TableInfo bean class with an operation method, named forceUnsubscription, which allows Adapter code to enforce the unsubscription of the involved subscription on behalf of the client. See the TableInfo docs for details.
Extended the MetadataProvider interface with a getSessionTimeToLive method, which will be invoked by the Kernel upon session creation. This will allow the Adapter to specify a time-to-live for the session, which will be enforced by the Server. COMPATIBILITY NOTE: The new method has a default implementation which doesn't set any time-to-live; so both source and binary compatibility with existing Adapters is guaranteed.
Added the ResourceUnavailableException, as a type of AccessException, to provide the possibility to have the Server instruct the client to retry upon an error which prevents notifyUser from working correctly.
Extended the clientContext map provided to notifyNewSession, by adding the CLIENT_TYPE and CLIENT_VERSION keys, with information on the client API in use.
Added clarifications on licensing matters in the docs.
Modified the interface in the part related to the MPN Module, after its full revision. But note that the MPN Module is not available with this edition. Here is a resume of the changes:
Changed the default of the <sequentialize_table_notifications> flag available in adapters.xml from Y to N, to better cope with cases in which many subscriptions are performed at once. COMPATIBILITY NOTE: If any existing Metadata Adapter relies on the invocations of notifyNewTables and notifyTablesClose for the same session to never overlap, ensure that the flag is explicitly configured as Y for this Adapter.
Changed the preconfigured settings for the dedicated thread pools in the adapters.xml template, to leverage the new defaults for the SERVER pool.
Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.
Aligned the documentation to comply with current licensing policies.
Extended the configuration template to advertise the variable-expansion feature introduced in Server version 6.1.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Revised the javadocs overview.
Revised javadoc formatting style.
Clarified in the Javadocs under which conditions field values supplied to the ItemEventListener can be reused.
Revised the title of the provided JavaDocs.
Added identification tags at the beginning of the various sample adapters.xml files provided. By keeping them in your own adapter configuration files, future upgrades of these files may be automated.
Extended the MetadataProvider interface to support the new
Push Notification Service (aka MPN Module). When enabled, the new methods will be
invoked in order to validate client requests related with the service. See the
Javadocs for details (see also the <mpn_pool> element in the sample
adapters.xml for Adapter related thread pool configuration).
COMPATIBILITY NOTE: Existing Metadata Adapter source
code has to be extended in order to be compiled with the new jar (the new methods
could just throw a NotificationException), unless the Adapter class inherits
from one of the supplied FileBasedProvider, LiteralBasedProvider or
MetadataProviderAdapter. In the latter case, the Adapter will accept any
MPN-related request; however, MPN-related client requests can be satisfied only
if the involved "app" has been properly configured.
On the other hand, existing Metadata Adapter binaries are still supported
(but for the unlikely case of a name conflict with the new methods) and will
refuse any MPN-related request (unless the Adapter class inherits from one of
the supplied FileBasedProvider, LiteralBasedProvider or MetadataProviderAdapter,
where the above considerations hold).
However, the MPN Module is not available with
this edition.
Changed the initialization order for Metadata Adapters and Data Adapters. By default the Metadata Adapter is initialised before any Data Adapter of the same Adapter Set. The optional configuration parameter "metadata_adapter_initialised_first" has been added to the adapters.xml configuration file to initialise the Metadata Adapter in parallel with the Data Adapters. COMPATIBILITY NOTE: Existing Adapter Sets relying on a concurrent initialization of Data and Metadata Adapters (may be the case for Remote Adapters) should use the "metadata_adapter_initialised_first" configuration parameter to restore the parallel initialization. Distinct Adapter Sets are initialised in parallel as before.
Introduced the "clearSnapshot"/"smartClearSnapshot" operations on the ItemEventListener, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the javadocs for details. COMPATIBILITY NOTE: Existing Data Adapters don't need to be recompiled. Extended some demo source code to show how the new methods can be invoked.
As a consequence of the introduction of separate ClassLoaders for the loading
of the external libraries used by Lightstreamer Server internally, all these libraries
are no longer visible from Adapter code.
COMPATIBILITY NOTE: Existing Adapters that lean on libraries
included by Lightstreamer Server should now include these libraries explicitly.
Sharing of library state is no longer possible,
but it was not supposed to be leveraged anyway.
The only exception is for logging. If any Adapter leans on the instance of slf4j/logback
included by the Server (perhaps in order to share the log configuration), it can be
configured to share these libraries through the new <classloader> setting in
adapters.xml (see the sample adapters.xml for details). In particular, this is the
case for Proxy Adapters.
However, note that the slf4j and logback libraries have
been updated; hence, if any custom Adapter has to keep sharing these libraries,
check out the slf4j and logback changelogs for any compatibility issues.
Introduced separate ClassLoaders for loading the resources related with the various Adapter Sets. As a consequence, classes pertaining to different Adapter Sets can no longer see each other, though they can still share any classes defined in the "shared" folder. By the way, note that any classes found in "lib" and "classes" under the Adapter Set folder are now added to the Adapter Set ClassLoader, even if all the Adapters declare a different dedicated <install_dir>. COMPATIBILITY NOTE: Existing Adapter code that leans on class sharing between the Adapter Sets may fail; however, the old behavior can be restored by simply placing all jars and classes in the "shared" folder. Moreover, introduced the possibility of loading the classes of single Metadata or Data Adapters in dedicated ClassLoaders (still inheriting from the ClassLoader of the Adapter Set); see the new <classloader> configuration element in the sample adapters.xml for details.
Fixed a race condition that, in principle, could have caused notifySessionClose to be invoked twice on the same session.
Embedded the binaries of the basic LiteralBasedProvider in ls-adapter-interface.jar. As a consequence, the ls-generic-adapters.jar file is no longer provided. Note that this library was also predeployed in the "shared" folder. COMPATIBILITY NOTE: If an existing Adapter installation is based on the LiteralBasedProvider and includes the ls-generic-adapters.jar file within its own folder, the jar should be removed to avoid confusion. Also note that the removed library also included the sample FileBasedProvider, which is no longer provided. COMPATIBILITY NOTE: in the unlikely case of an existing Adapter installation based on the FileBasedProvider, the old ls-generic-adapters.jar should be left; if it had been left in the "shared" folder, it is recommended to place it within the Adapter's own folder. Extended the interface Javadocs to include the LiteralBasedProvider, previously documented under the "examples" folder.
Introduced a sample adapters.xml configuration file, which includes the description of all parameters, in the new "adapter_conf_template" folder under "docs". It should be used as the reference for adapters.xml writing. On the other hand, the adapter configuration file of the preinstalled welcome page is no longer meant as a reference.
Revised the factory configuration of the optional thread pools in adapters.xml;
with the new suggested configuration, some adapter-related pools are enabled
and will take on some tasks previously falling in the "SERVER" pool.
Clarified the docs with regard to the thread pools involved in the various adapter
invocations.
Added details in the debug log of events received from the Data Adapters.
Fixed an error in the documentation of getWinIndex in the TableInfo class; clarified how the field can be used to match subscription and unsubscription requests.
Fixed some truncated short descriptions in the javadocs.
Improved the Javadoc, with introductory notes and instructions on the use of the sample LiteralBasedProvider.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Changed the SDK name, which was "SDK for Java Adapters", to avoid confusion with the new SDK for Java Remote Adapters.
Clarified the license terms for the included example source code.
Fixed an incorrect usage of SimpleDateFormat in some of the provided demo source files.
Relieved the locking policy on the invocation of the "notifyNewTables" and
"notifyTablesClose" callbacks, so that delays on the callback execution no longer
propagate to the update flow for the session. As a consequence, blocking implementations
of "notifyNewTables" are now allowed. See the javadocs for details.
COMPATIBILITY NOTE: In some cases, the relative order
of data and notification events may change, but only when different tables
are involved, in which case no order specification has never been claimed.
This also fixes an issue in the support of the Adapter Remoting Infrastructure,
in which the implementation of "notifyNewTables" can't but be potentially blocking.
Introduced the <sequentialize_table_notifications> tag in the Metadata Adapter configuration, to allow for also relieving the sequentialization constraint on the "notifyNewTables" and "notifyTablesClose" callbacks, so that delays on the callback execution would not even propagate to other subscription requests for the session. See the inline comment in the demos "adapters.xml" for details.
Fixed a typo in the documentation of the init method of both adapters, where "adapter_conf.id" was reported instead of "adapters_conf.id".
Improved the extraction of HTTP headers supplied to notifyUser.
Clarified the API documentation in several points.
Regenerated the API documentation with the newest JDK default template.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Extended DataProviderServer and MetadataProviderServer (through the Server superclass) with settings of credentials, to be sent to the Proxy Adapter upon each connection. Credential check is an optional configuration of the Proxy Adapter; if not leveraged, the credentials will be ignored.
Modified the handling of the keepalives when connected to a Proxy Adapter (i.e. Adapter Remoting Infrastructure) version 1.9 or higher: the preferred keepalive interval requested by the Proxy Adapter, when stricter than the configured one, is now obeyed (with a safety minimun of 1 second). Moreover, in that case, the default interval when not configured is now 10 seconds instead of 1. COMPATIBILITY NOTE: If an existing installation relies on a very short keepalive interval to keep the connection alive due to intermediate nodes, the time should now be explicitly configured.
Added full support for ARI protocol extensions introduced in Adapter Remoting Infrastructure version 1.9. COMPATIBILITY NOTE: If Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) is used and credentials to be sent to the Proxy Adapter are specified, they will obviously be ignored, but the Proxy Adapter will issue some log messages at WARN level on startup. COMPATIBILITY NOTE: Only in the very unlikely case that Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) were used and a custom remote parameter named "ARI.version" were defined in adapters.xml, this SDK would not be compatible with the Server, hence the Server should be upgraded (or a different parameter name should be used).
Deprecated the constructors of DataProviderServer and MetadataProviderServer that allow for the specification of initializeOnStart as true. These constructors will be removed in a future update, as the initializeOnStart flag was just meant as a temporary backward compatibility trick. COMPATIBILITY NOTE: Existing code and binaries using the deprecated constructors are still supported, but it is recommended to align the code. See the notes in the constructor documentations for details. Improved the documentation of the start method of the DataProviderServer and MetadataProviderServer classes, to clarify the behavior.
Fixed a bug in the default implementation of handleIOException (see setExceptionHandler and the ExceptionHandler interface), which could have raised, in turn, a NullPointerException, preventing it from terminating the process.
Added clarifications in the documentation of the exception handlers and fixed a few obsolete notes.
Discontinued the support for java 7 SDK and runtime environment. Java 8 or later is now required. COMPATIBILITY NOTE: installations of Remote Adapters still based on the discontinued java 7 JVM have to be upgraded. Existing Adapters that were compiled for a java 7 or earlier JVM don't need to be upgraded.
Added clarifications on licensing matters in the docs.
Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:
Added checks to protect the MetadataProviderServer and DataProviderServer objects from reuse, which is forbidden.
Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.
Aligned the documentation to comply with current licensing policies.
Fixed a problem introduced by a known Java compiler bug, which caused a "verify error" to be reported at runtime. The problem only affected the previous build 24.
Improved the Javadocs, by shortening the concise descriptions of some classes and methods.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Introduced parallelization of the invocations of methods on the Remote Metadata Adapter; in fact, previously, the invocations were always done sequentially, with possible inefficient use of the available resources (invocations for the Data Adapter were already done in parallel). Also introduced suitable configuration; see the docs for MetadataProviderServer and DataProviderServer for details. COMPATIBILITY NOTE: If existing Remote Metadata Adapters don't support concurrent invocations, sequential invocations should be restored by configuration.
Introduced the possibility to configure the keepalive time (which was fixed to one second) through the custom "lightstreamer.keepalive.millis" system property.
Fixed the API documentation of class Server, by removing the method "init". In fact, the method was not meant to be public.
Improved logging; now the detailed log of request-reply messages not including notification messages (i.e. data updates) is possible. Moreover, the keepalives can now be excluded from the the detailed log of request, reply and notification messages.
Added missing javadocs for the RemotingException class and a few other fields.
Fixed some mistaken class names and other typos in the javadocs comments.
Also removed the spurious DataProviderProtocol docs.
Revised javadoc formatting style and fixed a formatting error in DataProvider class.
Fixed the Javadocs for DataProvider and MetadataProvider interfaces on the way
implementations are supplied.
Fixed the handling of generic exceptions thrown by a DataProvider or MetadataProvider implementation: generic exceptions are now forwarded to the connected Lightstreamer Server whenever possible.
Included in Lightstreamer distribution. The features are similar to the current SDK for .NET Adapters (version 1.9 build 1008).
Check for newer versions on NuGet.
Fixed the default handling of parallelization of request processing, which was actually spawning a thread for each request, rather than submitting the requests to the default system task scheduling pool. This may have caused a significant overload in cases of high request rate.
Modified the handling of the keepalives when connected to a Proxy Adapter (i.e. Adapter Remoting Infrastructure) version 1.9 or higher: the preferred keepalive interval requested by the Proxy Adapter, when stricter than the configured one, is now obeyed (with a safety minimun of 1 second). Moreover, in that case, the default interval configuration is now 10 seconds instead of 1. COMPATIBILITY NOTE: If an existing installation relies on a very short keepalive interval to keep the connection alive due to intermediate nodes, the time should now be explcitly configured.
Deprecated the constructors of DataProviderServer and MetadataProviderServer that allow for the specification of initializeOnStart as true. These constructors will be removed in a future update, as the initializeOnStart flag was just meant as a temporary backward compatibility trick. COMPATIBILITY NOTE: Existing code and binaries using the deprecated constructors are still supported, but it is recommended to align the code. See the notes in the constructor documentations for details. Improved the documentation of the Start method of the DataProviderServer and MetadataProviderServer classes, to clarify the behavior.
Added clarifications in the documentation of the exception handlers and fix a few obsolete notes.
Renamed the SDK, which was named "SDK for .NET Adapters", to "SDK for .NET Standard Adapters" and the folder in DOCS-SDKs to "sdk_adapter_dotnetstandard". The new name emphasizes that it is now compliant with .NET Standard API Specifications 2.0. The .NET Standard allows greater uniformity through the .NET ecosystem and works seamlessly with .NET Core, .NET Framework, Mono, and UWP apps. COMPATIBILITY NOTE: Existing applications that target the following platforms:
can be upgraded to the new SDK provided that the platform version is compatible with .NET Standard 2.0. Otherwise they have to stick to the older SDK.
Made the library available through the NuGet online service. The binaries are no longer included in Lightstreamer distribution package.
Removed the DotNetServer.exe utility, which allowed for the configuration and launch of single Remote Adapter instances, with a basic handling of connections and errors. COMPATIBILITY NOTE: Current istallations that take advantage of the DotNetServer.exe utility should be integrated with a custom launcher; see the provided demos, which all include simple custom launchers for the adapters, with the related source code.
Extended DataProviderServer and MetadataProviderServer (through the Server superclass) with properties for credentials, to be sent to the Proxy Adapter upon each connection. Credential check is an optional configuration of the Proxy Adapter; if not leveraged, the credentials will be ignored.
Added full support for ARI protocol extensions introduced in Adapter Remoting Infrastructure version 1.9. COMPATIBILITY NOTE: If Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) is used and credentials to be sent to the Proxy Adapter are specified, they will obviously be ignored, but the Proxy Adapter will issue some log messages at WARN level on startup. COMPATIBILITY NOTE: Only in the very unlikely case that Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) were used and a custom remote parameter named "ARI.version" were defined in adapters.xml, this SDK would not be compatible with the Server, hence the Server should be upgraded (or a different parameter name should be used).
Embedded the sample app.config file in the docs package, for convenience.
Added clarifications on licensing matters in the docs.
Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:
Added checks to protect the MetadataProviderServer and DataProviderServer objects from reuse, which is forbidden.
Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.
Aligned the documentation to comply with current licensing policies.
Improved the app configuration example, by showing how to configure the keepalive messages.
Dropped the compatibility with .NET environment versions prior to 4.0. 4.0 or later is now required. COMPATIBILITY NOTE: Check the .NET runtime environment in use before updating existing Remote Adapter installations. If the Remote Adapter is run by a custom launcher, and if the application had been compiled for an earlier .NET environment, the loading of the new library may fail. In this case, the application has to be recompiled and possibly ported to a 4.0 or later target environment.
As a consequence of the new runtime requirements, the names of the provided exe and dll files have changed, to lose the _N2 suffix. COMPATIBILITY NOTE: Existing Remote Adapter installations may require some renaming within some custom script. If the Remote Adapter is run by a custom launcher, a rebuild of the application may be needed to refer to the new dll name.
Introduced parallelization of the invocations of methods on the Remote
Metadata Adapter; in fact, previously, the invocations were always done
sequentially, with possible inefficient use of the available resources.
Several policies are now available for both Metadata and Data Adapter method
invocation, and can be configured through the application configuration;
see the new sample file in the new "conf" directory for details.
By default, the invocations to the Metadata Adapter methods are now done
in parallel.COMPATIBILITY NOTE: If existing
Remote Metadata Adapters don't support concurrent invocations, sequential
invocations should be restored by configuration.
Introduced the possibility to configure the keepalive time (which was fixed to one second) through the application configuration; see the new sample file in the new "conf" directory for details.
Improved logging; now the keepalives can be excluded from the the detailed log of request, reply and notification messages.
Fixed obsolete notes in the docs for DataProvider and MetadataProvider interfaces on the way implementations are supplied.
Improved logging; now the detailed log of request-reply messages not including notification messages (i.e. data updates) is possible.
Reduced some long pathnames in the docs pages, which could cause issues on some systems.
Introduced the possibility to provide Adapter initialization parameters
directly from the Proxy Adapter configuration; such parameters (to be
supplied as explained in the Adapter Remoting Infrastructure documentation)
will be added to those already received by the Metadata or Data Adapter
Init method.
As a consequence, the Init method of a Remote Adapter is no longer invoked
upon Remote Server startup, but only after the connection with the Proxy
Adapter has been established. COMPATIBILITY NOTE:
The move of initialization stuff performed in the Init method from before
to after the connection attempt may be undesirable. If this is the case:
Extended the MetadataProvider interface to support the new
Push Notification Service (aka MPN Module). When enabled, the new methods will be
invoked in order to validate client requests related with the service. See the
interface docs for details.
COMPATIBILITY NOTE: Existing Remote Metadata Adapter
source code has to be extended in order to be compiled with the new dll
(the new methods could just throw a NotificationException),
unless the Adapter class inherits from one of the supplied LiteralBasedProvider
or MetadataProviderAdapter. In the latter case, the Adapter will accept
any MPN-related request; however, MPN-related client requests can be satisfied
only if the involved "app" has been properly configured.
On the other hand, existing Remote Metadata Adapter binaries hosted by an old
version of the .NET Adapter SDK still run with the new version of Lightstreamer
Server and the Proxy Adapters, as long as the MPN Module is not enabled.
However, the MPN Module is not available with
this edition.
Introduced the "ClearSnapshot" operations on the Remote Server's IItemEventListener, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the interface docs for details. COMPATIBILITY NOTE: Existing Data Adapters don't need to be extended or recompiled.
Removed the dependency of the SDK library from log4net for its own logging.
Custom launchers should use the new static SetLoggerProvider function in the
"Server" class to provide suitable consumers, by implementing new dedicated
interfaces (see the docs for details).
COMPATIBILITY NOTE: Existing custom launchers will still run with the new
SDK library, but they won't print any log coming from the library itself;
in order to print such log, they have to be extended.
The supplied DotNetServer_N2.exe still leans on log4net, over which it
forwards all library's log.
Updated the included log4net dll to version 1.2.13; note that, according
with the above change, the log4net library is no longer required in order
to compile the Adapters, but only in order to run DotNetServer_N2.exe.
Changed DotNetServer_N2.exe so that the /host command line argument is now mandatory; this disallows the use in combination with the "Piped" versions of the Proxy Adapters. COMPATIBILITY NOTE: this is just a consequence of the discontinuation of "Piped" versions brought by Adapter Remoting Infrastructure 1.7; see related notes.
Fixed an error in the documentation of the WinIndex property in the TableInfo class; clarified how the field can be used to match subscription and unsubscription requests.
Simplified the included documentation, to lean on the Adapter Remoting Infrastructure documentation for architectural aspects and on the available examples for the deployment aspects.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Modified the SDK versioning, which now differs from the internal dll versioning.
Improved the performances under high update load.
Relieved the restrictions on the use of the NotifyNewTables method, according with the locking policy change introduced in SDK for Java [In-Process] Adapters version 5.1.
Clarified the API documentation in several points.
Fixed a bug that affected the special Update method overloads based on the IItemEvent and IIndexedItemEvent interfaces. In case the "robust" version of the Proxy Data Adapter had been in use, the updates could have been discarded.
Improved the extraction of HTTP headers supplied to NotifyUser.
Clarified the API documentation in several points.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Check for newer versions on npm.
Extended the constructors of the DataProvider and MetadataProvider classes with settings of credentials, to be sent to the Proxy Adapter upon each connection. Credential check is an optional configuration of the Proxy Adapter; if not leveraged, the credentials will be ignored.
Introduced the handling of keepalive packets to help keeping the connections
to the Proxy Adapter alive. This fixes possible incompatibilities with Proxy
Adapters configured to perform activity checks.
Also furtherly extended the constructors of the DataProvider and MetadataProvider
classes to provide keepalive interval settings; however the supplied settings
are only meant to restrict the Proxy Adapter requirements, if needed to support
intermediate node or to detect connection issues.
Added full support for ARI protocol extensions introduced in Adapter Remoting Infrastructure version 1.9. COMPATIBILITY NOTE: If Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) is used and credentials to be sent to the Proxy Adapter are specified, they will obviously be ignored, but the Proxy Adapter will issue some log messages at WARN level on startup. COMPATIBILITY NOTE: Only in the very unlikely case that Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) were used and a custom remote parameter named "ARI.version" were defined in adapters.xml, this SDK would not be compatible with the Server, hence the Server should be upgraded (or a different parameter name should be used).
Fixed a bug which prevented instantiation of multiple Data Adapters in the same process, causing a "Unexpected late DPI message" error to be issued.
Added clarifications on licensing matters in the documentation.
Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:
Added notes in the documentation on the implication of the licensing policies.
Fixed the error() method of the MetadataResponse class, whose support for the "credits" and "conflictingSession" response was incomplete; sending such a response would have caused a wrong message to be sent to the Server and the message would have been refused. The new optional exceptionData argument has been added; see the API docs for details. Sending a "credits" or "conflictingSession" response now requires the new argument; if omitted or wrong, an exception will be thrown. COMPATIBILITY NOTE: Custom code sending "credits" or "conflictingSession" responses must be changed, although such code wouldn't have worked anyway.
Fixed a bug in the parsing of requests that could lead to incorrect results in case of two or more simultaneous requests.
Removed the library and jsdocs from the package. Only links to online resources are now provided.
Introduced the possibility to provide Adapter initialization parameters directly from the Proxy Adapter configuration. Hence, a "init" event has been added to both the MetadataProvider and DataProvider objects; it will be triggered after the connection with the Proxy Adapter has been established and passed the new parameters (to be supplied as explained in the Adapter Remoting Infrastructure documentation). COMPATIBILITY NOTE: The new events can be left unhandled, so no code changes are needed.
Extended the MetadataProvider object to support the new Push Notification Service (aka MPN Module). When enabled, the new events will be issued in order to validate client requests related with the service. See the docs for details. COMPATIBILITY NOTE: Existing Remote Metadata Adapter code is still supported (but for the unlikely case of a name conflict with the new events) and the Adapter will accept any MPN-related request; however, MPN-related client requests can be satisfied only if the involved "app" has been properly configured. However, the MPN Module is not available with this edition.
Added the clearSnapshot method to the DataProvider object, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the interface docs for details.
Improved interpretation of non-string values used as field value updates: while previously all "falsey" values, excluding the empty string, were interpreted as nulls now their string representation is assumed COMPATIBILITY NOTE: If a null was expected on the Client as a consequence to a falsey value passed to the adapter, such value has to be replaced with an explicit null or the Client has to be changed accordingly.
Improved the interface documentation.
Fixed the documentation of some cases in the MetadataResponse class, which were
confused with the corresponding requests.
Introduced suitable documentation for the default behavior of the MetadataProvider
object.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Officially introduced in Lightstreamer distribution.
Check for newer versions on the Python Package Index.
Extended DataProviderServer and MetadataProviderServer (through the Server superclass) with settings of credentials, to be sent to the Proxy Adapter upon each connection. Credential check is an optional configuration of the Proxy Adapter; if not leveraged, the credentials will be ignored.
Modified the handling of the keepalives when connected to a Proxy Adapter (i.e. Adapter Remoting Infrastructure) version 1.9 or higher: the preferred keepalive interval requested by the Proxy Adapter, when stricter than the configured one, is now obeyed (with a safety minimun of 1 second). Moreover, in that case, the default interval configuration is now 10 seconds instead of 1. COMPATIBILITY NOTE: If an existing installation relies on a very short keepalive interval to keep the connection alive due to intermediate nodes, the time should now be explicitly configured.
Added full support for ARI protocol extensions introduced in Adapter Remoting Infrastructure version 1.9. COMPATIBILITY NOTE: If Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) is used and credentials to be sent to the Proxy Adapter are specified, they will obviously be ignored, but the Proxy Adapter will issue some log messages at WARN level on startup. COMPATIBILITY NOTE: Only in the very unlikely case that Adapter Remoting Infrastructure 1.8.x (corresponding to Server 7.0.x) were used and a custom remote parameter named "ARI.version" were defined in adapters.xml, this SDK would not be compatible with the Server, hence the Server should be upgraded (or a different parameter name should be used).
Added full support for TLS/SSL encrypted connections the Proxy Adapters.
Added clarifications in the documentation of the exception handlers and fixed a few obsolete notes.
Added clarifications in the documentation of MetadataProviderServer and DataProviderServer classes.
Improved code layout as per pylint/pycodestyle outputs.
Removed useless "pass" statement from classes of the interfaces package.
Updated unit tests according to new features.
Fixed a bug that caused requests sent from Lightstreamer instances running on non-Windows platform not to be parsed correctly.
Fixed parsing issue when subscribing to more than two items.
Fixed edition note in the documentation of notify_user_with_principal.
Added clarifications on licensing matters in the docs.
Fixed few source code fragments to make them PEP8 compliant.
Fixed Lightstreamer Compatibility Notes in the README file.
Removed the API-reference folder under doc, which referred to version 1.0.0post1 and should have been removed since version 1.1.0.
Modified the interface in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:
Clarified in the docs for notifySessionClose which race conditions with other methods can be expected.
Aligned the documentation to comply with current licensing policies.
Fixed notification of End Of Snaphsot in case of not availability of the snapshot.
Fixed docstrings in modules "lightstreamer_adapter/server.py" and "lightstreamer_adapter/subscription.py".
Fixed unit tests.
Updated logging messages.
Finishing touches on the package documentation visible from the PyPi repository.
Upgraded to final version, ready for production use.
Officially introduced in Lightstreamer distribution.
Modified the syntax of the response to MPI and DPI messages, to support initialization
parameters provided by the Remote Adapter to the Proxy Adapter.
Also introduced an optional message, RAC, to be sent on all channels by a Remote Adapter,
to enable Remote Adapter authentication, when configured on the Proxy Adapter.
See the ARI protocol specifications for details on syntax and supported parameters.
COMPATIBILITY NOTE: Existing Remote Adapters based
on protocol version 1.8.0 are not compliant with the new syntax, but they are guaranteed
to be supported by any Proxy Adapter which supports a later version.
Added the ARI.version initialization parameter in all messages of type MPI and DPI, to report Proxy Adapter protocol information. Now the Remote Adapter must also specify its own protocol version in a ARI.version parameter in the newly introduced response messages to MPI and DPI. COMPATIBILITY NOTE: Existing Remote Adapters based on protocol version 1.8.0, still supported, will receive the additional ARI.version parameter upon MPI and DPI messages; this is not supposed to hurt the Adapter.
Added the optional keepalive_hint.millis initialization parameter in messages of type MPI and DPI, to indicate the suggested time for keepalive messages. COMPATIBILITY NOTE: Existing Remote Adapters based on protocol version 1.8.0, still supported, may receive the additional keepalive_hint.millis parameter upon MPI and DPI messages; this is not supposed to hurt the Adapter.
Improved the protocol specifications with regard to the keepalive messages.
Improved the protocol specifications with regard to line termination, where
it could have been misleading.
Added clarifications on licensing matters in the documentation.
Modified the protocol for the Remote Metadata Adapters in the part related to Mobile Push Notifications, after the full revision of the Server's MPN Module. But note that the MPN Module is not available with this edition. In particular:
COMPATIBILITY NOTE: Only if the MPN Module is enabled, existing Remote Metadata Adapters should be updated to support the new syntax. COMPATIBILITY NOTE: As the MPN Module is disabled, existing Remote Metadata Adapters will not be affected.
Revised the documentation to comply with the configuration change introduced in ARI 1.8 about <sequentialize_table_notifications>.
Added missing notes on the constraints on error codes in Credits and Conflicting Session exception types.
Clarified in the documentation which race conditions between Notify Session Close and other methods can be expected.
Added notes in the documentation on the implication of the licensing policies.
Fixed a wrong link to the online examples in examples.txt.
Fixed syntax errors in the examples of the MPI and DPI commands. The syntax specifications were unaffected.
Introduced as a separate SDK to address the ARI Protocol, made available to custom Remote Servers for implementing the Adapter interface via TCP. For the history of the previous versions of the protocol, refer to the "Adapter Remoting Infrastructure" component, up to version 1.4.3.
Extended the protocol to introduce the possibility to provide Remote Servers with initialization parameters directly from the Proxy Adapter configuration. Hence, new "DPI" and "MPI" methods, for Data and Metadata Adapters respectively, have been added; they will be invoked on the request channel immediately after the connection and passed the new parameters (to be supplied as explained in the Adapter Remoting Infrastructure documentation). See the protocol documentation for details. COMPATIBILITY NOTE: Existing Remote Servers have to be extended in order to accept and answer the new request, otherwise the connection will fail. However, the previous behavior can be enforced on the Proxy Adapter by disabling the new request through the new "init_remote" configuration parameter of the Proxy Adapter.
Extended the protocol with requests related with the new Push Notification Service (aka MPN Module). When enabled, the new requests will be issued in order to validate client requests related with the service. See the Protocol documentation for details. COMPATIBILITY NOTE: existing Remote Servers don't need to be extended as long as the MPN Module is not enabled. However, the MPN Module is not available with this edition.
Introduced the "CLS" command on the Data Adapter notification channel for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). Refer to "clearSnapshot" in the Java In-Process Adapter SDK for details.
Clarified the protocol documentation with regard to the thread pools within Lightstreamer Server involved in the invocation of the various methods.
Check for newer versions on npm.
Fixed a bug on IE11 which could have caused an exception with the message "Operation aborted" when invoking the method LightstreamerClient.sendMessage. In some cases, the message could have been still sent successfully.
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Fixed a bug which could have caused the client to ignore a call to LightstreamerClient.disconnect, when it was invoked while the client was reconnecting, that is, when LightstreamerClient.getStatus was equal to DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY.
Fixed a bug which could have caused the ClientListener.onStatusChange callback to notify the status DISCONNECTED:WILL-RETRY as the first status instead of CONNECTING. The anomaly could be triggered by invoking LightstreamerClient.disconnect while the client was trying to recover the session, and then invoking LightstreamerClient.connect.
Fixed a bug which could have caused the client to disconnect abruptly when the server signaled a harmless error message.
Revised and improved the layout of the jsdocs.
Revised and improved the provided Web Client Guide document.
Made the library available on the public npm service, at the following address:
https://www.npmjs.com/package/lightstreamer-client-web.
As a consequence, the base library, the library generator tool, and the jsdocs
are no longer included in the sdk_client_web, where only the relevant links are left.
Moreover, the library is now open source, available on github at the following address:
https://github.com/Lightstreamer/Lightstreamer-lib-client-javascript.
Hence, the non-minified version of the library is also provided.
The way the deliverables are provided has also changed on various aspects:
Introduced the support for Mobile Push Notifications. It consists in
new methods in the LightstreamerClient class together with new dedicated
classes. See the API documentation for details.
An MPN subscription is backed by a real-time subscription, from which it may take
any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent:
they survive the session and are identified by a permanent, global, unique key provided
by the Server at time of activation.
The notifications are managed by third-party services supported by the Server,
which determine the notification characteristics and the supported devices.
COMPATIBILITY NOTE: The extension requires Server 7.1
and breaks the compatibility with Server version 7.0. However, if MPN support
is not used, compatibility with Server version 7.0 is still ensured.
However, the support for Mobile Push Notifications
by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.
Improved the communication with the Server by adopting the public TLCP protocol.
Moreover, the internal protocol based on javascript commands is no longer used;
hence, the "eval" function is no longer invoked within the library.
As a consequence, the support for very old browsers has been reduced, depending
on the deployment scenario (i.e. with regard to the type of urls used to access
the static pages and Lightstreamer Server). In particular:
In many of these cases, the new limitation only occurs when
setCookieHandlingRequired(true) is invoked by the application.
More details on the current support level are provided in the
"Deployment Config Matrix". See paragraph 2.1.1 in the
Web Client Guide document included in the SDK.
Note that, as a consequence, if clients based on older versions of this SDK
are no longer in use, the Server's <use_protected_js> configuration flag
can be forced to N.
Added the support for TypeScript through the declaration file types.d.ts.
Added the support for React Native. See the new demo for details.
Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported.
Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and its changes during subscription life. See the docs for details and special cases.
Fixed a bug introduced with the session recovery mechanism, which, under certain conditions, could have caused the client to ignore the setForcedTransport setting after a recovery attempt, even a successful one.
Removed a spurious notification of the DISCONNECTED:WILL-RETRY state that could occur when invoking connect() after receiving an invocation of onServerError(). The bug was harmless.
Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).
Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Added new error codes 66 and 68 to onServerError, onSubscriptionError, and
onSecondLevelSubscriptionError, to report server-side issues; previously,
upon such problems, the connection was just interrupted.
Added new error code 61 to onServerError, to report unexpected client-side issues;
previously, upon such problems, the connection was just interrupted.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError
documentation; when a subscription request cannot find the session,
the session is just closed and replaced immediately.
Reduced reconnection time in case the browser detects the online status.
By-passed the "retry delay" setting when recovering from a closed session. This may speedup the recovery process.
Clarified in the docs the role of the delayTimeout in sendMessage.
Discontinued the support for the SDK for Flash Clients. COMPATIBILITY NOTE: Existing clients using the Flash Client SDK should not be ported: they have to stick to Web Client SDK library version 7.2.0.
Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables Web Client SDK up to version 7.2 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Fixed an annoying formatting issue in the jsdoc page for ConnectionOptions.
Fixed a bug causing the conversion into numbers of user-supplied string parameters (e.g. in settings in ConnectionDetails and ConnectionOptions) which can be interpreted as numbers. For example a user name of the form '1e2' could have been converted into the number 100, then used as the string '100'.
Fixed several bugs in the session recovery mechanism:
Fixed a bug preventing the sharing of the connection among LightstreamerClient objects created on the same page.
Fixed a bug due to a race condition between a subscribe and a concurrent disconnect in a connection sharing scenario, which could have caused the subscription to be skipped upon a subsequent connect.
Modified the implementation of connect() when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect() first.
Modified in a similar way the implementation of setForcedTransport(); when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is "RetryDelay", which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the "ConnectTimeout" and "CurrentConnectTimeout" properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can still be inspected through
getCurrentConnectTimeout, but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect() and then connect().
As a result of the change, methods setConnectTimeout, getConnectTimeout and setCurrentConnectTimeout
of ConnectionOptions have been deprecated, as the setters have no effect and the getter
is now equivalent to getRetryDelay.
Also changed the default value of the "RetryDelay" property from 2 seconds to 4 seconds.
Changed the default value of the "EarlyWSOpenEnabled" property from true to false (see ConnectionOptions.setEarlyWSOpenEnabled). This removes a potential incompatibility with cookie-based Load Balancers, at the expense of a possible slight delay in session startup.
Changed the default value of the "SlowingEnabled" property from true to false (see ConnectionOptions.setSlowingEnabled).
Fixed a mistake in the supplied generator.html page, whereby the "Include Promise polyfill" checkbox was only shown while one of the AMD options was selected. Actually, the checkbox was still obeyed, as expected, even when not visible.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables Web Client SDK up to version 7.1 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Fixed a race condition, mostly possible while a session recovery was being attempted, which could have caused the delay of subscription requests due to a wrong request to the Server.
Addressed various issues related with connection sharing:
Addressed a particular case of session interruption that was still not supported by the session recovery feature.
Fixed a severe bug in the recently introduced session recovery mechanism, by which, after the creation of a new session because of network issues, it was possible that subsequent successful session recovery would cause data loss.
Fixed a bug in the recently introduced session recovery mechanism, which, upon particular kinds of network issues and if the creation of a new session had been necessary, could have caused the client to skip the resuming of the active subscriptions.
Fixed an annoying typo in the documentation of onStatusChange regarding the "DISCONNECTED:TRYING-RECOVERY" status.
Improved the library log by splitting the "lightstreamer.subscriptions" category in three, with the introduction of "lightstreamer.messages" and "lightstreamer.requests". See setLoggerProvider in LightstreamerClient for details. COMPATIBILITY NOTE: Existing code that collects log from the "lightstreamer.subscriptions" category should be ported. This obviously is not expected to affect production code.
Added the error code 21 in onServerError, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke onServerError and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action. Likewise, added the error code 11 in onSubscriptionError and onCommandSecondLevelSubscriptionError, that can be received instead of code 20, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. COMPATIBILITY NOTE: Existing applications which handle error code 20, should ensure that the new error code 11 is also handled properly.
Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches on mobile phones.
Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.
Fixed a race condition, introduced in the previous build 1737, which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.
Improved compatibility with the latest versions of Edge and Safari. This required disabling connection sharing.
Improved the notification of closed sessions to the Server, to enforce a cleanup when a browser tab is closing.
Changed the internal folder from sdk_client_web_unified to sdk_client_web.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY,
to inform the application when a recovery attempt is being performed; hence,
onStatusChange and getStatus can provide the new status.
COMPATIBILITY NOTE: Existing code that uses the status
names received via onStatusChange or getStatus may have to be aligned.
Added the onServerKeepalive callback in the ClientListener. See the JSDocs for details.
Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval"
property. Now, it will also allow the Server to detect when a client has abandoned
a session although the socket remains open.
Fixed a bug on sending reverse heartbeats to the Server, which, sometimes, could
have caused the Server to report a syntax error.
Added the error codes 60 and 71 to "onServerError", to report cases in which the Server license does not allow the client version.
Fixed a bug which caused the invocations to the "setReconnectTimeout" method in ConnectionOptions to be ignored.
Fixed a bug on the recovery of control requests upon session close and replacement, which, through a rare race condition, could have caused the block of all subsequent control requests.
Fixed a bug that could affect the sorting of grid widgets requested through setSort method in case of large numbers (greater that 1 million) and comma as thousands separator.
Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.
Put a workaround for a known issue with shared workers in Firefox 57 and above, which could have caused misbehavior in case of connection sharing. As a consequence, the support for connection sharing may be limited.
Aligned the "Web Client Guide" document with regard to the referred "Deployment Config Matrix", which had remained obsolete.
Improved subscription requests on WebSockets by removing unnecessary parts.
Improved the messages shown by the provided StatusWidget.
Aligned the documentation to comply with current licensing policies.
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. This includes the specification of field names as "data-field" attributes in DOM cells to be handled by StaticGrid or DynaGrid. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug introduced in version 6.1 which prevented the "slowing algorithm" (see setSlowingEnabled) from working.
Fixed a bug in setRequestedBufferSize, which caused the value "unlimited" to be ignored for subscriptions in MERGE mode, which would stick to the default buffer size of 1.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Revised the documentation of possible subscription error codes.
Fixed the Documentation of the FlashBridge class, which included spurious entries for names "onBridgeReadyCalled" and "callBridgeReady".
Fixed a bug that could prevent the transition to "cold" style of a cell in a grid, hence leaving it in "hot" state. This was only possible if the Server's <delta_delivery> setting had been forced to N.
Addressed a compatibility issue with the new Safari 10, which, on some environments, caused the cells associated with StaticGrid or DynaGrid objects not to be detected.
Fixed the handling of wrong calls to getFields and getFieldSchema on Subscription. In some cases, an exception different from the IllegalStateException was thrown.
Fixed a bug that could affect connection sharing on old browsers when equipped with Norton Internet Security.
Fixed a bug in the logging support, which caused the setUseInnerHtml method of the DOMAppender to be ineffective (false was always meant).
Fixed the log produced by the library, as, between the window name (when available) and the timestamp a space was missing.
Fixed a bug that, under conditions of client machine overloaded or badly responsive, could have caused a successful subscription, together with the related updates, not to be notified to the application. The bug only affected slave pages when connection sharing was enabled.
Fixed a bug that could have led, under certain circumstances, to an endless loop of connection and disconnection when two or more pages were trying to share the connection.
Added clarification details in the documentation of setCookieHandlingRequired and enableSharing.
Renamed the SDK, which was named "SDK for JavaScript Clients". The new name also emphasizes that it is based on the Unified APIs, like an increasing number of other Client SDKs. Also renamed the internal folder from "sdk_client_javascript" to "sdk_client_web_unified".
Discontinued the documentation of the use of this library in a Node.js environment. Now the new SDK for Node.js Clients (Unified API) is available, with dedicated documentation and instructions on how to acquire the library from the npm service.
Discontinued the supply of the alternative versions of the library, which,
however, can still be created with Generator.html. Also moved Generator.html
under the lib folder.
Note that the library version
for Node.js was in AMD format and required to be included in a custom source
together with RequireJS. The use of the library version available through the
npm service (see the new Node.js Client SDK) is recommended instead.
Changed the names of some properties in the ConnectionOptions bean. To resume:
This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using getters and setters for any of the specified properties should be ported, but the old getters and setters are still supported. On the other hand, custom code which defines onPropertyChange on a ClientListener and mentions any of the specified properties has to be ported to the new property names.
Separated the ConnectionSharing class from the LightstreamerClient: this means the class and its dependencies
can now be excluded using the Generator.html.
Hence, the API and usage for this class have changed:
clientInstance.connectionSharing.enableSharing(...);
clientInstance.connectionSharing.isMaster();
becomes
clientInstance.enableSharing(new ConnectionSharing(...));
clientInstance.isMaster();
where the parameters of the old enableSharing method and the new ConnectionSharing constructor are still the same.
COMPATIBILITY NOTE: existing code leveraging enableSharing
should be ported, although old code still works for now (provided that the ConnectionSharing
class is not excluded via Generator.html); if no sharing at all is configured,
the enableSharing call can also be removed.
When connection sharing is enabled, it is now possible to force the LightstreamerClient
to release sharing-related resources by using the enableSharing(null) call while DISCONNECTED.
Fixed a bug introduced on version 6.2.6: the bug prevented the use of WebSockets in some cases in which the user connection was switched from a non-WS-enabling network to a WS-enabling one.
Fixed a bug: in case of a Subscription Error the client would still try to subscribe the Subscription again, until a manual unsubscribe call was performed.
Fixed a bug which prevented the invalid-license error from being notified on Node.js.
Changed the behavior of getConnectTimeout/setConnectTimeout. This setting now accepts the "auto" value. If "auto" is specified, the timeout will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value. To check and/or modify the current timeout a new getter/setter pair is exposed: getCurrentConnectTimeout/setCurrentConnectTimeout. COMPATIBILITY NOTE: If the getConnectTimeout method is called by the client code its receiving variable may now contain the string "auto"; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.
Slightly changed the reconnection policy upon unexpected errors affecting an active session. In some known cases, the reconnection will no longer be immediate (with the risk of a fast reconnection loop), but the configured retry delay will be applied.
Improved the support for connection sharing by taking advantage of the SharedWorker class, where supported by the browser. As a consequence, sharing will now succeed in some contexts in which it used not to take place.
Introduced a Promise polyfill (https://github.com/jakearchibald/es6-promise). The polyfill is optional and can be excluded using the Generator.html; in this case the library expects to find the Promise class in the environment.
Fixed a wrong argument type in the docs for class FunctionAppender.
Fixed the documentation of onServerError and onStatusChange, to specify that onServerError
is always preceded, not followed, by onStatusChange with DISCONNECTED.
Fixed various links in the JSDocs. Also slightly revised the style of the JSDocs.
Fixed the documentation of the DOMAppender and FunctionAppender constructors,
which indicated optional arguments before a mandatory argument. Actually,
an argument qualified as optional can omitted only if not followed by further
arguments, hence arguments preceding a mandatory one are mandatory as well.
Aligned the documentation of all Appenders by removing the optionality attributes
to their common constructor arguments.COMPATIBILITY NOTE:
No change is needed to existing code, because each of these arguments can still
be omitted, as long as no subsequent arguments are supplied.
Clarified the policy for optional function arguments in the docs introduction.
Removed from the documentation various classes that are not related
with the interface, but used to be provided as utilities.
The whole set of utility classes can be found on GitHub at the following address:
https://github.com/Lightstreamer/utility-toolkit-javascript
Removed also some log-related classes that are not needed for setting up the
library log, but used to be provided to offer a full reusable logging system.
The whole logging system can be found on GitHub at the following address:
https://github.com/Lightstreamer/utility-logging-javascript
COMPATIBILITY NOTE: These classes are still included
in the library as part of the implementation, so application code exploiting them
will keep working. However, any future changes related with these classes
will not be reported.
Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license file that supports Web Client SDK up to version 6.x or earlier, clients based on this new version will not be accepted by the Server.
Fixed a bug introduced on version 6.1.4 which only affected the use on Node.js; the effect was that, when the Server was unavailable, no more connection attempts were tried.
Fixed an error in the JSDocs, where SimpleLoggerProvider was documented as a module (with static methods); actually, it is a class, with instance methods and an empty constructor.
Fixed a bug: when using the SDK library inside a WebWorker, setting the setCookieHandlingRequired flag to true prevented the library from connecting.
Fixed a bug on the onClearSnapshot implementation of the DynaGrid/StaticGrid/Chart classes, which caused it to have no effect.
Fixed a bug in the SimpleLoggerProvider.removeLoggerAppender method.
Fixed an error in the JSDoc: in the ClientListener.onStatusChange the status "CONNECTED:STREAM-SENSING" was erroneously reported as "CONNECTED:STREAM-SENSE".
Prevented a serious error, on the opening of a WebSocket to a certain host, from blocking other WebSockets connections to different hosts.
Changed the behavior of the addListener method for the LightstreamerClient, Subscription, Chart, DynaGrid and StaticGrid classes: adding a second time the same listener instance now has no effect. COMPATIBILITY NOTE: if in existing code a same listener was added two times to a certain instance, it will no longer receive the events twice; moreover, upon the first invocation of removeListener it will be removed and it will stop receiving events. Hence such code may need to be revised.
Introduced work-around for early XDomainRequest failures related to specific proxies.
Introduced partial compatibility with React Native: at the moment the Client can only connect in HTTP-POLLING mode.
Clarified in the docs that the RemoteAppender does not support log of "INFO" and "DEBUG" levels.
Changed the value of the LightstreamerClient.LIB_NAME static property to "javascript_client".
Changed the default value for the ConnectionOptions.setContentLength setting.
Introduced support for the new error related to the expiration of an active session on Lightstreamer Server (error 48). The error is not forwarded to the ClientListener, a reconnection is performed instead.
Improved support for stickiness expiration on load balancers: if a client request pertaining to the current session is sent to the wrong instance of Lightstreamer Server, the Client automatically terminates the current session and opens a new one.
Fixed the Chart and ChartLine classes: positionXAxis and positionYAxis were supposed to accept negative values, but such values were explicitly blocked by their implementation.
Fixed a typo in the documentation of the "preventCrossWindowShare" parameter of "enableSharing".
Fixed the fade effect on IE<=8 for cases where the end color is "transparent": in these cases the fade effect will not be applied and a discrete switch will occur (previously there was no change at all and the starting color was left).
Fixed the "inherited methods" section of the JSDocs: some methods were missing, others were pointing to the wrong location. Also improved the readability of such list.
Fixed a bug that, under rare circumstances, could have triggered a non-strict loop of requests for the xhr.html file.
Added the error code 30 in onServerError; the case is only predisposed for future special licenses.COMPATIBILITY NOTE: custom clients which check the possible error outcomes don't have to be updated, as long as there is no change in license terms.
Extended the sendMessage with a new flag that permits to queue messages while the Client is offline.
Renamed the setRetryTimeout and getRetryTimeout methods into setRetryDelay and getRetryDelay. The old names are kept as aliases to mantain backward compatibility with previously written code. The behavior of the associated value is also changed: while the delay was previously started from the failure of the connection, it is now calculated from the start of the connection, thus absorbing any round-trip or timeout between the start of the connection and its failure.
Introduced the setFirstRetryMaxDelay and getFirstRetryMaxDelay settings. The actual delay is a randomized value between 0 and the value set on the property associated with the new methods. The randomization might help avoid a load spike on the cluster due to simultaneous reconnections, should one of the active servers be stopped. Previous versions of the SDK library had an hardcoded 0 value for this setting, the new 100ms default value should not introduce a noticeable difference.
Fixed the management of invalid key values when two-level push is active.
Now an invalid key no longer causes the session to fail, but only a notification
to onCommandSecondLevelSubscriptionError with the new code 14 is issued.
Fixed the documentation of two-level push, to specify the implicit conditions
that determine the (unlikely) cases in which a key value is invalid.
Fixed an error in the obfuscation process which, under rare circumstances, could have caused a "OpenAjax is not defined" exception.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there. Example code for normal html pages should also be found on GitHub; the source code of the preinstalled welcome page is no longer meant as a reference.
Introduced the new setHttpExtraHeadersOnSessionCreationOnly/isHttpExtraHeadersOnSessionCreationOnly in the the ConnectionOptions class. Unlike with setHttpExtraHeaders, extra http headers will not be sent on all connections, but only during session creation; this still ensures that the headers will reach notifyUser and does not disable WebSocket connections.
Introduced the support for io.js.
Fixed a bug that might have occasionally caused an error to be shown on the browser console (the text of the error was: 'Uncaught Executor error time: NaN').
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license file that supports Web Client SDK up to version 6.1 or earlier, clients based on this new version will not be accepted by the Server.
Introduced the new setHttpExtraHeaders/getHttpExtraHeaders in the the ConnectionOptions class. It is now possible to add extra http headers to the requests sent to Lightstreamer Server. NOTE: Setting a non null value for this setting disables WebSockets.
Improved compatibility with redirect-based authentication mode used by some proxies.
Fixed a bug in the autoscroll behavior of the DynaGrid class: it was adhering to the documentation only if listening to a DISTINCT Subscription.
Fixed a bug affecting IE8: if many Subscriptions were subscribed/unsubscribed to the LightstreamerClient in a strict loop a "Stack overflow at line: 0" error might have been generated.
Fixed an incompatibility with phonegap applications running on Windows Phone 8.
Fixed a bug affecting Chrome, and potentially other browsers, that prevented the SDK library from working correctly if, depending on the case, "Block sites from setting any data" or "Block third-party cookies and site data" was selected on the Content settings.
Fixed a bug introduced on version 6 that might have prevented the SDK library to behave correctly if Websockets were not used (because of configuration or network/browser/intermediaries capabilities) and a load balancer using cookie stickiness was placed between the Client and the servers.
Fixed an issue with Chrome 33 and greater, where a harmless request for a page named "null" was performed to the web server.
Fixed an issue, introduced on version 6.1, with the Rekonq browser, that prevented the SDK library from correctly starting up.
Fixed a bug that in rare cases could have prevented the recovery of a shared connection in case of closure of the "master" Client.
Fixed an issue with Node.js on Linux that was observed in particular scenarios and, in these cases, prevented the connection.
Removed the need of cookie usage in most situations.
Added a onClearSnapshot callback to the SubscriptionListener. The callback will be invoked upon a corresponding invocation of "clearSnapshot" on the Adapter side for one of the subscribed items (provided that the Subscription is for DISTINCT or COMMAND mode) with the request to accomplish the specified action. Note that the "clearSnapshot" invocation is not available for Servers lower than version 6.0. COMPATIBILITY NOTE: Existing code will keep working as long as, on the Adapter side, "clearSnapshot" is not used for items in DISTINCT or COMMAND mode; otherwise, the item state on the Client may become inconsistent, hence implementing the new callback would be mandatory.
Added a default handling of the onClearSnapshot event in the AbstractGrid class
that's thus reflected on subclasses:
All the rows/charts associated to an item receiveng the onClearSnapshot event are
removed from the widget.
Fixed a bug that in rare cases could have made the Client send wrong-composed requests to Lightstreamer Server. The bug had two effects, none of which caused any actual issue: the Client may have sent extra useless requests; in response to such requests the Server would have logged error messages in the log.
Fixed a bug that prevented the correct execution of VisualUpdate.setCellValue calls having null as second parameter.
Expand the ConnectionOptions.setForcedTransport method to accept "HTTP" and "WS" values. These new values force the Client to only use the related transport without forcing it into using a fixed connection method (i.e.: POLLING or STREAMING).
Fix a bug on the StaticGrid. Once sorted it may have routed updates to the wrong rows.
Extended the Chart implementation to accept nulls as chart values. Nulls have now special meanings: a single null (either on the X or Y axis) will make the Chart ignore the update, a double null (on both the X and Y axis) will clear the involved ChartLine. COMPATIBILITY NOTE: existing code will keep working as long as the rule imposing to only feed the Chart with valid numbers was respected. If not it is possible to leverage parsers for the Chart.setXAxis and Chart.addYAxis methods to prevent nulls to reach the internal Chart engine.
Improved Node.js compatibility.
Revised the directory structure of the included examples.
Clarified the license terms for the included example source code.
Incremented the minor version number. COMPATIBILITY NOTE: If running Lightstreamer Server with a license file that supports Web Client SDK up to version 6.0 or earlier, clients based on this new version will not be accepted by the Server.
Improved the Chart class: now charts are printed using the <canvas> element. If <canvas> is not available the SDK library will switch to the previous behavior.
Fixed an issue that may crash IE7 in case the SDK library needs to fallback to the "Unoptimized HTTP Polling".
Improved compatibility between Opera and the "Unoptimized HTTP Polling".
Fixed a bug on the StaticGrid class: if the grid was bound to a COMMAND or DISTINCT Subscription and there were more cells bound to the same field then the grid would have stopped showing updates on the HTML after a clean or scroll operation.
Fixed a bug introduced on build 1595: UNORDERED messages may have been repeated if the session connection was "Unoptimized Polling over HTTP" (see http://goo.gl/kwREX for reference).
Removed a potential memory leak: the disposal of a LightstreamerClient instance was leaving some resources behind.
Fixed generator.html to work on browsers when/where the console instance is not available.
Introduced a better handling of proxies that can forward the WebSocket handshake but can't properly handle the open WebSocket.
Fixed an issue with Firefox that might have caused a reconnection attempt to hang for many seconds after Lightstreamer Server had been unavailable for a while.
Fixed handling of string parameters entered in the ConnectionDetails and ConnectionOptions objects: a parameter supposed to be a string may have been mistakenly parsed as a number resulting in heading 0 and . to be removed.
Improved style of the StatusWidget appearance by replacing any globally set BackgroundColor with a transparent one.
Added some missing [optional] flags to the documentation.
Fixed a bug in the Subscription class: when used in COMMAND mode, the "key" field of a "row" might have been mistakenly empty if such "row" was removed (via a DELETE command) and then added again (via an ADD command) by the adapter.
Fixed a bug in the ItemUpdate.isValueChanged method: when used against a second-level field an erroneous true was returned.
Removed a 100/200 ms delay on subscriptions and messages that was erroneously introduced client-side. In case of file:/// executions the delay may also have been suffered during the dequeuing of received updates.
Improved send message performances.
Improved fallback mechanisms for Android stock browser.
Extended the supplied Monitor Demo with the newly available message-related statistics.
Added an example of integration with the Dojo libraries. Actually the example is hosted on GitHub and only a link is provided.
Included in the Client Guide document notes on how to configure the RequireJS optimization tool for use with a code including the JavaScript Client SDK library.
Introduced the new JavaScript Client SDK, which replaces the old HTML Client SDK with a brand new, fully redesigned, API and extended features, including:
See the included documentation for any details.
The HTML Client SDK library shipped with the previous versions of Lightstreamer is still
supported by Lightstreamer Server since Server version 4.0.
Check for newer versions on npm.
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Fixed a bug which could have caused the client to ignore a call to LightstreamerClient.disconnect, when it was invoked while the client was reconnecting, that is, when LightstreamerClient.getStatus was equal to DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY.
Fixed a bug which could have caused the ClientListener.onStatusChange callback to notify the status DISCONNECTED:WILL-RETRY as the first status instead of CONNECTING. The anomaly could be triggered by invoking LightstreamerClient.disconnect while the client was trying to recover the session, and then invoking LightstreamerClient.connect.
Fixed a bug which could have caused the client to disconnect abruptly when the server signaled a harmless error message.
Revised and improved the layout of the jsdocs.
Modified the project name on npm from lightstreamer-client to lightstreamer-client-node.
Moreover, the library is now open source, available on github at the following address:
https://github.com/Lightstreamer/Lightstreamer-lib-client-javascript.
Hence, the non-minified version of the library is also provided.
The way the deliverables are provided has also changed:
the library module name is now "lightstreamer-client-node" for the
non-minified version and "lightstreamer-client-node/lightstreamer-node.min"
for the minified version. See the instructions on the npm page for details.
COMPATIBILITY NOTE: If upgrading an existing
application (by changing the package.json file), the library module name to be
specified in require() is no longer "lightstreamer-client" and should be modified
to refer to the minified version. Referring to the non-minified version is also
possible, but then the application startup may become slower.
Improved the communication with the Server by adopting the public TLCP protocol. Moreover, the internal protocol based on javascript commands is no longer used; hence, the "eval" function is no longer invoked within the library.
Added the support for TypeScript through the declaration file types.d.ts.
Discontinued the support for React Native, which is now provided by the Web Client SDK 8.0.0.
Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported.
Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and its changes during subscription life. See the docs for details and special cases.
Fixed a bug introduced with the session recovery mechanism, which, under certain conditions, could have caused the client to ignore the setForcedTransport setting after a recovery attempt, even a successful one.
Removed a spurious notification of the DISCONNECTED:WILL-RETRY state that could occur when invoking connect() after receiving an invocation of onServerError(). The bug was harmless.
Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).
Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Added new error codes 66 and 68 to onServerError, onSubscriptionError, and
onSecondLevelSubscriptionError, to report server-side issues; previously,
upon such problems, the connection was just interrupted.
Added new error code 61 to onServerError, to report unexpected client-side issues;
previously, upon such problems, the connection was just interrupted.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError
documentation; when a subscription request cannot find the session,
the session is just closed and replaced immediately.
By-passed the "retry delay" setting when recovering from a closed session. This may speedup the recovery process.
Clarified in the docs the role of the delayTimeout in sendMessage.
Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables Node.js Client SDK up to version 7.3 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Fixed an annoying formatting issue in the jsdoc page for ConnectionOptions.
Fixed a bug causing the conversion into numbers of user-supplied string parameters (e.g. in settings in ConnectionDetails and ConnectionOptions) which can be interpreted as numbers. For example a user name of the form '1e2' could have been converted into the number 100, then used as the string '100'.
Fixed several bugs in the session recovery mechanism:
Fixed a bug due to a race condition between a subscribe and a concurrent disconnect, which could have caused the subscription to be skipped upon a subsequent connect.
Modified the implementation of connect() when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect() first.
Modified in a similar way the implementation of setForcedTransport(); when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is "RetryDelay", which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the "ConnectTimeout" and "CurrentConnectTimeout" properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can still be inspected through
getCurrentConnectTimeout, but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect() and then connect().
As a result of the change, methods setConnectTimeout, getConnectTimeout and setCurrentConnectTimeout
of ConnectionOptions have been deprecated, as the setters have no effect and the getter
is now equivalent to getRetryDelay.
Also changed the default value of the "RetryDelay" property from 2 seconds to 4 seconds.
Changed the default value of the "EarlyWSOpenEnabled" property from true to false (see ConnectionOptions.setEarlyWSOpenEnabled). This removes a potential incompatibility with cookie-based Load Balancers, at the expense of a possible slight delay in session startup.
Changed the default value of the "SlowingEnabled" property from true to false (see ConnectionOptions.setSlowingEnabled).
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables Node.js Client SDK up to version 7.2 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a harmless bug, introduced in the previous version, which could have caused a Server warning for "duplicated LS_session" on some client requests.
Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Fixed a race condition, mostly possible while a session recovery was being attempted, which could have caused the delay of subscription requests due to a wrong request to the Server.
Addressed a particular case of session interruption that was still not supported by the session recovery feature.
Added the error code 21 in onServerError, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke onServerError and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action. Likewise, added the error code 11 in onSubscriptionError and onCommandSecondLevelSubscriptionError, that can be received instead of code 20, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. COMPATIBILITY NOTE: Existing applications which handle error code 20, should ensure that the new error code 11 is also handled properly.
Fixed a severe bug in the recently introduced session recovery mechanism, by which, after the creation of a new session because of network issues, it was possible that subsequent successful session recovery would cause data loss.
Fixed a bug in the recently introduced session recovery mechanism, which, upon particular kinds of network issues and if the creation of a new session had been necessary, could have caused the client to skip the resuming of the active subscriptions.
Fixed an annoying typo in the documentation of onStatusChange regarding the "DISCONNECTED:TRYING-RECOVERY" status.
Improved the library log by splitting the "lightstreamer.subscriptions" category in three, with the introduction of "lightstreamer.messages" and "lightstreamer.requests". See setLoggerProvider in LightstreamerClient for details. COMPATIBILITY NOTE: Existing code that collects log from the "lightstreamer.subscriptions" category should be ported. This obviously is not expected to affect production code.
Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches on mobile phones.
Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.
Fixed a race condition, introduced in the previous build 1737, which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.
Improved the notification of closed sessions to the Server.
Changed the internal folder from sdk_client_node_unified to sdk_client_node.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY,
to inform the application when a recovery attempt is being performed; hence,
onStatusChange and getStatus can provide the new status.
COMPATIBILITY NOTE: Existing code that uses the status
names received via onStatusChange or getStatus may have to be aligned.
Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval"
property. Now, it will also allow the Server to detect when a client has abandoned
a session although the socket remains open.
Fixed a bug on sending reverse heartbeats to the Server, which, sometimes, could
have caused the Server to report a syntax error.
Added the new Server error code 71 to onServerError and clarified the difference with error code 60.
Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.
Improved subscription requests on WebSockets by removing unnecessary parts.
Aligned the documentation to comply with current licensing policies.
Removed all the occurrences of the deprecated "with" statement, erroneously reintroduced in version 7.1.0.
Ensured source compatibility with React Native up to version 0.49.
Fixed the recently added support for cookie handling on WebSocket connections, to be fully compliant in the determination of outgoing cookies.
Added static methods addCookies and getCookies to LightstreamerClient, to simplify the sharing of cookies between Server connections operated by the SDK library and the rest of the application.
Improved the handling of cookies, by adding support of the WebSocket case.
Now, the invocation of setCookieHandlingRequired(true) no longer causes the
library to keep from using WebSockets.
Clarified in the docs for setHttpExtraHeaders how custom cookies can be set
and inquired, which is also how cookies set by other sites can be supplied.
Added the error code 60 to "onServerError", to report cases in which the Server license does not allow the client version.
Fixed a bug on the recovery of control requests upon session close and replacement, which, through a rare race condition, could have caused the block of all subsequent control requests.
Removed all the occurrences of the deprecated "with" statement in order to ensure Javascript strict mode compatibility.
Fixed a bug which caused the invocations to the "setReconnectTimeout" method in ConnectionOptions to be ignored.
Removed the polyfill of the Promise, which is no longer needed, yet it might have caused compatibility issues in some environments.
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug introduced in version 6.1 which prevented the "slowing algorithm" (see setSlowingEnabled) from working.
Fixed the handling of wrong calls to getFields and getFieldSchema on Subscription. In some cases, an exception different from the IllegalStateException was thrown.
Fixed the log produced by the library, as, between the window name (when available) and the timestamp a space was missing.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Revised the documentation of possible subscription error codes.
Added clarification details in the documentation of setCookieHandlingRequired.
Introduced the new Node.js SDK. See the "sdk_client_nodejs_unified" folder.
Previously, the Node.js library was available as part of the SDK for JavaScript Clients,
now called SDK for Web Clients (Unified API).
Note that the library was released in two different versions: as a "flavour" of the
JavaScript Client Library and through the npm service. This SDK only refers to the library
deployed via npm. However, currently, the use of the Web (Unified API) Client Library in the
Node.js flavour, which is based on AMD, is not recommended.
The Client Library has the same characteristics of the library in the current
SDK for Web Clients (Unified API) version 7.0.2 and you can refer to that SDK for the
changelog with respect to previous versions (although some topics in that changelog,
obviously, don't pertain to Node.js), with the following additions:
Added in the SDK folder the resources of the Web SDK library to be included (version 7.2.0 build 1777). In fact, the newest versions of the Web SDK library no longer support the Flash SDK.
Aligned the documentation to notify the discontinuation of support by Web Client SDK since 8.0.
Aligned the documentation to comply with current licensing policies.
Updated obsolete names in the signature of the SDK and some included files.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Added a onClearSnapshot callback to the FlashTable. The callback will be invoked upon a corresponding invocation of "clearSnapshot" on the Adapter side for one of the items in the table (provided that they are subscribed to in DISTINCT or COMMAND mode) with the request to accomplish the specified action. COMPATIBILITY NOTE: Existing code will keep working as long as, on the Adapter side, "clearSnapshot" is not used for items in DISTINCT or COMMAND mode; otherwise, the item state on the Client may become inconsistent, hence implementing the new callback would be mandatory.
Revised the directory structure of the included examples.
Clarified the license terms for the included example source code.
Ensured compatibility with the new JavaScript Client SDK.
Ported the included demos to the new JavaScript Client SDK library.
Note that the "commons" directory is no longer used to bring configuration code and
imported JavaScript library code, which is now all included in the demo directory.
Removed the "javascript bridge" part of the SDK library, lsflashbridge.js, which is no longer needed with the new JavaScript Client SDK library. This also removes the strict dependency of each library build from a specific build of the underlying library, which was the case with the old HTML Client SDK library.
Changed the behavior of the onStatusChange callback; as a consequence of the required change of the underlying Client SDK library, the callback now returns new status indicators. COMPATIBILITY NOTE: existing code making use of the values returned by the onStatusChange callback should be wholly revised, by referring to the new behavior.
Simplified the SDK library deployment, by removing the version-reporting files.
Ported to the current HTML Client SDK library build.
Ported to the current HTML Client SDK library build.
Rebuilt the included StockList demo; the demo binaries have reduced significantly.
Ported to the current HTML Client SDK library build.
Ported to the current HTML Client SDK library build.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Aligned the documentation to comply with current licensing policies.
Fixed the documentation of the Table classes, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Fixed a bug in the protocol layer regarding the interpretation of some kind of ERROR messages. In case one of such error messages was received the Client was unable to forward them to the application layer.
Used Flex 4 SDK to build the SDK library.
Improved the layout of the included examples.
Clarified the license terms for the included example source code.
Fixed a bug in the management of non-ascii and control characters in field values; for particular values, the bug could also cause nearby characters to be affected.
Dropped the support for Flex 3. Flex 4 or later is now required. COMPATIBILITY NOTE: existing clients compiled against Flex 3 have to be ported to Flex 4 or higher version.
Improved the robustness in case of connection problems.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Aligned the documentation to comply with current licensing policies.
Fixed a bug that prevented the use of very long (> 2^15) custom strings (for instance: for item groups, fields schemas or user names), by causing exceptions to be thrown.
Fixed a bug that, under rare circumstances, could have prevented the success of the session rebind procedure performed by the Library, causing the session to hang and eventually close.
Fixed a bug that could have prevented the natural termination of the process
when Lightstreamer Server happened to be unresponsive.
Fixed a bug that, upon session close, could have allowed the process to terminate
naturally, without invoking the application's OnClose (which, instead, should have
been given an opportunity to prevent termination).
Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Modified the SDK versioning, which now differs from the internal dll versioning.
Discontinued the compatibility with the previous version of the Server.
Introduced the ChangeSubscription method, which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription; this also introduces a new error code in PushServerException.
Fixed the handling of mocked calls to UnsubscribeTable when a batch is in place.
Fixed a bug which prevented the ForceUnsubscribeTable method from working. This method was provided only as a help for particular cases of error recovery.
Fixed a memory leak that could have caused a zombie thread to be left after an unsuccessful attempt of connecting to Lightstreamer Server; if the Server had been unreachable for long time for any reason and a loop of attempts had been performed, the leak could have become significant.
Fixed a potential bug that may have occurred after a SendMessage call, causing an ObjectDisposedException to be internally issued.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Check for newer versions on CocoaPods.
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Updated documentation of LSMPNDevice
and event mpnDeviceDidResume:
of
LSMPNDeviceDelegate
to reflect changes on Server version 7.1. In particular,
a suspended MPN device now is resumed at the first subsequent registration (a token change
is no more required).
COMPATIBILITY NOTE: If upgrading the SDK and keeping
Server version 7.0, some parts of the documentation will become slightly incorrect,
but the application will work exactly as before.
Note: this documentation change was already included by mistake since version 4.1.0 of this SDK.
Reduced reconnection time in case the browser detects the online status.
Fixed a bug causing sessionId
of LSConnectionDetails
to return nil notwithstanding the connection status was CONNECTED:STREAM-SENSING.
Fixed a bug affecting the various callbacks that report custom error codes and error messages received from the Server (originated by the Metadata Adapter). The message reported could have been in a percent-encoded form.
By-passed the retryDelay
setting when recovering from a closed session.
This may speedup the recovery process.
Clarified in the docs the role of delayTimeout
in
sendMessage:withSequence:timeout:delegate:enqueueWhileDisconnected
.
Fixed typos in the docs of MPN-related methods.
Fixed a bug which caused an exception when the server sent an invalid
item name in two-level subscriptions instead of triggering the listener
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
of LSSubscriptionDelegate
with the error code 14 (Invalid second-level
item name).
Fixed a bug affecting polling sessions, which, upon a connection
issue, could have caused the session to be interrupted by issuing
client:didReceiveServerError:withMessage:
, instead of being
automatically recovered.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables iOS Client SDK up to version 4.1 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed race condition that under rare circumstances could have caused a crash when closing a connection that was actively receiving data.
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is retryDelay
, which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the connectTimeout
and currentConnectTimeout
properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can be inspected through currentConnectTimeout
,
but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect
> and then connect
.
As a result of the change, properties connectTimeout
and currentConnectTimeout
of LSConnectionOptions
have been deprecated, as the setters have no effect and the getter
is now equivalent to retryDelay
.
Also changed the default value of the retryDelay
property from 2 seconds to 4 seconds.
Modified the implementation of connect
when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect first.
Modified in a similar way the implementation of forcedTransport
property when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Fixed a bug triggered by a call to connect
or a change to forcedTransport
issued while the client
was attempting the recovery of the current session. This caused the recovery to fail,
but, then, the library might not reissue the current subscriptions on the newly created session.
Fixed a bug that could have caused session recovery to fail if preceded by a previous successful session recovery on the same session by more than a few seconds.
Changed the default value of the earlyWSOpenEnabled
property from YES
to NO
.
This removes a potential incompatibility with cookie-based Load Balancers,
at the expense of a possible slight delay in session startup.
Changed the default value of the slowingEnabled
property from YES
to NO
.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables iOS Client SDK up to version 4.0 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a race condition that could lead the client to stop trying to reconnect to the server after a network disconnection or a server restart. This bug has been reported only when running on the Simulator, but could happen also on the device.
Fixed a bug causing a fatal error when the client recreated a session because of a network error and there were active MPN subscriptions.
Fixed a bug causing the client to ignore the sessionRecoveryTimeout
when in state STALLED.
Fixed a bug causing the closing of the session when the user made a copy
of a triggered LSMPNSubscription
(with the copy constructor
initWithMPNSubscription:
) and then subscribed the copy.
Fixed reference cycles that could lead to memory leaks while trying to connect for extended periods of time or, once connected, when subscribing and unsubscribing multiple times.
Introduced a maximum time on attempts to recover the current session, after which
a new session will be opened. The default is 15 seconds, but it can be customized
with the newly added sessionRecoveryTimeout
property in LSConnectionOptions
.
This fixes a potential case of permanently unsuccessful recovery, if the
<control_link_address> setting were leveraged in a Server cluster and a Server
instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.
Fixed a bug affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.
Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.
Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues
Added the error code 21 in client:didReceiveServerError:withMessage:
,
that can be received upon some failed requests, to inform that not only the current
session was not found but it is also likely that the request was routed to the wrong
Server instance. Previously, in the same cases, the SDK library would not invoke
client:didReceiveServerError:withMessage:
and would open a new session instead.
COMPATIBILITY NOTE: If using an existing application, you should
check how it would handle the new (and unexpected) error code. A reconnection attempt would
ensure the previous behavior, although this is no longer the suggested action.
Modified the default value of the retryDelay
property from 5 to 2 seconds.
This should help recovering from network outages of a few seconds, typical, for
instance, of wifi/mobile network switches.
Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout
expires, an attempt to recover the current session will be performed first.
Fixed a bug, introduced in version 3.0.0, which could have caused the property snapshot
of LSItemUpdate
to behave wrongly on subscriptions in which the snapshot
was not requested.
Fixed a bug introduced with version 3.0.0 preventing the connection when the Server configuration specifies a control-link address.
Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.
Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.
Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.
Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.
Fixed the instructions provided in the documentation of notificationFormat
property of the LSMPNSubscription
class.
Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.
Added clarifications on licensing matters in the docs.
Changed the internal folder from sdk_client_ios_unified to sdk_client_ios.
Introduced the support for Mobile Push Notifications. It consists in
new methods in the LSLightstreamerClient
class together with new dedicated
classes. See the API documentation for details.
An MPN subscription is backed by a real-time subscription, from which it may take
any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent:
they survive the session and are identified by a permanent, global, unique key provided
by the Server at time of activation.
The notifications are managed by third-party services supported by the Server,
which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications
by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY,
to inform the application when a recovery attempt is being performed; hence,
client:didChangeStatus:
event and the client:didChangeStatus:
or
Extended the reverse heartbeat mechanism, governed by the reverseHeartbeatInterval
property. Now, it will also allow the Server to detect when a client has abandoned
a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0,
setting a value for the reverseHeartbeatInterval
property could have even
caused the connection interruption.
Added the new Server error code 71 to client:didReceiveServerError:withMessage:
and clarified the difference with error code 60.
Fixed a bug that, when under certain circumstances the server is unreachable,
caused the client to enter in a tight reconnection loop ignoring the parameter retryDelay
property of LSConnectionOptions
.
Fixed a bug, introduced in version 3, affecting the case of session establishment
refusal by the Metadata Adapter (through a CreditsException) and the case of forced
destroy (via external requests), when a negative custom error code was supplied.
The subsequent invocation to client:didReceiveServerError:withMessage:
would carry code 61 (internal error) instead of the specified custom code.
Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.
Fixed the documentation of serverSocketName
property, whose behavior has slightly
changed since version 3.0.0.
Fixed the documentation of the contentLength
, keepaliveInterval
,
and reverseHeartbeatInterval
properties of LSConnectionOptions
,
to clarify that a zero value is not allowed in the first and it is allowed in the others.
Aligned the documentation to comply with current licensing policies.
Fixed bug that could have caused a streaming connection to stall if the client was under heavy activity.
Fixed minor memory leak in WebSocket connection opening.
Confirmed and published with no changes since beta prerelease.
Introduced the use of WebSockets both for streaming and for subscription
and client message requests, which brings an overall performance improvement.
As a consequence, forcedTransport
now also supports the "WS", "WS-STREAMING",
and "WS-POLLING" values and the predisposed earlyWSOpenEnabled
property
is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in
the distribution.
Added static methods addCookies:forURL:
and getCookiesForURL:
in LSLightstreamerClient, to allow for cookie sharing with the rest of the application
when a local cookie store is being used.
Replaced the maxBandwidth
property of LSConnectionOptions with two
distinct properties: requestedMaxBandwidth
and the read-only realMaxBandwidth
,
so that the setting is made with the former, while the value applied by
the Server is only reported by the latter, now including changes during session
life. The extension affects the property names and also the invocations
of client:didChangeProperty:
on the LSClientDelegate (see the docs for details).
COMPATIBILITY NOTE: Custom code using maxBandwidth
in any of the mentioned forms has to be ported and recompiled. If the property
is not used in any form, existing compiled code can still run against the new
library.
Introduced a new callback, subscription:didReceiveRealFrequency:
,
to the LSSubscriptionDelegate, to report the frequency constraint on the subscription as
determined by the Server and their changes during subscription life. See the docs for details
and special cases.
COMPATIBILITY NOTE: Custom code has to be ported,
by implementing the new method, and recompiled. Existing compiled code should
still run against the new library: invocations to subscription:didReceiveRealFrequency:
to the custom delegate would simply be ignored.
Introduced a new property, clientIp
, in LSConnectionDetails;
it is a read-only property with the keyword for client:didChangeProperty:
(see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
fieldSchema
in LSSubscription now also working for COMMAND mode subscriptions;slowingEnabled
in LSConnectionOptions now working if YES is supplied;subscription:didClearSnapshotForItemName:itemPos:
in the LSSubscriptionDelegate now invoked as expected.Fixed the nullability annotations for the following methods and properties:
client:didReceiveServerError:withMessage:
client:didDenyMessage:withCode:error:
setLoggerProvider:
commandSecondLevelFields
commandSecondLevelFieldSchema
fields
fieldSchema
itemGroup
items
COMPATIBILITY NOTE: Existing code written in Swift may no longer compile and should be aligned with the new signatures. No issues are expected for existing Objective-C code.
Revised the sendMessage
implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a delegate is not provided.
Revised sendMessage
to accept 0 as a legal value for the delayTimeout
argument;
negative values will now be accepted to mean that the Server default timeout is to be used.
COMPATIBILITY NOTE: Existing code using the 5-argument
version of sendMessage
and supplying 0 as delayTimeout
must be modified to use
-1 instead. Invocations to the 1-argument version don't have to be modified.
Fixed a bug which affected any unsubscription request issued so early
that the corresponding subscription request had not been completed yet.
Such unsubscription could have caused subscription:didFailWithErrorCode:message:
with code 19
and the item would have been left subscribed to by the session on the Server,
yet considered not subscribed to by the library.
Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.
Improved the management of retries upon unsuccessful control requests.
Slightly delayed the availability of the serverSocketName
property of
LSConnectionDetails, which was already valued upon session start.
COMPATIBILITY NOTE: Custom code using
serverSocketName
right after a session start, should ensure that
client:didChangeProperty:
for serverSocketName
gets invoked first.
Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Improved the management of HTTPExtraHeadersOnSessionCreationOnly
, when YES.
Previously, the extra headers (supplied with HTTPExtraHeaders
) were still
sent, redundantly, on control requests.
Fully revised the documentation to be more readable from Xcode preview.
Also switched to Appledoc for the generation of API docsets, for improved
readability and conformance with other SDKs documentation.
Added new error codes 66 and 68 to client:didReceiveServerError:withMessage:
,
subscription:didFailWithErrorCode:message:
, and
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
,
to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to client:didReceiveServerError:withMessage:
documentation;
this error reports server-side licensing limitations.
Removed error code 20 from subscription:didFailWithErrorCode:message:
and
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
documentation; when a subscription request cannot find the session,
the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.
Clarified in the documentation the meaning of nil in requestedMaxFrequency
and requestedBufferSize
. Extended requestedMaxFrequency
to allow the setting
also when the subscription is "active" and the current value is nil.
Added the new setting limitExceptionsUse
in LSLightstreamerClient to
avoid throwing an exception when certain methods are called with an invalid parameter.
E.g. valueWithFieldName:
in LSItemUpdate and valueWithItemName:fieldName:
in LSSubscription both obey to this new setting. See API docs for more information.
Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Moved the LIB_NAME
and LIB_VERSION
methods of LSLightstreamerClient to
class properties. They can now be accessed with the dot notation. Previous class methods remain
available.
Fixed a bug on the implementation of disconnect
, whereby an ongoing loop
of connection attempt was not interrupted in case of Server down or wrong address.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Revised the default setting for the contentLength
property of LSConnectionOptions,
to allow the library to set it to the best value.
Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit
the number of sessions that can be concurrently open to the same Server. New properties are:
maxConcurrentSessionsPerServer
(a class property) and
maxConcurrentSessionsPerServerExceededPolicy
. See docs for more information.
Added new event to LSClientDelegate to respond to an authentication challenge raised during
network connection. New event is client:willSendRequestForAuthenticationChallenge:
.
See docs for more information.
Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.
Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos:
on
LSSubscriptionDelegate, which is only predisposed.
The client library is now distributed as a framework.
Raised the minimum iOS version requirements to 8.0.
Fixed a memory leak that could become significant with intense update activity.
Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
Included in Lightstreamer distribution package. See "sdk_client_ios_unified".
Added bitcode support.
Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.
Event client:didChangeProperty:
now reports correct iOS client
property names, e.g. "pollingTimeout" instead of "pollingMillis".
Fixed potential exception which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Prevented reconnection attempts upon wrong answers from the Server.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of client:didReceiveServerError:withMessage:
and client:didChangeStatus:
, to specify that the former
is always preceded, not followed, by the latter with DISCONNECTED.
Changed the type and behavior of connectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed over time) by the library itself. Note that "auto" is also the new default value. To check and or modify the current value a property is exposed: currentConnectTimeout. COMPATIBILITY NOTE: if the connectTimeout property is changed by the client code, the given parameter must be modified to be a String. If the connectTimeout property is accesses by the client code its receiving variable must be converted to an NSString; moreover it is likely that connectTimeout accesses should be replaced by currentConnectTimeout ones. See the docs for further details.
Introduced as an improved alternative to the SDK for iOS clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.
Check for newer versions on CocoaPods.
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Updated documentation of LSMPNDevice
and event mpnDeviceDidResume:
of
LSMPNDeviceDelegate
to reflect changes on Server version 7.1. In particular,
a suspended MPN device now is resumed at the first subsequent registration (a token change
is no more required).
COMPATIBILITY NOTE: If upgrading the SDK and keeping
Server version 7.0, some parts of the documentation will become slightly incorrect,
but the application will work exactly as before.
Note: this documentation change was already included by mistake since version 4.1.0 of this SDK.
Reduced reconnection time in case the browser detects the online status.
Fixed a bug causing sessionId
of LSConnectionDetails
to return nil notwithstanding the connection status was CONNECTED:STREAM-SENSING.
Fixed a bug affecting the various callbacks that report custom error codes and error messages received from the Server (originated by the Metadata Adapter). The message reported could have been in a percent-encoded form.
By-passed the retryDelay
setting when recovering from a closed session.
This may speedup the recovery process.
Clarified in the docs the role of delayTimeout
in
sendMessage:withSequence:timeout:delegate:enqueueWhileDisconnected
.
Fixed typos in the docs of MPN-related methods.
Fixed a bug which caused an exception when the server sent an invalid
item name in two-level subscriptions instead of triggering the listener
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
of LSSubscriptionDelegate
with the error code 14 (Invalid second-level
item name).
Fixed a bug affecting polling sessions, which, upon a connection
issue, could have caused the session to be interrupted by issuing
client:didReceiveServerError:withMessage:
, instead of being
automatically recovered.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables macOS Client SDK up to version 4.1 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed race condition that under rare circumstances could have caused a crash when closing a connection that was actively receiving data.
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is retryDelay
, which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the connectTimeout
and currentConnectTimeout
properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can be inspected through currentConnectTimeout
,
but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect
> and then connect
.
As a result of the change, properties connectTimeout
and currentConnectTimeout
of LSConnectionOptions
have been deprecated, as the setters have no effect and the getter
is now equivalent to retryDelay
.
Also changed the default value of the retryDelay
property from 2 seconds to 4 seconds.
Modified the implementation of connect
when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect first.
Modified in a similar way the implementation of forcedTransport
property when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Fixed a bug triggered by a call to connect
or a change to forcedTransport
issued while the client
was attempting the recovery of the current session. This caused the recovery to fail,
but, then, the library might not reissue the current subscriptions on the newly created session.
Fixed a bug that could have caused session recovery to fail if preceded by a previous successful session recovery on the same session by more than a few seconds.
Changed the default value of the earlyWSOpenEnabled
property from YES
to NO
.
This removes a potential incompatibility with cookie-based Load Balancers,
at the expense of a possible slight delay in session startup.
Changed the default value of the slowingEnabled
property from YES
to NO
.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables macOS Client SDK up to version 4.0 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a race condition that could lead the client to stop trying to reconnect to the server after a network disconnection or a server restart. This bug has been reported only when running on the Simulator, but could happen also on the device.
Fixed a bug causing a fatal error when the client recreated a session because of a network error and there were active MPN subscriptions.
Fixed a bug causing the client to ignore the sessionRecoveryTimeout
when in state STALLED.
Fixed a bug causing the closing of the session when the user made a copy
of a triggered LSMPNSubscription
(with the copy constructor
initWithMPNSubscription:
) and then subscribed the copy.
Fixed reference cycles that could lead to memory leaks while trying to connect for extended periods of time or, once connected, when subscribing and unsubscribing multiple times.
Raised minimum macOS version requirement to 10.10, from 10.9.
Introduced a maximum time on attempts to recover the current session, after which
a new session will be opened. The default is 15 seconds, but it can be customized
with the newly added sessionRecoveryTimeout
property in LSConnectionOptions
.
This fixes a potential case of permanently unsuccessful recovery, if the
<control_link_address> setting were leveraged in a Server cluster and a Server
instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.
Fixed a bug affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.
Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.
Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues
Added the error code 21 in client:didReceiveServerError:withMessage:
,
that can be received upon some failed requests, to inform that not only the current
session was not found but it is also likely that the request was routed to the wrong
Server instance. Previously, in the same cases, the SDK library would not invoke
client:didReceiveServerError:withMessage:
and would open a new session instead.
COMPATIBILITY NOTE: If using an existing application, you should
check how it would handle the new (and unexpected) error code. A reconnection attempt would
ensure the previous behavior, although this is no longer the suggested action.
Modified the default value of the retryDelay
property from 5 to 2 seconds.
This should help recovering from network outages of a few seconds, typical, for
instance, of wifi/mobile network switches.
Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout
expires, an attempt to recover the current session will be performed first.
Fixed a bug, introduced in version 3.0.0, which could have caused the property snapshot
of LSItemUpdate
to behave wrongly on subscriptions in which the snapshot
was not requested.
Fixed a bug introduced with version 3.0.0 preventing the connection when the Server configuration specifies a control-link address.
Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.
Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.
Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.
Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.
Fixed the instructions provided in the documentation of notificationFormat
property of the LSMPNSubscription
class.
Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.
Added clarifications on licensing matters in the docs.
Changed the internal folder from sdk_client_macos_unified to sdk_client_macos.
Introduced the support for Mobile Push Notifications. It consists in
new methods in the LSLightstreamerClient
class together with new dedicated
classes. See the API documentation for details.
An MPN subscription is backed by a real-time subscription, from which it may take
any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent:
they survive the session and are identified by a permanent, global, unique key provided
by the Server at time of activation.
The notifications are managed by third-party services supported by the Server,
which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications
by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY,
to inform the application when a recovery attempt is being performed; hence,
client:didChangeStatus:
event and the client:didChangeStatus:
or
Extended the reverse heartbeat mechanism, governed by the reverseHeartbeatInterval
property. Now, it will also allow the Server to detect when a client has abandoned
a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0,
setting a value for the reverseHeartbeatInterval
property could have even
caused the connection interruption.
Added the new Server error code 71 to client:didReceiveServerError:withMessage:
and clarified the difference with error code 60.
Fixed a bug that, when under certain circumstances the server is unreachable,
caused the client to enter in a tight reconnection loop ignoring the parameter retryDelay
property of LSConnectionOptions
.
Fixed a bug, introduced in version 3, affecting the case of session establishment
refusal by the Metadata Adapter (through a CreditsException) and the case of forced
destroy (via external requests), when a negative custom error code was supplied.
The subsequent invocation to client:didReceiveServerError:withMessage:
would carry code 61 (internal error) instead of the specified custom code.
Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.
Fixed the documentation of serverSocketName
property, whose behavior has slightly
changed since version 3.0.0.
Fixed the documentation of the contentLength
, keepaliveInterval
,
and reverseHeartbeatInterval
properties of LSConnectionOptions
,
to clarify that a zero value is not allowed in the first and it is allowed in the others.
Aligned the documentation to comply with current licensing policies.
Fixed bug that could have caused a streaming connection to stall if the client was under heavy activity.
Fixed minor memory leak in WebSocket connection opening.
Confirmed and published with no changes since beta prerelease.
Introduced the use of WebSockets both for streaming and for subscription
and client message requests, which brings an overall performance improvement.
As a consequence, forcedTransport
now also supports the "WS", "WS-STREAMING",
and "WS-POLLING" values and the predisposed earlyWSOpenEnabled
property
is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in
the distribution.
Added static methods addCookies:forURL:
and getCookiesForURL:
in LSLightstreamerClient, to allow for cookie sharing with the rest of the application
when a local cookie store is being used.
Replaced the maxBandwidth
property of LSConnectionOptions with two
distinct properties: requestedMaxBandwidth
and the read-only realMaxBandwidth
,
so that the setting is made with the former, while the value applied by
the Server is only reported by the latter, now including changes during session
life. The extension affects the property names and also the invocations
of client:didChangeProperty:
on the LSClientDelegate (see the docs for details).
COMPATIBILITY NOTE: Custom code using maxBandwidth
in any of the mentioned forms has to be ported and recompiled. If the property
is not used in any form, existing compiled code can still run against the new
library.
Introduced a new callback, subscription:didReceiveRealFrequency:
,
to the LSSubscriptionDelegate, to report the frequency constraint on the subscription as
determined by the Server and their changes during subscription life. See the docs for details
and special cases.
COMPATIBILITY NOTE: Custom code has to be ported,
by implementing the new method, and recompiled. Existing compiled code should
still run against the new library: invocations to subscription:didReceiveRealFrequency:
to the custom delegate would simply be ignored.
Introduced a new property, clientIp
, in LSConnectionDetails;
it is a read-only property with the keyword for client:didChangeProperty:
(see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
fieldSchema
in LSSubscription now also working for COMMAND mode subscriptions;slowingEnabled
in LSConnectionOptions now working if YES is supplied;subscription:didClearSnapshotForItemName:itemPos:
in the LSSubscriptionDelegate now invoked as expected.Fixed the nullability annotations for the following methods and properties:
client:didReceiveServerError:withMessage:
client:didDenyMessage:withCode:error:
setLoggerProvider:
commandSecondLevelFields
commandSecondLevelFieldSchema
fields
fieldSchema
itemGroup
items
COMPATIBILITY NOTE: Existing code written in Swift may no longer compile and should be aligned with the new signatures. No issues are expected for existing Objective-C code.
Revised the sendMessage
implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a delegate is not provided.
Revised sendMessage
to accept 0 as a legal value for the delayTimeout
argument;
negative values will now be accepted to mean that the Server default timeout is to be used.
COMPATIBILITY NOTE: Existing code using the 5-argument
version of sendMessage
and supplying 0 as delayTimeout
must be modified to use
-1 instead. Invocations to the 1-argument version don't have to be modified.
Fixed a bug which affected any unsubscription request issued so early
that the corresponding subscription request had not been completed yet.
Such unsubscription could have caused subscription:didFailWithErrorCode:message:
with code 19
and the item would have been left subscribed to by the session on the Server,
yet considered not subscribed to by the library.
Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.
Improved the management of retries upon unsuccessful control requests.
Slightly delayed the availability of the serverSocketName
property of
LSConnectionDetails, which was already valued upon session start.
COMPATIBILITY NOTE: Custom code using
serverSocketName
right after a session start, should ensure that
client:didChangeProperty:
for serverSocketName
gets invoked first.
Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Improved the management of HTTPExtraHeadersOnSessionCreationOnly
, when YES.
Previously, the extra headers (supplied with HTTPExtraHeaders
) were still
sent, redundantly, on control requests.
Fully revised the documentation to be more readable from Xcode preview.
Also switched to Appledoc for the generation of API docsets, for improved
readability and conformance with other SDKs documentation.
Added new error codes 66 and 68 to client:didReceiveServerError:withMessage:
,
subscription:didFailWithErrorCode:message:
, and
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
,
to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to client:didReceiveServerError:withMessage:
documentation;
this error reports server-side licensing limitations.
Removed error code 20 from subscription:didFailWithErrorCode:message:
and
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
documentation; when a subscription request cannot find the session,
the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.
Clarified in the documentation the meaning of nil in requestedMaxFrequency
and requestedBufferSize
. Extended requestedMaxFrequency
to allow the setting
also when the subscription is "active" and the current value is nil.
Aligned the LIB_NAME
property to "macos"; it was still valued as "osx".
Added the new setting limitExceptionsUse
in LSLightstreamerClient to
avoid throwing an exception when certain methods are called with an invalid parameter.
E.g. valueWithFieldName:
in LSItemUpdate and valueWithItemName:fieldName:
in LSSubscription both obey to this new setting. See API docs for more information.
Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Moved the LIB_NAME
and LIB_VERSION
methods of LSLightstreamerClient to
class properties. They can now be accessed with the dot notation. Previous class methods remain
available.
Fixed a bug on the implementation of disconnect
, whereby an ongoing loop
of connection attempt was not interrupted in case of Server down or wrong address.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Revised the default setting for the contentLength
property of LSConnectionOptions,
to allow the library to set it to the best value.
Renamed the SDK from "SDK for OS X Clients (Unified API Version)" to follow the renaming
of the operating system.
References to "OS X" or "Mac OS X" now changed to "macOS".
Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit
the number of sessions that can be concurrently open to the same Server. New properties are:
maxConcurrentSessionsPerServer
(a class property) and
maxConcurrentSessionsPerServerExceededPolicy
. See docs for more information.
Added new event to LSClientDelegate to respond to an authentication challenge raised during
network connection. New event is client:willSendRequestForAuthenticationChallenge:
.
See docs for more information.
Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.
Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos:
on
LSSubscriptionDelegate, which is only predisposed.
The client library is now distributed as a framework.
Raised the minimum macOS version requirements to 10.9.
Fixed a memory leak that could become significant with intense update activity.
Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
Included in Lightstreamer distribution package. See "sdk_client_os_x_unified" (now sdk_client_macos_unified).
Added bitcode support.
Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.
Event client:didChangeProperty:
now reports correct client
property names, e.g. "pollingTimeout" instead of "pollingMillis".
Fixed potential exception which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Prevented reconnection attempts upon wrong answers from the Server.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of client:didReceiveServerError:withMessage:
and client:didChangeStatus:
, to specify that the former
is always preceded, not followed, by the latter with DISCONNECTED.
Changed the type and behavior of connectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed over time) by the library itself. Note that "auto" is also the new default value. To check and or modify the current value a property is exposed: currentConnectTimeout. COMPATIBILITY NOTE: if the connectTimeout property is changed by the client code, the given parameter must be modified to be a String. If the connectTimeout property is accesses by the client code its receiving variable must be converted to an NSString; moreover it is likely that connectTimeout accesses should be replaced by currentConnectTimeout ones. See the docs for further details.
Introduced as an improved alternative to the SDK for OS X (now macOS) clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.
Check for newer versions on CocoaPods.
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Updated documentation of LSMPNDevice
and event mpnDeviceDidResume:
of
LSMPNDeviceDelegate
to reflect changes on Server version 7.1. In particular,
a suspended MPN device now is resumed at the first subsequent registration (a token change
is no more required).
COMPATIBILITY NOTE: If upgrading the SDK and keeping
Server version 7.0, some parts of the documentation will become slightly incorrect,
but the application will work exactly as before.
Note: this documentation change was already included by mistake since version 4.1.0 of this SDK.
Reduced reconnection time in case the browser detects the online status.
Fixed a bug causing sessionId
of LSConnectionDetails
to return nil notwithstanding the connection status was CONNECTED:STREAM-SENSING.
Fixed a bug affecting the various callbacks that report custom error codes and error messages received from the Server (originated by the Metadata Adapter). The message reported could have been in a percent-encoded form.
By-passed the retryDelay
setting when recovering from a closed session.
This may speedup the recovery process.
Clarified in the docs the role of delayTimeout
in
sendMessage:withSequence:timeout:delegate:enqueueWhileDisconnected
.
Fixed typos in the docs of MPN-related methods.
Fixed a bug which caused an exception when the server sent an invalid
item name in two-level subscriptions instead of triggering the listener
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
of LSSubscriptionDelegate
with the error code 14 (Invalid second-level
item name).
Fixed a bug affecting polling sessions, which, upon a connection
issue, could have caused the session to be interrupted by issuing
client:didReceiveServerError:withMessage:
, instead of being
automatically recovered.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables tvOS Client SDK up to version 4.1 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed race condition that under rare circumstances could have caused a crash when closing a connection that was actively receiving data.
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is retryDelay
, which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the connectTimeout
and currentConnectTimeout
properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can be inspected through currentConnectTimeout
,
but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect
> and then connect
.
As a result of the change, properties connectTimeout
and currentConnectTimeout
of LSConnectionOptions
have been deprecated, as the setters have no effect and the getter
is now equivalent to retryDelay
.
Also changed the default value of the retryDelay
property from 2 seconds to 4 seconds.
Modified the implementation of connect
when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect first.
Modified in a similar way the implementation of forcedTransport
property when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Fixed a bug triggered by a call to connect
or a change to forcedTransport
issued while the client
was attempting the recovery of the current session. This caused the recovery to fail,
but, then, the library might not reissue the current subscriptions on the newly created session.
Fixed a bug that could have caused session recovery to fail if preceded by a previous successful session recovery on the same session by more than a few seconds.
Changed the default value of the earlyWSOpenEnabled
property from YES
to NO
.
This removes a potential incompatibility with cookie-based Load Balancers,
at the expense of a possible slight delay in session startup.
Changed the default value of the slowingEnabled
property from YES
to NO
.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables tvOS Client SDK up to version 4.0 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a race condition that could lead the client to stop trying to reconnect to the server after a network disconnection or a server restart. This bug has been reported only when running on the Simulator, but could happen also on the device.
Fixed a bug causing a fatal error when the client recreated a session because of a network error and there were active MPN subscriptions.
Fixed a bug causing the client to ignore the sessionRecoveryTimeout
when in state STALLED.
Fixed a bug causing the closing of the session when the user made a copy
of a triggered LSMPNSubscription
(with the copy constructor
initWithMPNSubscription:
) and then subscribed the copy.
Fixed reference cycles that could lead to memory leaks while trying to connect for extended periods of time or, once connected, when subscribing and unsubscribing multiple times.
Introduced a maximum time on attempts to recover the current session, after which
a new session will be opened. The default is 15 seconds, but it can be customized
with the newly added sessionRecoveryTimeout
property in LSConnectionOptions
.
This fixes a potential case of permanently unsuccessful recovery, if the
<control_link_address> setting were leveraged in a Server cluster and a Server
instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.
Fixed a bug affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.
Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.
Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues
Added the error code 21 in client:didReceiveServerError:withMessage:
,
that can be received upon some failed requests, to inform that not only the current
session was not found but it is also likely that the request was routed to the wrong
Server instance. Previously, in the same cases, the SDK library would not invoke
client:didReceiveServerError:withMessage:
and would open a new session instead.
COMPATIBILITY NOTE: If using an existing application, you should
check how it would handle the new (and unexpected) error code. A reconnection attempt would
ensure the previous behavior, although this is no longer the suggested action.
Modified the default value of the retryDelay
property from 5 to 2 seconds.
This should help recovering from network outages of a few seconds, typical, for
instance, of wifi/mobile network switches.
Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout
expires, an attempt to recover the current session will be performed first.
Fixed a bug, introduced in version 3.0.0, which could have caused the property snapshot
of LSItemUpdate
to behave wrongly on subscriptions in which the snapshot
was not requested.
Fixed a bug introduced with version 3.0.0 preventing the connection when the Server configuration specifies a control-link address.
Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.
Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.
Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.
Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.
Fixed the instructions provided in the documentation of notificationFormat
property of the LSMPNSubscription
class.
Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.
Added clarifications on licensing matters in the docs.
Changed the internal folder from sdk_client_tvos_unified to sdk_client_tvos.
Introduced the support for Mobile Push Notifications. It consists in
new methods in the LSLightstreamerClient
class together with new dedicated
classes. See the API documentation for details.
An MPN subscription is backed by a real-time subscription, from which it may take
any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent:
they survive the session and are identified by a permanent, global, unique key provided
by the Server at time of activation.
The notifications are managed by third-party services supported by the Server,
which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications
by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY,
to inform the application when a recovery attempt is being performed; hence,
client:didChangeStatus:
event and the client:didChangeStatus:
or
Extended the reverse heartbeat mechanism, governed by the reverseHeartbeatInterval
property. Now, it will also allow the Server to detect when a client has abandoned
a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0,
setting a value for the reverseHeartbeatInterval
property could have even
caused the connection interruption.
Added the new Server error code 71 to client:didReceiveServerError:withMessage:
and clarified the difference with error code 60.
Fixed a bug that, when under certain circumstances the server is unreachable,
caused the client to enter in a tight reconnection loop ignoring the parameter retryDelay
property of LSConnectionOptions
.
Fixed a bug, introduced in version 3, affecting the case of session establishment
refusal by the Metadata Adapter (through a CreditsException) and the case of forced
destroy (via external requests), when a negative custom error code was supplied.
The subsequent invocation to client:didReceiveServerError:withMessage:
would carry code 61 (internal error) instead of the specified custom code.
Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.
Fixed the documentation of serverSocketName
property, whose behavior has slightly
changed since version 3.0.0.
Fixed the documentation of the contentLength
, keepaliveInterval
,
and reverseHeartbeatInterval
properties of LSConnectionOptions
,
to clarify that a zero value is not allowed in the first and it is allowed in the others.
Aligned the documentation to comply with current licensing policies.
Fixed bug that could have caused a streaming connection to stall if the client was under heavy activity.
Fixed minor memory leak in WebSocket connection opening.
Confirmed and published with no changes since beta prerelease.
Introduced the use of WebSockets both for streaming and for subscription
and client message requests, which brings an overall performance improvement.
As a consequence, forcedTransport
now also supports the "WS", "WS-STREAMING",
and "WS-POLLING" values and the predisposed earlyWSOpenEnabled
property
is now effective.
WebSocket support is provided by SocketRocket. Its license file is included in
the distribution.
Added static methods addCookies:forURL:
and getCookiesForURL:
in LSLightstreamerClient, to allow for cookie sharing with the rest of the application
when a local cookie store is being used.
Replaced the maxBandwidth
property of LSConnectionOptions with two
distinct properties: requestedMaxBandwidth
and the read-only realMaxBandwidth
,
so that the setting is made with the former, while the value applied by
the Server is only reported by the latter, now including changes during session
life. The extension affects the property names and also the invocations
of client:didChangeProperty:
on the LSClientDelegate (see the docs for details).
COMPATIBILITY NOTE: Custom code using maxBandwidth
in any of the mentioned forms has to be ported and recompiled. If the property
is not used in any form, existing compiled code can still run against the new
library.
Introduced a new callback, subscription:didReceiveRealFrequency:
,
to the LSSubscriptionDelegate, to report the frequency constraint on the subscription as
determined by the Server and their changes during subscription life. See the docs for details
and special cases.
COMPATIBILITY NOTE: Custom code has to be ported,
by implementing the new method, and recompiled. Existing compiled code should
still run against the new library: invocations to subscription:didReceiveRealFrequency:
to the custom delegate would simply be ignored.
Introduced a new property, clientIp
, in LSConnectionDetails;
it is a read-only property with the keyword for client:didChangeProperty:
(see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
fieldSchema
in LSSubscription now also working for COMMAND mode subscriptions;slowingEnabled
in LSConnectionOptions now working if YES is supplied;subscription:didClearSnapshotForItemName:itemPos:
in the LSSubscriptionDelegate now invoked as expected.Fixed the nullability annotations for the following methods and properties:
client:didReceiveServerError:withMessage:
client:didDenyMessage:withCode:error:
setLoggerProvider:
commandSecondLevelFields
commandSecondLevelFieldSchema
fields
fieldSchema
itemGroup
items
COMPATIBILITY NOTE: Existing code written in Swift may no longer compile and should be aligned with the new signatures. No issues are expected for existing Objective-C code.
Revised the sendMessage
implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a delegate is not provided.
Revised sendMessage
to accept 0 as a legal value for the delayTimeout
argument;
negative values will now be accepted to mean that the Server default timeout is to be used.
COMPATIBILITY NOTE: Existing code using the 5-argument
version of sendMessage
and supplying 0 as delayTimeout
must be modified to use
-1 instead. Invocations to the 1-argument version don't have to be modified.
Fixed a bug which affected any unsubscription request issued so early
that the corresponding subscription request had not been completed yet.
Such unsubscription could have caused subscription:didFailWithErrorCode:message:
with code 19
and the item would have been left subscribed to by the session on the Server,
yet considered not subscribed to by the library.
Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.
Improved the management of retries upon unsuccessful control requests.
Slightly delayed the availability of the serverSocketName
property of
LSConnectionDetails, which was already valued upon session start.
COMPATIBILITY NOTE: Custom code using
serverSocketName
right after a session start, should ensure that
client:didChangeProperty:
for serverSocketName
gets invoked first.
Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Improved the management of HTTPExtraHeadersOnSessionCreationOnly
, when YES.
Previously, the extra headers (supplied with HTTPExtraHeaders
) were still
sent, redundantly, on control requests.
Fully revised the documentation to be more readable from Xcode preview.
Also switched to Appledoc for the generation of API docsets, for improved
readability and conformance with other SDKs documentation.
Added new error codes 66 and 68 to client:didReceiveServerError:withMessage:
,
subscription:didFailWithErrorCode:message:
, and
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
,
to report server-side issues; previously, upon such problems, the connection was just interrupted.
Added missing error code 60 to client:didReceiveServerError:withMessage:
documentation;
this error reports server-side licensing limitations.
Removed error code 20 from subscription:didFailWithErrorCode:message:
and
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
documentation; when a subscription request cannot find the session,
the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.
Clarified in the documentation the meaning of nil in requestedMaxFrequency
and requestedBufferSize
. Extended requestedMaxFrequency
to allow the setting
also when the subscription is "active" and the current value is nil.
Added the new setting limitExceptionsUse
in LSLightstreamerClient to
avoid throwing an exception when certain methods are called with an invalid parameter.
E.g. valueWithFieldName:
in LSItemUpdate and valueWithItemName:fieldName:
in LSSubscription both obey to this new setting. See API docs for more information.
Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Moved the LIB_NAME
and LIB_VERSION
methods of LSLightstreamerClient to
class properties. They can now be accessed with the dot notation. Previous class methods remain
available.
Fixed a bug on the implementation of disconnect
, whereby an ongoing loop
of connection attempt was not interrupted in case of Server down or wrong address.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Revised the default setting for the contentLength
property of LSConnectionOptions,
to allow the library to set it to the best value.
Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit
the number of sessions that can be concurrently open to the same Server. New properties are:
maxConcurrentSessionsPerServer
(a class property) and
maxConcurrentSessionsPerServerExceededPolicy
. See docs for more information.
Added new event to LSClientDelegate to respond to an authentication challenge raised during
network connection. New event is client:willSendRequestForAuthenticationChallenge:
.
See docs for more information.
Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.
Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos:
on
LSSubscriptionDelegate, which is only predisposed.
The client library is now distributed as a framework.
Fixed the Server compatibility note for version 2.0.1 in this changelog, which was mistakenly brought back to 6.0.1.
Fixed a memory leak that could become significant with intense update activity.
Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
Included in Lightstreamer distribution.
The included library is very similar to that for the
iOS Client SDK (Unified API Version) 2.0.0 build 33.
See "sdk_client_tvos_unified".
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Updated documentation of LSMPNDevice
and event mpnDeviceDidResume:
of
LSMPNDeviceDelegate
to reflect changes on Server version 7.1. In particular,
a suspended MPN device now is resumed at the first subsequent registration (a token change
is no more required).
COMPATIBILITY NOTE: If upgrading the SDK and keeping
Server version 7.0, some parts of the documentation will become slightly incorrect,
but the application will work exactly as before.
Note: this documentation change was already included by mistake since version 4.1.0 of this SDK.
Fixed a bug causing sessionId
of LSConnectionDetails
to return nil notwithstanding the connection status was CONNECTED:STREAM-SENSING.
Fixed a bug affecting the various callbacks that report custom error codes and error messages received from the Server (originated by the Metadata Adapter). The message reported could have been in a percent-encoded form.
By-passed the retryDelay
setting when recovering from a closed session.
This may speedup the recovery process.
Clarified in the docs the role of delayTimeout
in
sendMessage:withSequence:timeout:delegate:enqueueWhileDisconnected
.
Fixed typos in the docs of MPN-related methods.
Fixed a bug which caused an exception when the server sent an invalid
item name in two-level subscriptions instead of triggering the listener
subscription:didFailWithErrorCode:message:forCommandSecondLevelItemWithKey:
of LSSubscriptionDelegate
with the error code 14 (Invalid second-level
item name).
Fixed a bug affecting polling sessions, which, upon a connection
issue, could have caused the session to be interrupted by issuing
client:didReceiveServerError:withMessage:
, instead of being
automatically recovered.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables watchOS Client SDK up to version 4.1 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed race condition that under rare circumstances could have caused a crash when closing a connection that was actively receiving data.
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is retryDelay
, which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the connectTimeout
and currentConnectTimeout
properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can be inspected through currentConnectTimeout
,
but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect
> and then connect
.
As a result of the change, properties connectTimeout
and currentConnectTimeout
of LSConnectionOptions
have been deprecated, as the setters have no effect and the getter
is now equivalent to retryDelay
.
Also changed the default value of the retryDelay
property from 2 seconds to 4 seconds.
Modified the implementation of connect
when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect first.
Modified in a similar way the implementation of forcedTransport
property when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Fixed a bug triggered by a call to connect
or a change to forcedTransport
issued while the client
was attempting the recovery of the current session. This caused the recovery to fail,
but, then, the library might not reissue the current subscriptions on the newly created session.
Fixed a bug that could have caused session recovery to fail if preceded by a previous successful session recovery on the same session by more than a few seconds.
Changed the default value of the earlyWSOpenEnabled
property from YES
to NO
.
Changed the default value of the slowingEnabled
property from YES
to NO
.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables watchOS Client SDK up to version 4.0 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a race condition that could lead the client to stop trying to reconnect to the server after a network disconnection or a server restart. This bug has been reported only when running on the Simulator, but could happen also on the device.
Added ARM64_32 code segments to the library binaries for compatibility with the latest Apple Watch architecture.
Fixed a bug causing a fatal error when the client recreated a session because of a network error and there were active MPN subscriptions.
Fixed a bug causing the client to ignore the sessionRecoveryTimeout
when in state STALLED.
Fixed a bug causing the closing of the session when the user made a copy
of a triggered LSMPNSubscription
(with the copy constructor
initWithMPNSubscription:
) and then subscribed the copy.
Fixed reference cycles that could lead to memory leaks while trying to connect for extended periods of time or, once connected, when subscribing and unsubscribing multiple times.
Introduced a maximum time on attempts to recover the current session, after which
a new session will be opened. The default is 15 seconds, but it can be customized
with the newly added sessionRecoveryTimeout
property in LSConnectionOptions
.
This fixes a potential case of permanently unsuccessful recovery, if the
<control_link_address> setting were leveraged in a Server cluster and a Server
instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a bug in the recently introduced session recovery mechanism, by which, a "sendMessage" request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Minor performance improvement in native HTTP connection mechanism by replacing threads with GCD queues
Added the error code 21 in client:didReceiveServerError:withMessage:
,
that can be received upon some failed requests, to inform that not only the current
session was not found but it is also likely that the request was routed to the wrong
Server instance. Previously, in the same cases, the SDK library would not invoke
client:didReceiveServerError:withMessage:
and would open a new session instead.
COMPATIBILITY NOTE: If using an existing application, you should
check how it would handle the new (and unexpected) error code. A reconnection attempt would
ensure the previous behavior, although this is no longer the suggested action.
Modified the default value of the retryDelay
property from 5 to 2 seconds.
This should help recovering from network outages of a few seconds, typical, for
instance, of wifi/mobile network switches.
Extended the recovery mechanism to stalled sessions. Now, when the reconnectTimeout
expires, an attempt to recover the current session will be performed first.
Fixed a bug which could have caused the property snapshot
of
LSItemUpdate
to behave wrongly on subscriptions in which the snapshot
was not requested.
Fixed a bug preventing the connection when the Server configuration specifies a control-link address.
Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.
Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.
Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused an exception to be logged on the console.
Fixed the instructions provided in the documentation of notificationFormat
property of the LSMPNSubscription
class.
Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.
Added clarifications on licensing matters in the docs.
Included in Lightstreamer distribution. See "sdk_client_watchos".
The included library is derived from iOS Client SDK 4.0.0 build 66.
Some features are missing. See the introduction of the API documentation
for details.
Check for newer versions online.
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Introduced changes to MPN features to comply with new FCM server libraries now in use on the Server version 7.1. COMPATIBILITY NOTE: This breaks the compatibility with Server version 7.0. However, if MPN support is not used, compatibility with Server version 7.0 is still ensured. In particular:
MpnDevice.create
factory method that obtained
the device token automatically. Now the token must be obtained manually
and passed as an argument to the MpnDevice
constructor.
COMPATIBILITY NOTE: Existing applications
that were using the MpnDevice.create
method must be ported,
replacing the call with the equivalent code that makes direct use of
Firebase APIs.setNotificationFormat
in
MpnSubscription
and modified MpnBuilder
to produce
the correct format. COMPATIBILITY NOTE:
Existing applications that don't rely on MpnBuilder
may not receive
notifications with the expected format and should be ported.See paragraph 5.7 of the General Concepts document for information on the GCM to FCM transition and how to update.
Fixed a bug causing ConnectionDetails.getSessionId() to return null notwithstanding the connection status was CONNECTED:STREAM-SENSING.
Fixed a bug affecting the various callbacks that report custom error codes and error messages received from the Server (originated by the Metadata Adapter). The message reported could have been in a percent-encoded form.
By-passed the "retry delay" setting when recovering from a closed session. This may speedup the recovery process.
Clarified in the docs the role of the delayTimeout in sendMessage.
Fixed typos in the docs of MPN-related methods.
Fixed a bug which caused an exception when the server sent an invalid item name in two-level subscriptions instead of triggering the listener SubscriptionListener.onCommandSecondLevelSubscriptionError with the error code 14 (Invalid second-level item name).
Fixed a bug affecting polling sessions, which, upon a connection issue, could have caused the session to be interrupted by issuing onServerError, instead of being automatically recovered.
Improved connection management. Now a connection is closed as soon as it is discarded (for example becasue the connect timeout has expired).
Dropped support for API level lower than 23. Now Android 6 or later is required. COMPATIBILITY NOTE: Existing applications with wider Android support requirements cannot be upgraded.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables Android Client SDK up to version 4.1 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is "RetryDelay", which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the "ConnectTimeout" and "CurrentConnectTimeout" properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can be inspected through getCurrentConnectTimeout,
but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect() and then connect().
As a result of the change, methods setConnectTimeout, getConnectTimeout and setCurrentConnectTimeout
of ConnectionOptions have been deprecated, as the setters have no effect and the getter
is now equivalent to getRetryDelay.
Also changed the default value of the "RetryDelay" property from 2 seconds to 4 seconds.
Modified the implementation of connect() when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect() first.
Modified in a similar way the implementation of setForcedTransport(); when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Fixed a bug triggered by a call to connect() or setForcedTransport() issued while the client was attempting the recovery of the current session. This caused the recovery to fail, but, then, the library might not reissue the current subscriptions on the newly created session.
Fixed a bug that could have caused session recovery to fail if preceded by a previous successful session recovery on the same session by more than a few seconds.
Changed the default value of the "EarlyWSOpenEnabled" property from true to false (see ConnectionOptions.setEarlyWSOpenEnabled). This removes a potential incompatibility with cookie-based Load Balancers, at the expense of a possible slight delay in session startup.
Changed the default value of the "SlowingEnabled" property from true to false (see ConnectionOptions.setSlowingEnabled).
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables Android Client SDK up to version 4.0 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a very rare race condition that could lead the client to stop trying to reconnect to the server after a network disconnection or a server restart.
Enforced https links in instructions for maven download, as with http it might fail.
Fixed a bug causing a fatal error when the client recreated a session because of a network error and there were active MPN subscriptions.
Fixed a bug causing the client to ignore the SessionRecoveryTimeout when in state STALLED.
Fixed a bug causing the closing of the session when the user made a copy of a triggered subscription (with the constructor MpnSubscription(MpnSubscription)) and then subscribed the copy.
Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.
Fixed a compatibility issue with Android API level 21, which may have caused TLS connections to fail during the initial handshake. This only affected the "full" version of the library.
Updated the included version of the third-party Netty library. This only regards the "full" version of the library.
Fixed the documentation about Android version support. Support for Android versions earlier than 4.4.2 (API level 19) was dropped by SDK version 3.1.
Fixed a bug, introduced in version 4.0.0, affecting the interruption of a session on a WebSocket (available in the "full" version of the library). In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.
Modified the constructor of the MpnDevice class, by removing the "senderId" argument, which was not actually used. COMPATIBILITY NOTE: Existing code leveraging the MPN support and using this constructor (instead of the available factory method) needs to be aligned and recompiled.
Discontinued token reuse upon MPN device registration: now a new token is always requested. Previously, the existing token was reused if the application package version had not changed. This better conforms to Android FCM library best usage practices.
Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Fixed possible cases of incorrect cookie handling in old versions of Android (api level 23 and earlier).
Fixed a compatibility issue in the previously added debug log.
Improved internal debug log.
Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.
Fixed a bug, introduced in version 3.0, which could have caused the method ItemUpdate.isSnapshot to behave wrongly on subscriptions in which the snapshot was not requested.
Added the error code 21 in onServerError, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke onServerError and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.
Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds, typical, for instance, of wifi/mobile network switches.
Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.
Fixed a bug introduced with version 3.0.0 preventing the connection when the server configuration specifies a control-link address.
Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.
Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.
Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.
Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused a NullPointerException to be logged on the console.
Fixed the instructions provided in the documentation of setNotificationFormat in the MpnSubscription class.
Extended the scope of error code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused the whole session to be interrupted.
Added clarifications on licensing matters in the docs.
Changed the internal folder from sdk_client_android_unified to sdk_client_android.
Introduced the support for Mobile Push Notifications. It consists in
new methods in the LightstreamerClient class together with new dedicated
classes under the "mpn" subpackage. See the API documentation for details.
As a consequence, new dependencies from third-party libraries have been added.
An MPN subscription is backed by a real-time subscription, from which it may take
any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent:
they survive the session and are identified by a permanent, global, unique key provided
by the Server at time of activation.
The notifications are managed by third-party services supported by the Server,
which determine the notification characteristics and the supported devices.
However, the support for Mobile Push Notifications
by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.
Restricted the compatibility constraint to Android 4 or later. COMPATIBILITY NOTE: Existing applications can keep running on earlier Android versions as long they don't leverage the MPN support.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY,
to inform the application when a recovery attempt is being performed; hence,
onStatusChange and getStatus can provide the new status.
COMPATIBILITY NOTE: Existing code that uses the status
names received via onStatusChange or getStatus may have to be aligned.
Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval"
property. Now, it will also allow the Server to detect when a client has abandoned
a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 3.0.0,
setting a value for the "ReverseHeartbeatInterval" property could have even caused
the connection interruption.
Addressed an issue in the "compact" version of the library, which, in particular circumstances (more likely to occur in long polling), could have caused the silent loss of events on the session. Look for "sun.net.http.retryPost" in the Javadoc overview for details.
Added the new Server error code 71 to onServerError and clarified the difference with error code 60.
Fixed the documentation of getServerSocketName, whose behavior has slightly changed since version 3.0.0.
Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.
Fixed the javadocs, by removing some class member variables that were not supposed to be documented.
Aligned the documentation to comply with current licensing policies.
Added the method LightstreamerClient.setTrustManagerFactory, which provides a mean to control the way TLS certificates are evaluated, with the possibility to accept untrusted ones.
Fixed a bug that, when under certain circumstances the server is unreachable, caused the client to enter in a tight reconnection loop ignoring the parameter ConnectionOptions.setRetryDelay.
Addressed compatibility issue with Android 8 affecting SSL/TLS WebSocket connections and causing a tight loop of connection attempts.
Fixed an error in the determination of the LIB_VERSION constant of the LightstreamerClient class in the "full" (i.e. non "compact") version; this version description can also be reported by the Server.
Fixed a bug, introduced in version 3, affecting the case of session establishment refusal by the Metadata Adapter (through a CreditsException) and the case of forced destroy (via external requests), when a negative custom error code was supplied. The subsequent invocation to onServerError would carry code 61 (internal error) instead of the specified custom code.
Fixed the reconnection algorithm, which, in the "full" Android client, could have caused a tight reconnection loop in particular conditions when the server is not available.
Added the null annotations (according to JSR 305) in the class files of public classes, to better support library use with Kotlin and any other language which leverages JSR 305. COMPATIBILITY NOTE: Existing code written in Kotlin and similar languages may no longer compile and should be aligned with the new method signatures. No issues are expected for existing Java code.
Fixed a bug introduced in the previous release, as unnecessary encoding of characters in the requests was saved. The bug caused any '+' characters in the requests (for instance, in group/schema names and in client messages) to be handled incorrectly.
Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.
Fixed the support for proxies, which could have caused connections to fail in case a public DNS were not available from the client host.
Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused onSubscriptionError with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.
Revised the support for cookies:
Improved the efficiency by avoiding unnecessary encoding of characters in the requests (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.
Introduced a configuration property to choose whether multiple instances of LightstreamerClient should use dedicated threads for their internal operations instead of sharing a single one. See the Javadoc comment for the LightstreamerClient class for details.
Fixed spurious entries in the Javadoc of the Subscription class.
Fixed a bug in TLS management for the newly introduced support of WebSockets, whereby, when the EarlyWSOpenEnabled property was true, the WebSocket connections was open without performing the TLS certificate check. However, in case of an untrusted certificate, still no request could be sent to the Server and no session could be opened. Obviously, the bug did not affect the "compact" version of the library.
Improved the management of retries upon unsuccessful control requests.
Introduced the use of WebSockets both for streaming and for subscription
and client message requests, which brings an overall performance improvement.
As a consequence, setForcedTransport now also supports the "WS", "WS-STREAMING",
and "WS-POLLING" values and the predisposed setEarlyWSOpenEnabled method
is now effective.
Modified the name of the library made available via Maven. Now, ls-android-client should be referred in place of ls-android-client-compact. However, the latter is still available as an alternative "compact" version of the library. In fact, the memory footprint of the library, when including its dependencies, has increased significantly, whereas the "compact" version has not grown, but it does not include WebSocket support.
Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported and recompiled. If the property is not used in any form, existing compiled code can still run against the new library.
Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and their changes during subscription life. See the docs for details and special cases. COMPATIBILITY NOTE: Custom code has to be ported, by implementing the new method, and recompiled. Existing compiled code should still run against the new library: invocations to onRealMaxFrequency to the custom listener would cause an exception that would be caught internally.
Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug on the implementation of disconnect(), whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument;
negative values will now be accepted to mean that the Server default timeout is to be used.
COMPATIBILITY NOTE: Existing code using the 5-argument
version of sendMessage and supplying 0 as "delayTimeout" must be modified to use
-1 instead. Invocations to the 1-argument version don't have to be modified.
Added new error codes 66 and 68 to onServerError, onSubscriptionError, and
onSecondLevelSubscriptionError, to report server-side issues; previously,
upon such problems, the connection was just interrupted.
Added missing error code 60 to onServerError documentation; this error
reports server-side licensing limitations.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError
documentation; when a subscription request cannot find the session,
the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.
Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.
Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Improved the management of setHttpExtraHeadersOnSessionCreationOnly, when true. Previously, the extra headers (supplied with setHttpExtraHeaders) were still sent, redundantly, on control requests.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Improved the documentation of various methods in regard to the special case
of two-level subscriptions.
Detailed the documentation of the various
property getters and setters in regard to the possible values.
Improved the Javadocs, by shortening the concise descriptions of some classes and methods.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Fixed a bug which could have caused onSubscriptionError and onCommandSecondLevelSubscriptionError to report wrong error codes, that is, codes different from the documented ones.
Fixed the documentation of onClearSnapshot, which is only predisposed.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
As moved to final, renamed the internal folder from "sdk_client_android_alpha" to "sdk_client_android_unified".
Changed the names of some properties in the ConnectionOptions bean. To resume:
This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using any of the mentioned properties has to be ported and any related binaries have to be recompiled.
Fixed potential NullPointerException which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Changed the type and behavior of the getConnectTimeout/setConnectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value.
To check and or modify the current value, a new CurrentConnectTimeout property, with its getter/setter pair in ConnectionOptions, is exposed. COMPATIBILITY NOTE: if the setConnectTimeout method is called by the client code, the given parameter must be modified to be a String. If the getConnectTimeout method is called by the client code its receiving variable must be converted to a String; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.
Prevented reconnection attempts upon wrong answers from the Server.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of onServerError and onStatusChange, to specify that onServerError is always preceded, not followed, by onStatusChange with DISCONNECTED.
Revised javadoc formatting style and fixed various typos in the javadocs.
Resorted to an external package for the log support. COMPATIBILITY NOTE: Custom code using the LoggerProvider interface should be revised, based on the new documentation; see setLoggerProvider.
Improved the handling of long polling.
Added missing documentation of setProxy in ConnectionOptions.
Introduced as an improved alternative to the SDK for Android Clients.
The interface offered is completely different, and it is very similar
to the one currently exposed by the SDK for JavaScript Clients.
see "sdk_client_android_alpha".
Aligned the documentation to comply with current licensing policies.
Revised javadoc formatting style; also fixed links and missing fields in the javadocs.
In BlackBerry 7 SDK, fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
In BlackBerry 7 SDK, introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
In BlackBerry 7 SDK, clarified the license terms for the included example source code.
Improved the included example of BlackBerry 10 integration based on Adobe AIR.
Updated the included examples of BlackBerry 10 integration, to lean on the new versions of Lightstreamer Flex and JavaScript SDKs. Note that, only to run the JavaScript example, the new version of the Server is needed.
Introduced the support for BlackBerry 10, by adding the sdk_client_blackberry10 subfolder. The current SDK has been moved to the sdk_client_blackberry7 subfolder and has been left unchanged; it can only be used up to BlackBerry 7 (i.e. BlackBerry OS). For BlackBerry 10 no dedicated libraries are needed and examples of how to achieve integration by leveraging other SDKs are shown.
Introduced the reverse heartbeat mechanism. Introduced the new method LSClient.setReverseHeartbeatMillis method to configure it and LSClient.getReverseHeartbeatMillis to test it.
Changed the return type of the ConnectionProvider clone method from ConnectionProvider to Object. COMPATIBILITY NOTE: if a custom ConnectionProvider was implemented the return value of its clone method must be changed; on the other hand the implementation of the method does not need any change. Note that the included demo has been changed accordingly.
Regenerated the API documentation with the newest JDK default template.
Introduced the setMaxFrequency and setFrequencyUnlimited methods, which allow
for modification of the maximum frequency settings for currently subscribed items;
unless in single connection mode, the changes will take place immediately,
with no need for a resubscription.
Extended the sample code to demonstrate the use of the new methods.
Changed the default for the setIdleTimeout method of the ConnectionPolicy class from 30000 to 19000 ms.
Fixed a bug that sometimes caused HandyTableListener instances to receive updates carrying the wrong old values.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Aligned the documentation to comply with current licensing policies.
Revised javadoc formatting style; also fixed links and missing fields in the javadocs.
Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Introduced the reverse heartbeat mechanism. Introduced the new LSClient.setReverseHeartbeatMillis method to configure it and LSClient.getReverseHeartbeatMillis to test it.
Changed the return type of the ConnectionProvider clone method from ConnectionProvider to Object. COMPATIBILITY NOTE: if a custom ConnectionProvider was implemented the return value of its clone method must be changed; on the other hand the implementation of the method does not need any change.
Regenerated the API documentation with the newest JDK default template.
Introduced the setMaxFrequency and setFrequencyUnlimited methods, which allow
for modification of the maximum frequency settings for currently subscribed items;
unless in single connection mode, the changes will take place immediately,
with no need for a resubscription.
Extended the sample code to demonstrate the use of the new methods.
Changed the default for the setIdleTimeout method of the ConnectionPolicy class from 30000 to 19000 ms.
Fixed a bug that sometimes caused HandyTableListener instances to receive updates carrying the wrong old values.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Check for newer versions online.
Revised the policy of reconnection attempts to reduce the attempt frequency in case of repeated failure of the first bind request, which could be due to issues in accessing the "control link" (when configured).
Discontinued the support for java 7 SDK and runtime environment. Java 8 or later is now required. COMPATIBILITY NOTE: clients still leaning on the discontinued java 7 JVM will no longer be supported until they upgrade. Existing applications that were compiled for a java 7 or earlier JVM don't need to be upgraded.
Fixed a bug causing ConnectionDetails.getSessionId() to return null notwithstanding the connection status was CONNECTED:STREAM-SENSING.
Fixed a bug affecting the various callbacks that report custom error codes and error messages received from the Server (originated by the Metadata Adapter). The message reported could have been in a percent-encoded form.
By-passed the "retry delay" setting when recovering from a closed session. This may speedup the recovery process.
Clarified in the docs the role of the delayTimeout in sendMessage.
Fixed a bug which caused an exception when the server sent an invalid item name in two-level subscriptions instead of triggering the listener SubscriptionListener.onCommandSecondLevelSubscriptionError with the error code 14 (Invalid second-level item name).
Fixed a bug affecting polling sessions, which, upon a connection issue, could have caused the session to be interrupted by issuing onServerError, instead of being automatically recovered.
Improved connection management. Now a connection is closed as soon as it is discarded (for example because the connect timeout has expired).
Fixed a bug in the recently revised policy of reconnection attempts upon failed or unresponsive requests. In case of multiple failed attempts on unresponsive connections the retry delay was increased dynamically, but was not restored to the configured value after a successful connection. As a consequence, after a server or network unavailability lasting for a couple of minutes, further cases of server or network unavailability would be recovered in about one minute, even if much shorter.
Wholly revised the policy of reconnection attempts upon failed or unresponsive requests.
Now the only property related with this policy is "RetryDelay", which now affects both
(1) the minimum time to wait before trying a new connection to the Server in case the previous one failed
for any reason and (2) the maximum time to wait for a response to a request before dropping the connection
and trying with a different approach.
Previously, point (2) was related with the "ConnectTimeout" and "CurrentConnectTimeout" properties.
Now, in case of multiple failed attempts on unresponsive connections (i.e. while in CONNECTING state),
the timeout used may still be increased dynamically and can be inspected through getCurrentConnectTimeout,
but this behavior is no longer configurable.
COMPATIBILITY NOTE: Existing code that tries to take control of the
connection timeouts will no longer be obeyed, but we assume that the new policy will bring
an overall improvement. Note that, when in CONNECTING state, the current timeout can be restored
by issuing disconnect() and then connect().
As a result of the change, methods setConnectTimeout, getConnectTimeout and setCurrentConnectTimeout
of ConnectionOptions have been deprecated, as the setters have no effect and the getter
is now equivalent to getRetryDelay.
Also changed the default value of the "RetryDelay" property from 2 seconds to 4 seconds.
Modified the implementation of connect() when issued while the state is either
DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY. The call will no longer interrupt
the pending reconnection attempt, but it will be ignored, to lean on the current attempt.
Note that a pending reconnection attempt can still be interrupted by issuing disconnect() first.
Modified in a similar way the implementation of setForcedTransport(); when issued
while the state is either DISCONNECTED:WILL-RETRY or DISCONNECTED:TRYING-RECOVERY,
the call will no longer interrupt the pending reconnection attempt, but it will apply
to the outcome of that connection attempt.
Fixed a bug triggered by a call to connect() or setForcedTransport() issued while the client was attempting the recovery of the current session. This caused the recovery to fail, but, then, the library might not reissue the current subscriptions on the newly created session.
Fixed a bug that could have caused session recovery to fail if preceded by a previous successful session recovery on the same session by more than a few seconds.
Changed the default value of the "EarlyWSOpenEnabled" property from true to false (see ConnectionOptions.setEarlyWSOpenEnabled). This removes a potential incompatibility with cookie-based Load Balancers, at the expense of a possible slight delay in session startup.
Changed the default value of the "SlowingEnabled" property from true to false (see ConnectionOptions.setSlowingEnabled).
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables Java SE Client SDK up to version 4.2 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Fixed a very rare race condition that could lead the client to stop trying to reconnect to the server after a network disconnection or a server restart.
Enforced https links in instructions for maven download, as with http it might fail.
Fixed a bug causing the client to ignore the SessionRecoveryTimeout when in state STALLED.
Introduced a maximum time on attempts to recover the current session, after which a new session will be opened. The default is 15 seconds, but it can be customized with the newly added "SessionRecoveryTimeout" property in ConnectionOptions. This fixes a potential case of permanently unsuccessful recovery, if the <control_link_address> setting were leveraged in a Server cluster and a Server instance happened to leave a cluster and were not automatically restarted.
Fixed a bug in the recently introduced session recovery mechanism triggered by the use of the <control_link_address> setting on the Server, which could have caused feasible recovery attempts to fail.
Fixed a bug in the Stream-Sense mechanism, which was unable to recover to HTTP streaming in some specific cases of unavailability of a websocket connection.
Updated the included version of the third-party Netty library.
Fixed a bug, introduced in version 4.2.0, affecting the interruption of a session on a WebSocket. In case of connectivity issues (or cluster affinity issues) the session might have remained open in the background, causing a resource waste.
Fixed a bug in the recently introduced session recovery mechanism, by which, a sendMessage request issued while a recovery operation was in place, could have never been notified to the listener until the end of the session (at which point an "abort" notification would have been issued to the listener), even in case the recovery was successful.
Improved internal debug log.
Fixed a bug which, upon particular kinds of network issues and when the "early websocket open" feature was enabled, could have caused the client to abort session establishment or recovery attempts with no notification to the application.
Fixed a bug, introduced in version 4.0, which could have caused the method ItemUpdate.isSnapshot to behave wrongly on subscriptions in which the snapshot was not requested.
Added the error code 21 in onServerError, that can be received upon some failed requests, to inform that not only the current session was not found but it is also likely that the request was routed to the wrong Server instance. Previously, in the same cases, the SDK library would not invoke onServerError and would open a new session instead. COMPATIBILITY NOTE: If using an existing application, you should check how it would handle the new (and unexpected) error code. A reconnection attempt would ensure the previous behavior, although this is no longer the suggested action.
Modified the default value of the "RetryDelay" property from 5000 to 2000 ms. This should help recovering from network outages of a few seconds.
Extended the recovery mechanism to stalled sessions. Now, when the ReconnectTimeout expires, an attempt to recover the current session will be performed first.
Fixed a bug introduced with version 3.0.0 preventing the connection when the server configuration specifies a control-link address.
Fixed a rare race condition which could have caused the delay of subscription requests issued on a websocket session startup due to a wrong request to the Server.
Fixed a bug which, in a slow client scenario, could have caused the interruption of a polling session due to a wrong request to the Server.
Fixed a race condition, mostly possible in an overloaded client scenario, which could have caused subscription or sendMessage requests to be delayed.
Fixed a harmless bug on the implementation of disconnectFuture(), which, in rare cases, could have caused a NullPointerException to be logged on the console.
Fixed a harmless bug in the reverse heartbeat mechanism which, upon session startup, could have caused a NullPointerException to be logged on the console.
Added clarifications on licensing matters in the docs.
Changed the internal folder from sdk_client_java_se_unified to sdk_client_java_se.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability.
As a consequence, introduced a new status, namely DISCONNECTED:TRYING-RECOVERY,
to inform the application when a recovery attempt is being performed; hence,
onStatusChange and getStatus can provide the new status.
COMPATIBILITY NOTE: Existing code that uses the status
names received via onStatusChange or getStatus may have to be aligned.
Extended the reverse heartbeat mechanism, governed by the "ReverseHeartbeatInterval"
property. Now, it will also allow the Server to detect when a client has abandoned
a session although the socket remains open.
Fixed the reverse heartbeat mechanism, which didn't work at all. Since version 4.0.0,
setting a value for the "ReverseHeartbeatInterval" property could have even caused
the connection interruption.
Added a new dependency from a third-party library.
Added the new Server error code 71 to onServerError and clarified the difference with error code 60.
Fixed the documentation of getServerSocketName, whose behavior has slightly changed since version 4.0.0.
Fixed the documentation of the "ContentLength", "KeepaliveInterval", and "ReverseHeartbeatInterval" properties of ConnectionOptions, to clarify that a zero value is not allowed in the first and it is allowed in the others.
Fixed the javadocs, by removing some class member variables that were not supposed to be documented.
Aligned the documentation to comply with current licensing policies.
Added the method LightstreamerClient.setTrustManagerFactory, which provides a mean to control the way TLS certificates are evaluated, with the possibility to accept untrusted ones.
Fixed a bug that, when under certain circumstances the server is unreachable, caused the client to enter in a tight reconnection loop ignoring the parameter ConnectionOptions.setRetryDelay.
Improved WebSocket transport implementation.
Fixed a bug, introduced in version 4, affecting the case of session establishment refusal by the Metadata Adapter (through a CreditsException) and the case of forced destroy (via external requests), when a negative custom error code was supplied. The subsequent invocation to onServerError would carry code 61 (internal error) instead of the specified custom code.
Fixed the reconnection algorithm, which could have caused a tight reconnection loop in particular conditions when the server is not available.
Added the null annotations (according to JSR 305) in the class files of public classes, to better support library use with Kotlin and any other language which leverages JSR 305. COMPATIBILITY NOTE: Existing code written in Kotlin and similar languages may no longer compile and should be aligned with the new method signatures. No issues are expected for existing Java code.
Fixed a bug introduced in the previous release, as unnecessary encoding of characters in the requests was saved. The bug caused any '+' characters in the requests (for instance, in group/schema names and in client messages) to be handled incorrectly.
Fixed a bug which caused polling on WebSocket to fail. Note that this feature is available, but very rarely used.
Fixed the support for proxies, which could have caused connections to fail in case a public DNS were not available from the client host.
Fixed a bug which affected any unsubscription request issued so early that the corresponding subscription request had not been completed yet. Such unsubscription could have caused onSubscriptionError with code 19 and the item would have been left subscribed to by the session on the Server, yet considered not subscribed to by the library.
Revised the support for cookies:
Improved the efficiency by avoiding unnecessary encoding of characters in the request (for instance, in group/schema names and in client messages). In particular, non-ascii characters are no longer encoded.
Introduced a configuration property to choose whether multiple instances of LightstreamerClient should use dedicated threads for their internal operations instead of sharing a single one. See the Javadoc comment for the LightstreamerClient class for details.
Fixed spurious entries in the Javadoc of the Subscription class.
Fixed a bug in TLS management for the newly introduced support of WebSockets, whereby, when the EarlyWSOpenEnabled property was true, the WebSocket connections was open without performing the TLS certificate check. However, in case of an untrusted certificate, still no request could be sent to the Server and no session could be opened.
Improved the management of retries upon unsuccessful control requests.
Introduced the use of WebSockets both for streaming and for subscription
and client message requests, which brings an overall performance improvement.
As a consequence, setForcedTransport now also supports the "WS", "WS-STREAMING",
and "WS-POLLING" values and the predisposed setEarlyWSOpenEnabled method
is now effective.
Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported and recompiled. If the property is not used in any form, existing compiled code can still run against the new library.
Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and their changes during subscription life. See the docs for details and special cases. COMPATIBILITY NOTE: Custom code has to be ported, by implementing the new method, and recompiled. Existing compiled code should still run against the new library: invocations to onRealMaxFrequency to the custom listener would cause an exception that would be caught internally.
Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug which could have caused unexpected short blocks in the case of synchronous polling mode
Fixed a bug on the implementation of disconnect(), whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument;
negative values will now be accepted to mean that the Server default timeout is to be used.
COMPATIBILITY NOTE: Existing code using the 5-argument
version of sendMessage and supplying 0 as "delayTimeout" must be modified to use
-1 instead. Invocations to the 1-argument version don't have to be modified.
Added new error codes 66 and 68 to onServerError, onSubscriptionError, and
onSecondLevelSubscriptionError, to report server-side issues; previously,
upon such problems, the connection was just interrupted.
Added missing error code 60 to onServerError documentation; this error
reports server-side licensing limitations.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError
documentation; when a subscription request cannot find the session,
the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.
Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.
Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Improved the management of setHttpExtraHeadersOnSessionCreationOnly, when true. Previously, the extra headers (supplied with setHttpExtraHeaders) were still sent, redundantly, on control requests.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Improved the documentation of various methods in regard to the special case
of two-level subscriptions.
Detailed the documentation of the various
property getters and setters in regard to the possible values.
Improved the Javadocs, by shortening the concise descriptions of some classes and methods.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Fixed a bug which could have caused onSubscriptionError and onCommandSecondLevelSubscriptionError to report wrong error codes, that is, codes different from the documented ones.
Fixed the documentation of onClearSnapshot, which is only predisposed.
Fixed the included README.TXT, that contained an obsolete note about the library not being ready for production. Only releases explicitly versioned as beta are not ready for production.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
As moved to final, renamed the internal folder from "sdk_client_java_se_beta" to "sdk_client_java_se_unified".
Changed the names of some properties in the ConnectionOptions bean. To resume:
This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using any of the mentioned properties has to be ported and any related binaries have to be recompiled.
Added logging messages (at ERROR level) for those cases in which runtime exceptions could be thrown while running some asynchronus code paths.
Fixed potential NullPointerException which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of onServerError and onStatusChange, to specify that onServerError is always preceded, not followed, by onStatusChange with DISCONNECTED.
Revised javadoc formatting style and fixed various typos in the javadocs.
Updated the versions of some external libraries which the SDK depends upon.
Changed the type and behavior of the getConnectTimeout/setConnectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value.
To check and or modify the current value, a new CurrentConnectTimeout property, with its getter/setter pair in ConnectionOptions, is exposed. COMPATIBILITY NOTE: if the setConnectTimeout method is called by the client code, the given parameter must be modified to be a String. If the getConnectTimeout method is called by the client code its receiving variable must be converted to a String; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.
Added the new method disconnectFuture to the LigtstreamerClient class, with the purpose to provide a notification when all
threads started by all LightstreamerClient instances living in the JVM have been terminated, because no more activities need to be managed
and hence event dispatching is no longer necessary.
Such method is especially useful in those environments which require an appropriate resource management, like "full" Java EE application servers
or even the simpler Servlet Containers. The method should be used in replacement of disconnect() in all those circumstances where it
is indispensable to guarantee a complete shutdown of all user threads, in order to avoid potential memory leaks and waste resources.
See the docs for further details about the proper usage pattern for this method.
Prevented reconnection attempts upon wrong answers from the Server.
Resorted to an external package for the log support. COMPATIBILITY NOTE: Custom code using the LoggerProvider interface should be revised, based on the new documentation; see setLoggerProvider.
Introduced the possibility to override the library-set HTTP headers through the ConnectionOptions.setHttpExtraHeaders method (previously it was the other way round).
Improved the handling of long polling.
Added missing documentation of setProxy in ConnectionOptions.
Introduced as an improved alternative to the SDK for Java SE Clients.
The interface offered is completely different, and it is very similar
to the one currently exposed by the SDK for JavaScript Clients.
see "sdk_client_java_se_beta".
Check for newer versions on NuGet.
Introduced full support for the Unified Client API model.
The big advantage in using the Unified API is that the same consistent interface
and behavior are guaranteed across different client platforms. In other words, the
same abstractions and internal mechanisms are provided for very different platforms,
while respecting the conventions, styles, and best practice of each platform.
The API is completely revised compared to the
previous version; so your existing code should be revisited to suit the new
interface.
Note that the SDK has been renamed accordingly.
Improved the communication with the Server by adopting the public TLCP protocol.
Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license of "file" type which enables .NET Standard Client SDK up to version 4 or earlier, clients based on this new version will not be accepted by the Server: a license upgrade will be needed.
Introduced the new .NET Standard SDK. See the "sdk_client_dotnetstandard" folder.
This SDK is compatible with .NET Standard 2.0 API specifications and is intended
as a replacement for the old:
COMPATIBILITY NOTE: Existing applications that target the following platforms:
can be upgraded to the new SDK provided that the platform version is compatible with .NET Standard 2.0. Otherwise they have to stick to the current SDK. The history below refers to the SDK for .NET PCL Clients. Note that the package name of the deployment on NuGet was different: it was "Lightstreamer.DotNet.Client".
Just fixed the deployment page on NuGet.
Added two new properties to ConnectionInfo (namely ConnectTimeoutMillis
and ReadTimeoutMillis), to enforce timeouts for the socket connection
and socket read tasks.
This also fixes the documentation of OpenConnection and related methods
in LSClient, where it was described a different way to set such timeouts.
Actually, this feature was available only in the old .NET SDK and was
removed upon the move to the .NET PCL SDK.
Removed the API-reference folder under doc, which referred to version 3.0.0 and should have been removed since version 3.1.0.
Added clarifications on licensing matters in the docs.
Added automatic recovery of sessions upon unexpected socket interruption during
streaming or long polling. Now the library will perform an attempt to resume
the session from the interruption point. The attempt may or may not succeed,
also depending on the Server configuration of the recovery capability;
so, note that an interruption followed by a failed recovery attempt may not
be notified by a PushConnException, but by a different exception.
Added the RecoveryTimeoutMillis property in ConnectionInfo to regulate
recovery attempts.
Extended the scope of the OnActivityWarning notification on IConnectionListener
to include the period in which a recovery attempt is in place.
COMPATIBILITY NOTE: If an existing client takes
decisions based on OnActivityWarning, it should be considered that the time
elapsed after the warning may now be longer than ProbeTimeoutMillis,
depending on RecoveryTimeoutMillis.
Fixed a bug introduced in 3.0.0 which caused the PollingMillis setting to be ignored. If pure synchronous polling was used (i.e. if combined with a setting of 0 for PollingIdleMillis), this could have caused a tight loop of requests to the Server (unless the latter was protected with <min_interpoll_millis>).
Extended the invocations of OnNewBytes in the ConnectionListener to also report the reception of a Server keepalive. In such cases, the "bytes" argument will be 0. COMPATIBILITY NOTE: If an existing client leans on the fact that it never receives 0 from OnNewBytes, it should be revised. But note that a 0 value from OnNewBytes was not explicitly excluded by the previous interface contract.
Aligned the documentation to comply with current licensing policies.
Introduced the new .NET PCL (Portable Class Libraries) SDK. See the "sdk_client_pcl" folder.
This SDK is intended as a replacement for the old:
COMPATIBILITY NOTE: The Portable Class Library dll included in this SDK targets the following platforms:
If the target of your application is an older framework, you should revert to the older Client libraries.
Extended the scope of error code 32 upon END messages. Previously, the code specified that a session had been closed via the JMX interface, whereas now other mechanisms that allow enforcing of session closure from the Server side may be the originating cause.
Extended the scope of error code 48 upon END messages. Previously, the code specified that a session had been closed because of expiration of the maximum duration configured, whereas now other mechanisms that allow enforcing of session expiration from the Server side are admitted.
Added session error code 21 and control error code 11, that can be received instead of, respectively, session error code 20 and control error code 20, to inform that not only a specified session was not found but it is also likely that the request was routed to the wrong Server instance. COMPATIBILITY NOTE: Existing clients using version 2.0.0 and handling error code 20, in order to upgrade to 2.1.0, should ensure that the new error codes are also handled properly. COMPATIBILITY NOTE: Existing clients using version 2.1.0 build 1851 and handling error code 20 should ensure that the new error codes are also handled properly.
Extended the scope of REQERR code 41 on the various MPN requests to all issues related with resource unavailability in the Server preventing the operation. Previously, such issues could have caused a ERROR response with code 68.
Clarified in the documentation the use of percent encoding.
Clarified in the documentation how to distinguish notifications that carry snapshot information from real-time updates.
Added clarifications on licensing matters in the documentation.
Introduced the support for Mobile Push Notifications. It consists in:
An MPN subscription is backed by a real-time subscription, from which it may take
any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent:
they survive the session and are identified by a permanent, global, unique key provided
by the Server at time of activation.
The notifications are managed by third-party services supported by the Server,
which determine the notification characteristics and the supported devices.
See the protocol documentation for details.
However, the support for Mobile Push Notifications
by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.
Added the support for recovery of sessions upon unexpected socket interruption during streaming or long polling. This involves an extension of the bind_session command (see LS_recovery_from), with a new error code (4) for CONERR, and a new Server notification (PROG). See the revised "Session Life Cycle" paragraph and the related "Session Recovery" example in chapter 6 for details.
Introduced the "heartbeat" pseudo-request to probe sockets and keep them alive.
Added the "LS_inactivity_millis" request parameter to create_session and bind_session
to leverage Server-side checks of client activity and heartbeats.
Removed redundant uses of the SERVNAME and CLIENTIP notifications, by allowing them to be omitted on Session rebinds when unchanged with respect to the previous time. COMPATIBILITY NOTE: Existing clients using version 2.0.0 and managing SERVNAME and/or CLIENTIP, in order to upgrade to 2.1.0, should ensure that they keep the previous value upon each rebind; in particular, they cannot expect SERVNAME and/or CLIENTIP to be always received on rebind.
Added the new Server error code 71 to the session error codes.
Clarified the syntax documentation to detail how requests can be mapped onto the
various transports (HTTP POST, WS messages, and the added case of HTTP GET).
Also clarified the requirements in terms of percent-encoding in the various cases,
by specifying for which characters the encoding is mandatory (whereas for all
other characters it is optional). Improved the provided examples accordingly,
by removing unnecessary encoding.
Restricted various syntax checks on the requests to become case-sensitive. This is not meant as a change of the TLCP protocol specifications, which always specify the correct case for the keywords. However, some examples in the protocol documentation reported the LS_reqId parameter with a wrong case and have now been fixed. COMPATIBILITY NOTE: Existing clients using version 2.0.0 in which incorrect case is used, perhaps because inspired by some of the provided examples, have to be fixed.
Thoroughly redesigned the protocol, mainly on the response side. The new protocol, named TLCP, helps achieving various improvements, such as the following:
See the included documentation for any details.
Any custom clients based on the previous versions of the protocol are still
supported by Lightstreamer Server.
Redefined the SDK version, which is now 2.0.0 and also represents the version of the underlying TLCP protocol. It is meant that any explicit or implicit reference to the "previous" versions of the SDK may include version 6.0.3 or earlier. The supplied build number is still increasing and can be used to disambiguate.
Restricted the syntax checks on the requests, so that some illegal cases that used to be accepted are now refused. For instance, negative numeric values were, in some cases, treated like missing values and replaced with defaults. COMPATIBILITY NOTE: No client is expected to fall into the above illegal cases.
Added the LS_cause_code parameter to LS_op=destroy requests. The supplied codes will now be possible cause codes of the "END" message. COMPATIBILITY NOTE: The newly available codes are not to be expected from the "END" message, unless extended invocations of LS_op=destroy requests are introduced.
Clarified the use of the Control Link in the protocol documentation.
Added the cause code 48 upon the "END" message (asynchronous close). COMPATIBILITY NOTE: The code can be issued only if the new <max_session_duration_minutes> setting (introduced with Lightstreamer Server build 1741) is used, hence custom clients don't have to be updated to take the code into account, as long as the Server configuration is not changed.
Extended the protocol to support the new client identification mechanism. See the added parameters for the "create_session.txt" request. COMPATIBILITY NOTE: Existing clients have to be extended with the new parameters in order to comply with the current and future versions of the protocol; however, Lightstreamer Server always guarantees the support for old clients.
Added the error code 30 upon control.txt; the case is only predisposed for future special licenses.COMPATIBILITY NOTE: custom clients which check the possible error outcomes don't have to be updated, as long as there is no change in license terms.
Removed the error code 14 upon create_session/bind_session, as it is no longer issued. The check was related with the use in custom clients of the Adapter Set used by the Monitor Console/Dashboard, which is an undocumented (and unneeded) option.
Fixed a clarification comment on the protocol documentation: the single quote is expected to be escaped in field values, not the double quote.
Updated the included examples, to reflect changes in Lightstreamer Server default configuration and predeployed Adapters.
Extended the syntax with the "Preamble" element in the response header, which may be used in specific cases for padding purpose only. COMPATIBILITY NOTE: existing custom clients that perform strict checks on the response headers may refuse the response and eventually fail to establish a session, hence they should be extended. Backward compatibility can be enforced by removing the new <use_enriched_content_type> configuration setting.
Clarified the requirements on the URL encoding of the request attributes.
Clarified the encoding of values in regard to UTF-16 surrogate pairs.
Added new possible error codes, namely 7 and 8, pertaining to both the bind_session.txt request and the END push message. COMPATIBILITY NOTE: custom clients which check the possible error outcomes may have to be revised. However, the new errors are only possible when limits on the maximum number of sessions are set, either through the <max_sessions> settings or through the JMX service or by special licenses.
Introduced a 3-decimal approximation for the reported bandwidth limit values.
Slightly revised the checks for wrong requests and the related log messages issued by Lightstreamer Server.
Revised the documentation, in regard to the names of the main concepts.
Introduced the "reconf" operation, which allows for dinamically reconfiguring the maximum frequency of currently subscribed items; see the Network Protocol Tutorial document for details.
Introduction of Lightstreamer "Duomo" release (Server 4.0).