Lightstreamer Server Changelog

What's new in Lightstreamer Server 7.1.2 Build 1984

Sep 26, 2020
  • Changed the distribution package, by removing the "DOCS-SDKs" folder. Now the SDK resources, including their changelogs, can only be found by browsing the download page (or from their online repositories, where available). For the Server's own documentation resources, a new "docs" folder has been added.
  • The template of adapters.xml for the configuration of in-process Adapters is also available inside the "docs" folder.
  • Note that this Server version is internally based on:
  • Adapter Remoting Infrastructure version 1.9.8
  • SDK for JMX Extensions version 5.5.6
  • SDK for Java In-Process Adapters version 7.3.0
  • SDK for Generic Clients version 2.2.0
  • Moved and renamed the ls-adapter-interface jar in the internal Server deploy. COMPATIBILITY NOTE: Consider the change if trying to upgrade an existing installation. Moreover, if using a custom launch script, ensure that the new library location is now referred.
  • Upgraded a few included third-party libraries to address related security issues. 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.
  • Extended the configuration of CORS permissions, by accepting any scheme as the "scheme" attribute of the <allow_access_from> element. This addresses a compatibility issue with ionic and possibly similar tools, which prevented the configuration of CORS restrictions when clients built with such tools were used. However, for backward compatibility, setting scheme="*" is still expanded with http and https only, although setting scheme="*" host="*" port="*" still accepts everything.
  • Also added a startup WARN log on inconsistent configuration.
  • Fixed the notes on MPN module enablement in the configuration file, to inform that this introduces a reserved URL path needed to support special requests related to the support of Web Push Notifications on Safari. In fact, the introduction dates back to version 7.1.0.
  • Also added the <apple_web_service_path> configuration element, which is needed to configure the reserved URL path. This was also available since version 7.1.0, but its documentation was forgotten.
  • Revised the handling of unrecognized requests based on the reserved URL path: the Server now returns a 400 rather than a 404 error.
  • Added in the General Concepts document the missing notes on how to refer to the reserved URLs.
  • Fixed the implementation of the getCurrClientVersions operation of the ResourceMBean supplied by the JMX service. Previously, the returned map triggered an error in external clients; the JMX Tree was unaffected.
  • Added startup WARN logs on inconsistent configurations of credentials where available.
  • Improved the JMX Tree, by adding robustness upon the invocation of operations by leaving empty fields for the parameter values.
  • Improved robustness upon communication issues that may occur during online license checks.
  • Revised the included welcome page resources, so as to use log4j 2 instead of log4j 1.2 for the adapter implementation.

New in Lightstreamer Server 7.0.3 Build 1885.8 (Jan 7, 2019)

  • 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.

New in Lightstreamer Server 7.0.2 Build 1885.3 (Oct 3, 2018)

  • 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.

New in Lightstreamer Server 7.0.1 Build 1885 (Jun 14, 2018)

  • Introduced various improvements on the support for client https connections (see the <https_server> configuration block).
  • Improved the support for TLS session resumption (see the <use_client_hints_for_TLS_session_resumption> configuration element).
  • Added support for server-side choice of the cipher suite to be used (see the <enforce_server_cipher_suite_preference> configuration element); the server-side choice is now also the suggested setting.
  • This setting is also available in the <rmi_connector> block under <jmx>.
  • Introduced the <disable_TLS_renegotiation> configuration element.
  • Extended the suggested settings of <remove_cipher_suites>. and the suggested settings of <remove_protocols>. Note that this may be too restrictive for some old user agents.
  • This also applies to the <rmi_connector> block under <jmx>.
  • Introduced the support for keystore passwords written on a file (see the <keystore> block).
  • the extension is also available for the <truststore> block and also applies to the <rmi_connector> block under <jmx>.
  • Added checks for runtime replacement of the keystore file (see the <keystore> 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:
  • Fixed some error messages in the MPN module reporting "Apple service" where, actually, "Google service" was meant.
  • Removed some harmless occurrences the "Unexpected context ClassLoader found" warning.
  • Removing the harmless "could not fulfill" warning message upon successful session recovery.
  • Removed some error level log upon normal interruptions of https connections.
  • Extended the internal cause codes on connection interruptions for timeouts.
  • Added to the included Monitoring Dashboard 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.

New in Lightstreamer Server 7.0.0 Build 1860.2 (Apr 23, 2018)

  • 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.

New in Lightstreamer Server 7.0.0 Build 1860 (Mar 1, 2018)

  • Systemwide Changes and Extensions:
  • 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.
  • These are:
  • <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:
  • If using a "DEMO" license with "Vivace" edition configured, just keep the factory settings.
  • If using a "DEMO" license with other editions configured, start from the factory settings, but restrict the feature set accordingly (see below).
  • If using a "LICENSE_SERVER" or "LICENSE_FILE", ask for a license upgrade, with instructions on how to configure it.
  • 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.
  • 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 consequences.
  • These are:
  • Reserved the Adapter Set name "MPN_INTERNAL_ADAPTER_SET" (only when the MPN Module is enabled).
  • COMPATIBILITY NOTE: in the very unlikely case of a name conflict with a custom Adapter Set, the Server will refuse to start and the custom Adapter Set will have to be renamed.
  • Added an internal Data Adapter in all Adapter Sets (only when the MPN Module is enabled). It is available for queries related with MPN state by the various client SDKs. Note that client subscription requests for the new Adapter will not be submitted to the custom Metadata Adapter and will be handled in the SERVER thread pool.
  • The Adapter is hidden from the Adapter Set configuration and its name is now reserved (again, only when the MPN Module is enabled); the name can be configured through the new <internal_data_adapter> flag in the <mpn> block.
  • COMPATIBILITY NOTE: in the very unlikely case of a name conflict with a custom Data Adapter, the Server will refuse to start; anyway, the name can be reconfigured properly.
  • Changed the names used to identify the platforms, according to the changes in the SDK for In-Process Adapters.
  • This affects platform-specific:
  • Logger names.
  • Log messages and error messages.
  • Thread pool names.
  • Configuration elements provided in the <mpn> block to specify the notifier configuration files.
  • Names of the top-level elements of the notifier configuration files.
  • Factory names and paths of the notifier configuration files.
  • COMPATIBILITY NOTE: In any existing installation in which the MPN Module is enabled, the use of platform names should be verified. Points 4 and 5 above are certainly involved and have to be addressed. Point 6 changes the deployment structure and should be addressed for clarity, but does not pose compatibility issues.
  • Reduced the default value of the <min_send_delay_millis> configuration flag, to request more frequent notifications to the third-party Push Notification Service. Moreover, for notifications related to triggers, this restriction is no longer applied.
  • Discontinued the application of the <reaction_on_database_failure> configuration flag in the specific case of badge management. The "abort_operation" policy will always be adopted.
  • Added the <notifier_pools> and <composer_pool_size> configuration flags to the <mpn> block of the main configuration file, to replace the same flags available in the platform-specific configuration files.
  • COMPATIBILITY NOTE: If the flags are used in an existing installation, the new one should be leveraged. However, if the flag has different values for different services, the differentiation cannot be kept. In any case, it is recommended to remove the old flags, to avoid confusion.
  • Renamed the <subscription_timeout_minutes> configuration flag to <device_inactivity_timeout_minutes>.
  • COMPATIBILITY NOTE: Existing configuration files should be aligned.
  • Introduced a garbage collection of devices that remain too long with no subscriptions. The timeout is enforced by the existing (but newly renamed) <device_inactivity_timeout_minutes> configuration flag. Added the related <collector_period_minutes> configuration flag in the <mpn> block.
  • Improved the detection, logging, and recovery of failed attemps to send APNS Notifications.
  • Changed in various parts the schema of the database used by the MPN Module. This also affects the factory hibernate configuration files under conf/mpn.
  • COMPATIBILITY NOTE: In any existing installation in which the MPN Module is enabled, the database should be migrated before running the new Server. To achieve that, please contact Lightstreamer support for instructions.
  • Changed the factory configuration of the database, to suggest HSQLDB for the first tests.
  • 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.
  • 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:
  • Updated the included version of the slf4j library from 1.7.21 to 1.7.25. 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.7 to 1.2.3. This library governs the interpretation of the logging configuration file.
  • COMPATIBILITY NOTE: no compatibility issues are expected, but this library has introduced a few minor non-backward-compatible changes; see the logback changelog for any details.
  • Updated the included version of the janino library from 3.0.0 to 3.0.7. This library handles the interpretation of the trigger expressions in the MPN Module.
  • COMPATIBILITY NOTE: no compatibility issues are expected, but only improvements in the supported syntax; but see the janino changelog for any details.
  • 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.
  • Fixes for Bugs and Defects:
  • 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.
  • Minor Changes and Extensions:
  • 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.
  • Documentation and Deployment Level Changes:
  • 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.

New in Lightstreamer Server 7.0.0 Build 1851 Beta 2 (Dec 20, 2017)

  • Systemwide Changes and Extensions:
  • 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:
  • Reserved the Adapter Set name "MPN_INTERNAL_ADAPTER_SET" (only when the MPN Module is enabled). COMPATIBILITY NOTE: in the very unlikely case of a name conflict with a custom Adapter Set, the Server will refuse to start and the custom Adapter Set will have to be renamed.
  • Added an internal Data Adapter in all Adapter Sets (only when the MPN Module is enabled). It is available for queries related with MPN state by the various client SDKs. Note that client subscription requests for the new Adapter will not be submitted to the custom Metadata Adapter and will be handled in the SERVER thread pool.
  • The Adapter is hidden from the Adapter Set configuration and its name is now reserved (again, only when the MPN Module is enabled); the name can be configured through the new <internal_data_adapter> flag in the <mpn> block. COMPATIBILITY NOTE: in the very unlikely case of a name conflict with a custom Data Adapter, the Server will refuse to start; anyway, the name can be reconfigured properly.
  • Changed the names used to identify the platforms, according to the changes in the SDK for In-Process Adapters. This affects platform-specific:
  • Logger names.
  • Log messages and error messages.
  • Thread pool names.
  • Configuration elements provided in the <mpn> block to specify the notifier configuration files.
  • Names of the top-level elements of the notifier configuration files.
  • Factory names and paths of the notifier configuration files.
  • COMPATIBILITY NOTE: In any existing installation in which the MPN Module is enabled, the use of platform names should be verified. Points 4 and 5 above are certainly involved and have to be addressed. Point 6 changes the deployment structure and should be addressed for clarity, but does not pose compatibility issues.
  • Reduced the default value of the <min_send_delay_millis> configuration flag, to request more frequent notifications to the third-party Push Notification Service. Moreover, for notifications related to triggers, this restriction is no longer applied.
  • Discontinued the application of the <reaction_on_database_failure> configuration flag in the specific case of badge management. The "abort_operation" policy will always be adopted.
  • Added the <notifier_pools> and <composer_pool_size> configuration flags to the <mpn> block of the main configuration file, to replace the same flags available in the platform-specific configuration files. COMPATIBILITY NOTE: If the flags are used in an existing installation, the new one should be leveraged. However, if the flag has different values for different services, the differentiation cannot be kept. In any case, it is recommended to remove the old flags, to avoid confusion.
  • Renamed the <subscription_timeout_minutes> configuration flag to <device_inactivity_timeout_minutes>. COMPATIBILITY NOTE: Existing configuration files should be aligned.
  • Introduced a garbage collection of devices that remain too long with no subscriptions. The timeout is enforced by the existing (but newly renamed) <device_inactivity_timeout_minutes> configuration flag. Added the related <collector_period_minutes> configuration flag in the <mpn> block.
  • Improved the detection, logging, and recovery of failed attemps to send APNS Notifications.
  • Changed in various parts the schema of the database used by the MPN Module. This also affects the factory hibernate configuration files under conf/mpn. COMPATIBILITY NOTE: In any existing installation in which the MPN Module is enabled, the database should be migrated before running the new Server. To achieve that, please contact Lightstreamer support for instructions.
  • Changed the factory configuration of the database, to suggest HSQLDB for the first tests.
  • Discontinued the support for Mobile Push Notifications for clients based on the previous version of the MPN Module. This affects the 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 SDKs, which have now been extended with Mobile Push Notification support based on the new MPN Module.
  • 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> and <server_pool_max_free> settings to become 1000 and 10 respectively. 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.
  • 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.
  • 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.
  • 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 Web and Node.js clients, also for old versions. Instead of assuing 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.
  • 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.
  • 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:
  • Updated the included version of the slf4j library from 1.7.21 to 1.7.25. 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.7 to 1.2.3. This library governs the interpretation of the logging configuration file. COMPATIBILITY NOTE: no compatibility issues are expected, but this library has introduced a few minor non-backward-compatible changes; see the logback changelog for any details.
  • Updated the included version of the janino library from 3.0.0 to 3.0.7. This library handles the interpretation of the trigger expressions in the MPN Module. COMPATIBILITY NOTE: no compatibility issues are expected, but only improvements in the supported syntax; but see the janino changelog for any details.
  • Fixes for Bugs and Defects:
  • Improved the robustness of the Internal Web Server and the Monitoring Dashboard.
  • missing escaping in the Internal Web Server, which might have caused some requests on directories with unusual names to fail.
  • 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.
  • 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.
  • other harmless bugs in the handling of session termination which, in rare cases, could have caused an exception to be logged.
  • 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.
  • the handling of empty requests, which caused an exception to be thrown.
  • Ensured compatibility with Javascript strict mode for Node.js Clients.
  • 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.
  • 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 monitoring 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.
  • Minor Changes and Extensions:
  • 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 JKS 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.
  • 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.
  • Improved the "stop" script to act faster.
  • Documentation and Deployment Level Changes:
  • 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.
  • Aligned the included Clustering.pdf document to the current state of the client SDKs with regard to cookie handling requirements.

New in Lightstreamer Server 7.0.0 Build 1829.6 (Aug 4, 2017)

  • Compatible with the deployment structure of the previous version.
  • Not compatible with configuration files for the previous version; see the compatibility notes below.
  • May not be compatible with licensed features holding for the previous version; see the compatibility notes below.
  • Compatible with the database of the MPN Module for the previous version.

New in Lightstreamer Server 6.1.0 Build 1817 (Feb 13, 2017)

  • Introduced the <response_http_headers> configuration block, which allows for basic control over the HTTP headers used in Server responses. This may be required by some intermediate nodes.
  • Also included a suggested configuration setting which may help to enable streaming support when proxies of several types are involved.
  • 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> 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.
  • 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.
  • Revised internal optimizations on field value processing to focus on the most recent client 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.
  • Aligned the install scripts to current naming of macOS system.

New in Lightstreamer Server 6.0.3 Build 1803 (Sep 6, 2016)

  • 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 the Special MONITOR Data Adapter; the latter, in turn, affected the Monitoring log.
  • 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.

New in Lightstreamer Server 6.0.2 Build 1797 (May 31, 2016)

  • 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.
  • Extended the factory settings for the elements, to comply with the current common recommendations.
  • Clarified in the configuration file that the names chosen for the blocks are available to the clients.
  • Realigned the launch script to suggest the use of java 8.
  • Updated the Client Library included in the Monitoring Dashboard to SDK for Web Clients (Unified API) Version 7.0.2

New in Lightstreamer Server 6.0.1 Build 1780 (Jul 30, 2015)

  • Updated the "file tag" of the launch scripts. The update was due, but forgotten, in the previous release, to reflect the applied changes.

New in Lightstreamer Server 6.0.1 Build 1778 (Jul 20, 2015)

  • May not be compatible with the deployment structure of the previous version; see the compatibility notes below.
  • Compatible with configuration files for the previous version.
  • 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 the JMX interface and the Special MONITOR Data Adapter; this, 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 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 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 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.

New in Lightstreamer Server 6.0 Build 1741 (Feb 16, 2015)

  • 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 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

New in Lightstreamer Server 6.0 Build 1737 (Feb 16, 2015)

  • Systemwide Changes and Extensions
  • 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 and the Android Client SDK, 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 configuration block for configuration details. The new optional 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. 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 Monitoring 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.
  • 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 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 element under the 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:
  • The block has been discontinued, as replaced by the new mandatory block, which features a similar but extended content (see the configuration file for all details). COMPATIBILITY NOTE: Existing configuration files have to be ported. If the block element is present, the Server will refuse to start, in order to avoid confusion. Note that, by just renaming an existing block to , the accessibility of the Monitoring Dashboard will be configured in the same way as the old Monitor Console, with the new JMX Tree disabled.
  • The element under has been dismissed; actually, it was available only to prevent (when "N") the Internal Web Server from considering the Monitor Console URL path as reserved; this is no longer allowed with the Monitoring Dashboard URL path. COMPATIBILITY NOTE: If keeping an existing configuration file, the element, if present, must be removed; otherwise the Server will refuse to start, in order to avoid confusion. Note that if the element had been set to "N", this was only hiding the Monitor Console page, not protecting the data: external access to monitoring data was supposed to be prevented through the block; the same protection should now be ensured through the block.
  • The element under has been dismissed, as replaced by the aforementioned . COMPATIBILITY NOTE: If keeping an existing configuration file, the element, if present, must be removed; otherwise the Server will refuse to start, in order to avoid confusion.
  • The dedicated "LightstreamerLogger.webServer.jmxTree" logger has been added.
  • 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 or and restrict the visibility of the JMX Tree to only this server port, through the settings in the 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 block. Note that the involved users will have access to the full Monitoring Dashboard features. Removed the configuration section from the block. COMPATIBILITY NOTE: If keeping an existing configuration file, the 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 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 and configuration elements in the to make it possible to restrict the protocol versions to be used in the TLS/SSL interactions.
  • Introduced the same elements also in the 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 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.
  • Fixes for Bugs and Defects
  • 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 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 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 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 is set to N.
  • Fixed missing cases of buffer optimization when 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 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.
  • Minor Changes and Extensions
  • 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 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 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, should be explicitly set to N.
  • Improved the check related with the 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 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 configuration element; now there is full control on the number of threads allocated for all the various internal pools.
  • Added the configuration element, which allows some control on the overall number of NIO selectors and related threads used by the Server.
  • Added the 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 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.
  • Documentation and Deployment Level Changes
  • 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 configuration element within 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.

New in Lightstreamer Server 5.1.2 Build 1623.14 (Oct 31, 2014)

  • 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 configuration element in . 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 configuration setting was ignored and delta delivery was always applied. Note that applying delta delivery is the normal case.
  • Introduced the 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.
  • 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 principle, could have caused notifySessionClose to be invoked twice on the same session.
  • 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.

New in Lightstreamer Server 5.1.1 Build 1632.2 (Mar 11, 2014)

  • Improved the JavaScript client SDK; Server unchanged.

New in Lightstreamer Server 5.1.1 Build 1623.2 (Feb 1, 2013)

  • Fixed a bug affecting the configuration of the DEMO license. The 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.

New in Lightstreamer Server 5.1.1 Build 1623 (Jan 14, 2013)

  • Fixed a bug that could have caused data inconsistency or system vulnerability issues in particular client environments and under particular conditions.

New in Lightstreamer Server 5.1 Build 1622 (Dec 21, 2012)

  • 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 Monitoring 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 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 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 and blocks. Also removed the support for the obsolete configuration element . COMPATIBILITY NOTE: Existing configurations still using the old elements have to be updated.
  • Made the configuration flag to be mandatory when 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.

New in Lightstreamer Server 4.0.3 Build 1513.1.11 (Apr 17, 2012)

  • Adopted java 7 as the recommended SDK runtime environment and as the factory setting in the launch scripts.
  • Added the 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.

New in Lightstreamer Server 4.0.2 Build 1513.1.8 (Dec 13, 2011)

  • 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.

New in Lightstreamer Server 4.0.1 Build 1513.1.3 (Jul 20, 2011)

  • Fixed a bug that could have caused read failures on SSL connections upon long requests.

New in Lightstreamer Server 4.0 Build 1513.1.1 (Jul 11, 2011)

  • Fixed and changed the timestamp format on the audit logs.
  • Introduced the execute permission flags for launch scripts also in the zip version of the package

New in Lightstreamer Server 4.0 Build 1513 (Jun 29, 2011)

  • Wholly revised the implementation of the logging subsystem, which is no longer based on log4j, but rather on the "logback" libraries.
  • This has consequences:
  • on the libraries to be deployed in the "lib" folder;
  • on the launch scripts, which have to point to the new libraries;
  • on the configuration file, where the new mandatory element is needed;
  • on the logging configuration file, which has to be in the logback format.
  • Converting an existing configuration file so that the same log is generated by the new Server implies several steps; you can see the comments in the new Server log configuration file and compare the new file with the old one for hints.
  • Possible steps are:
  • converting the log4j syntax into the logback syntax; note, for instance, that file appender properties are now defined through filters and that the pattern for dates may need quotes; unfortunately, we cannot point you to a complete guide;
  • changing the class names of the custom appenders provided by Lightstreamer;
  • reconfiguring LightstreamerMonitorText and LightstreamerMonitorTAB;
  • in order to address FATAL level log, look for ERROR log with a "FATAL" marker;
  • replace any reference to the custom TRACE#com.lightstreamer.log4j.TraceLevel level with DEBUG level; in fact, the Server now uses DEBUG level for that log; note that internal log previously issued at DEBUG level is now issued at TRACE level.
  • Introduced the support for compression in responses, through the "gzip" HTTP content encoding. See and . For the web server support, see the tags with the same names, but inside the

New in Lightstreamer Server 4.0 a4 Build 1495 (Jun 29, 2011)

  • Discontinued the support for java 1.4 SDK and runtime environment. Java 1.5 or later is now required.
  • Introduced a new optional thread pool specifically devoted to the management of the sendMessage requests received from the client. See in the predeployed adapters.xml for details.
  • Improved the checks for connections closed on the client side. This allows for faster disposal of resources and subscriptions held by the connections and the related sessions.
  • The new checks are not based on the keepalives used for streaming connections, hence their effectiveness is not related with the keepalive settings (the keepalives are still useful for the clients).
  • A new "CHECK" selector type is used for this task.
  • Revised the configuration elements for the handling of streaming and polling connections:
  • The mandatory has been introduced; it replaces for the streaming case; if hadn't been defined, the value previously set for should be used.
  • is now mandatory and only related to the polling case; if it hadn't been defined, the value previously set for should be used.
  • has been dismissed; in relation to the streaming case only, the new mandatory has to be defined in its place.
  • Revised the syntax for the configuration of external access to JMX. The new , and sections now replace the old subelements of the section. This allows for extended features introduced in the JMX SDK.
  • Improved the JMX support.
  • Allowed the configuration of the communication port used by the RMI connector and set, by default, this port as the same port used to access the connector. Previously, a random port was used, which could cause problems with firewalls. Allowed the configuration of the hostname used by the RMI connector for remote access support; this avoids the need to set the "java.rmi.server.hostname" JVM property.
  • Allowed the configuration of a specific local IP address on which the RMI connector is allowed to operate.
  • Extended the RMI connector, to also expose the JVM's default JMX agent, which supplies the JVM's platform mbeans.
  • Added the support for SSL communication on the RMI connector for Presto and Vivace editions; keystore specification and cipher suites filtering are supported.
  • Introduced the possibility of suppressing the "Session" MBeans from the JMX support, through the new configuration element. This may improve the performances under critical load.
  • Updated the included libraries for jmx support. A new library has been added.
  • Extended https connections management, by adding the support for client SSL certificates. See , and in the Server configuration file.
  • Simplified the configuration of the JMXMP port used by the stop script.
  • Discontinued the support for the configuration element.
  • Discontinued the support for the main level and configuration elements.
  • Discontinued the support for the main level , , , and configuration elements, which provide defaults for the various or compound elements.
  • Introduced the configuration element, whose meaning is the opposite of . The latter element has been discontinued.
  • Significantly reduced memory usage in case "delta delivery" is disabled.
  • Introduced the configuration element, which allows for overriding the small TCP buffer size imposed on streaming connnections.
  • Optimized the use of TCP buffers on reused connections.
  • Introduced the configuration element, which allows for control on the per-session memory allocation requirements.
  • Reduced the overall per-session memory allocation requirements.
  • Reduced the per-update memory usage.
  • Improved the performances upon bursts of updates from the Data Adapter.
  • Optimized the responses to requests from the Web Client Library. This may reduce delays at connection startup in case of slow clients or network.
  • Forced the completion of the content-length for most streaming responses before asking for a rebind. This also allows for leaving the connection open and available for reuse by the clients.
  • Suggested a higher default (namely 500000) for the response content-length.
  • Fixed a bug in the Monitoring Data Adapter. The PUMP_WAIT.NOTIFY field for the monitor_statistics item also included wait time due to tasks enqueued on a thread pool with no free threads.
  • Extended the monitor_statistics item by adding the UPDATES.EVENTS_SEC, UPDATES.TOTAL_LOST and POOL.QUEUE_WAIT fields; see the documentation in the General Concepts document for details.
  • Removed the CLIENTS.LAST_REFUSED_CONN field from the monitor_statistics item.
  • Removed the PUMP_WAIT.EVAL field from the monitor_statistics item, as the supplied heuristics has never proved better than PUMP_WAIT.SLEEP and PUMP_WAIT.NOTIFY.
  • Revised and extended the supplied Monitor Console, with information on the outbound update throughput and on lost updates for unfiltered subscriptions; the same changes have been applied to the Monitor Demo.
  • Similarly, revised and extended the Internal Monitor log.
  • Dismissed the configuration element. The Internal Monitor log can still be suppressed through the logging configuration file.
  • Provided the new com.lightstreamer.log4j.MonitorLogger logger class to better control the logging; it allows for reducing the frequency and suppressing the log at all; see the inline comment in the log configuration file.
  • Changed the factory configuration, to activate the "text" style monitor, though with a reduced frequency and on the log file only.
  • Changed the internal default for the configuration setting to Y. Note that the factory setting for this flag in the configuration file has always been Y.
  • Fixed the handling of SSL sockets, that, in some cases of normal close, might have caused a warning about a refused SSL renegotiation request to be issued.
  • Addressed compatibility issues which might have prevented streaming from being supported by IOS clients.
  • Improved the protection against Data-Adapter-originated memory leaks.
  • Improved the robustness upon unexpected internal exceptions.
  • Removed possible misleading log messages about NIO infrastructure not being available.
  • Added log of session closing. The same logger that reports session opening (i.e. the logger of client requests) is used.
  • Removed spurious cases of the "Update discarded" message. Also downgraded the message at INFO level, as no malfunctioning is involved.
  • Improved the logging of issues in SSL keystore loading.
  • Added notes in "SSL Certificates.pdf" on converting existing SSL certificates in PKCS12 format to the JKS format requested by Lightstreamer Server.
  • Clarified that the provided "stop" script only works after the initialization of the Server has completed.

New in Lightstreamer Server 3.6.1 Build 1470 (Jun 29, 2011)

  • Introduced decimal digits in the values for the ITEMS.FILTERED_EVENTS_SEC and ITEMS.EVENTS_SEC fields supplied by the Monitoring Data Adapter for the monitor_statistics item.
  • Discontinued the "session timeout" (i.e. the wait, governed by the configuration element, done before closing a session) in all cases in which the session termination is caused by an explicit disconnection by the client. This wait causes the count of active session to be higher then real and it was of no benefit in this case.
  • Introduced a "subscription timeout" (i.e. a wait before unsubscribing from the items currently held by a closing session). This wait is governed by the and the newly introduced configuration elements. This wait applies to all cases of session closing, including cases in which the session timeout has been discontinued and cases in which it has never been applied.
  • Suggested a higher default (namely 10000) for the session timeout only.
  • Revised the session closing process to be more robust. Unchecked exceptions thrown by the Metadata Adapter notification methods can no longer interrupt the closing process.
  • Added the support for the extensions in the sendMessage client methods.
  • Fixed a bug that, in case of a burst of sendMessage requests on the same sequence from the web client, might have caused some requests to be logged as duplicated and not enqueued, until a new submission attempt by the client
  • Fixed a bug that could have caused non ASCII or multiline custom messages supplied to CreditsException to be forwarded to the client in an illegal way, thus possibly causing errors on the client side.
  • Fixed a bug that, in case a selector had been used for items to be subscribed in an unfiltered mode, would have caused rejected events to be notified to the client as lost events.
  • Improved the recovery of incorrect "command" field values in updates received from the Data Adapter for items in COMMAND mode.
  • Extended the factory configuration by setting to the 8888 port. This setting allows JMX management through tools like jconsole and jvisualvm. See notes in PRODUCTION_SECURITY_NOTES.TXT.
  • Used INFO level instead of WARN for logging notices on the initial population of selector-related thread pools.

New in Lightstreamer Server 3.6 Build 1463.2 (Jun 11, 2010)

  • Fixed a bug, introduced with build 1463, which could cause the internal thread pool configured for subscription management to fill up after a SubscriptionException was thrown by a Data Adapter. In particular, all client subscription requests received after the failed one caused an internal thread to block forever. This did not affect Remote Adapters, as the Proxy Adapter does not make use of SubscriptionException.

New in Lightstreamer Server 3.6 Build 1463.1 (Apr 15, 2010)

  • Fixed a compatibility issue with Flex Native AS library version 1.2 and 2.0, which was introduced in build 1463, such that any call to sendMessage from the client would have caused the whole library to stop working correctly.
  • Fixed a compatibility issue with Flex Native AS library version 1.2 and 2.0, which caused, upon the very first call to sendMessage from the client, a 1 second delay before the message processing.
  • Revised the logging configuration of the included demos.

New in Lightstreamer Server 3.6 Build 1463 (Feb 18, 2010)

  • Separated the management of external requests into subtasks related with request parsing, authentication, authorization/execution and subscription. Also separated on different subtasks the authorization/execution details for different tables; hence, compound client requests are now managed in parallel.
  • Also separated on different subtasks the subscription management for single items; hence, all subscription requests to the Data Adapter are performed in parallel and asynchronously with respect to the client request; this means that the subscription notifications could now reach the client before the Data Adapter "subscribe" call has been issued (note that the "subscribe" outcome has never been notified to the client).
  • Extended the Adapter Set configuration to define optional thread pools devoted to hosting request management subtasks related to the Adapter Set.
  • Subtasks related with authentication and with specific Data Adapters in the Adapter Set can also be managed by dedicated thread pools. Previously, request management was entirely performed on the "Server" thread pool; this is still the default.
  • Monitor statistics still aggregate all the optional pools with the "Server" pool.
  • Introduced multiple NIO selectors devoted to read, write and SSL handshaking operations instead of one for each operation type. See also the new configuration element.
  • Added new statistics to the monitoring Data Adapter related to IO operations.
  • Relieved the bandwidth constraints from the initial part of the session; this speeds up the page startup, unless physical bandwidth constraints are also in place.
  • Revised the management of client messages.
  • Increased, from 1 to 30 seconds, the internal timeout used to ensure proper
  • ordering of notifyUserMessage calls for web clients; the timeout can be configured through the element.
  • A shorter timeout can be specified by web clients with each message.
  • Moved message related logging to the new LightstreamerLogger.pump.messages subcategory.
  • Ensured that, upon subscription towards the Data Adapter, the client that causes the subscription receives the update flow exactly as it is sent by the
  • Data Adapter. Previously, the very first updates could have been accumulated
  • into the snapshot before being received (and could have been lost, if the
  • snapshot were not requested). However, this behavior was consistent with the interface specifications, hence it was not a bug.
  • Removed the limitations posed by for events waiting to be sent to the client, if they belong to a COMMAND mode item snapshot.
  • Fixed a bug that affected items requested in COMMAND mode, with snapshot and unfiltered dispatching. In that case, the end-of-snapshot notification was not sent to the clients.
  • Introduced the support for "chunked" transfer encoding in the HTTP response
  • to HTTP/1.1 requests, limited to stream connections.
  • Introduced configuration settings which allow some control over the HTTP
  • headers of the provided responses.
  • Fixed a bug that might cause the first event received for a MERGE subscription
  • to lose the snapshot flag upon dispatching to a Web client. This caused
  • the isSnapshot method in the UpdateItemInfo object to return false.
  • Fixed a bug that provoked incorrect http headers on SYNC ERROR responses;
  • the response, however, were still accepted by the clients.
  • Fixed a bug that might cause a "Content-Length setting of xxx too small ..."
  • message to be issued when not necessary. That could happen in POLLING mode with a very high update rate.
  • Deprecated the configuration element, which was based on the
  • overall number of connections, in favour of the new element, which is based on the number of sessions.
  • Introduced checks on the wait time of tasks on the internal thread pools.
  • Added checks for incorrect "command" field values in updates received from the Data Adapter for items in COMMAND mode. Some cases that were discarded are now accepted.
  • Improved the suggested "ulimit" setting on the Unix/Linux launch script.
  • Improved the handling of accept errors, like "Too many open files", and avoided the risk of a strict loop of accept attempts in that case.
  • Reduced the response size for web client control requests.
  • Fixed a bug in the management of thread pool "max_free" settings: a 0 value was treated as "unlimited" instead of 0.
  • Extended the support for "connection end" notifications issued to the clients.
  • In most cases in which an unknown cause were declared, now a specific cause code is supplied.
  • Used the response completion time instead of the response starting time in the "Date" response HTTP header upon long polling requests.
  • Revised some error messages.
  • Reduced the logging for some common IO errors.
  • Changed the format of requests logging. HTTP POST requests are no longer logged in a HTTP GET syntax.
  • Added trace log of details for all requests and responses and moved log of details for refused requests to info level.
  • Extended the trace log of updates received from the Data Adapter.

New in Lightstreamer Server 3.5.1 Build 1436 (Feb 18, 2010)

  • Introduced the support for the Silverlight client SDK.
  • Disabled the heuristic client availability check for most sessions. After the latest changes in client-side management of the session, too many redundant rebinds would have been needed.
  • Fixed a bug that might cause old versions of J2SE, .NET and J2ME client libraries to issue syntax error messages upon session closure forced on the Server side.
  • Fixed a bug that made the recent extension "Addressed a compatibility issue for Flex clients running on Opera or Safari browser..." ineffective.
  • Fixed a bug on request management triggered by a very small content length setting.
  • Fixed a bug in the management of unchecked exceptions during streaming.

New in Lightstreamer Server 3.5 Build 1428.4 (Jan 29, 2010)

  • Improved the logging of unexpected exceptions.
  • Introduced verbose notifications for exceptions thrown by Adapter methods.
  • Added logging for updates lost upon unfiltered subscriptions (which include RAW mode and ADD/DELETE in COMMAND mode).
  • Suppressed the "Unexpected empty selected list", "Unexpected empty read on a readable socket" and "Unexpected empty write on a writable socket" warnings for not significant cases.