Introduced the support for a new client protocol, named TLCP, with various improvements, that can be leveraged by client SDKs and by custom clients. See the SDK for Generic Clients for details.
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>
and <https_server> blocks, where the allowed
character range was missing. The use of non ASCII or ASCII control characters could,
in particular cases, have caused errors in the communication with the clients.
Added a check on the configured names which now refuses disallowed characters.
COMPATIBILITY NOTE: If disallowed characters have
been used, the configuration may have to be modified.
Fixed the documentation and the management of the
<control_link_address> and <control_link_machine_name> configuration
elements, where the use of non standard characters could, in particular cases,
have caused errors in the communication with the clients.
Unicode names are currently supported by the Web, Node.js, Java, and Android
(Unified API) Client SDKs and by the Generic Client SDK. More will come.
Introduced a limited support for JVM property expansion in the interpretation of the adapters.xml files. It has to be enabled through a new configuration flag, <enable_expansion_for_adapters_config> in the main configuration file. The new factory configuration enables the feature. COMPATIBILITY NOTE: In existing installations the interpretation will not change, as the feature is disabled by default.
Improved the factory settings of the log configuration file, with regard to the display of the logger name by the preconfigured "LSDailyRolling" appender. The new "%-19.19c{19}" setting is recommended, because it causes Logback to shorten the "LightstreamerLogger" part of the names to "L", allowing for a reduced field, while preserving the other parts of the names. The previous setting was "%-33.33c"
Added the "private" property to the <client_identification> configuration element, to prevent sending the determined client address to the client, which is done by some of the Unified Client SDKs.
Clarified the description of the <cross_domain_policy> configuration block,
for what concerns the origin checks on WebSockets.
Clarified the description of the <max_buffer_size> configuration element,
to cite the case of the snapshot for DISTINCT items.
Revised the error messages sent to the client. Improved the messages upon request syntax errors, for the benefit of tests with the Generic Client SDK. Used less specific messages on subscription errors, to avoid specifying item names.
Slightly modified the behavior upon unexpected request URLs. The configured error page
will no longer be sent upon URLs related to features that are currently not supported
or not enabled, but a HTTP 400 error will be issued instead.
Modified the behavior upon syntactically wrong requests. A HTTP 400 error instead
of a HTTP 500 error will now be issued.
Revised the low-level WebSocket close code used, so as to report a non-successful
close only when really needed.
Added a suggested configuration setting in the <response_http_headers> block, which may help to enable streaming support when proxies of several types are involved.
Revised internal optimizations on field value processing to focus on the most recent client libraries.
Improved logging by LightstreamerLogger.requests.messages by adding message
forwarding details at DEBUG level.
Improved logging by LightstreamerLogger.subscriptions at DEBUG level, by handling
the case of byte array values.
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license file, an upgrade of the license file is needed.
MPN Module: fixed handling of cases where a device tries to subscribe
multiple times in a short period of time, possibly causing device duplication.
Note: duplication is still possible if multiple subscriptions are sent on different
client sessions connected to different Server instances at the same time. In this
scenario the MPN Module tries to detect the spurious devices and deletes them
automatically.
MPN Module: fixed handling of "InvalidPackageName" error code from the GCM (now Firebase Cloud Messaging) service. The device is now suspended, similarly to a "NotRegistered" error code.
Updated the included versions of some third-party libraries used by the MPN Module. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred.
Aligned the install scripts to current naming of macOS system.
Fixed a bug in Mobile Push Notification module that resulted in payloads for APNs being rejected if longer than 256 bytes. Now payloads up to 2048 bytes are accepted, as expected.
Fixed a bug introduced in version 6.0, which could have caused incorrect, hence refused, responses to session requests by very old versions of Web Client SDK Library. However, the malfunctioning was only associated with the use of uncommon transports, usually needed only as fallbacks for old browsers.
Fixed a bug introduced with version 6.0, which caused the "pool queue wait" statistics to be always reported as 0. This affected managers based on JMX Extension SDK (including the JMX Tree) and the Special MONITOR Data Adapter; the latter, in turn, affected the Monitoring log.
Fixed a bug in the implementation of the JMX Extension SDK, which caused the values for the AvgQueueWaitMillis and CurrQueueWaitMillis properties in the ThreadPool MBean to be switched.
Updated the included versions of some third-party libraries.
COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed
the previous version of the libraries upon upgrade. Moreover, if using a custom launch script,
ensure that the new libraries are now referred.
Updated the included version of the slf4j library from 1.7.8 to 1.7.21. This library
can be accessed by custom code from Adapters configured for the "log_enabled" ClassLoader.
COMPATIBILITY NOTE: no compatibility issues are expected,
but see the slf4j changelog for any details.
Updated the included version of the logback library from 1.1.2 to 1.1.7. This library
governs the interpretation of the logging configuration file.
COMPATIBILITY NOTE: this library has added some consistency
checks and may behave differently with existing log configuration files that are not
fully compliant. See the logback changelog for any details.
Performed several improvements to the preinstalled welcome page.
Fixed a bug in the management of clearSnapshot for items subscribed to in DISTINCT mode. The bug affected the first update after clearSnapshot and could cause some fields to be dispatched with wrong values. Specifically, let [B2,B1,CS,A1] be a sequence of events sent to a client (where CS is the ClearSnapshot): any field in A1 that was identical in B2 but different in B1 would have been reported with the value it had in B1, hence wrongly.
Fixed a syntax error in the installation script for Linux, that was introduced in version 6.0.1 build 1778.
Fixed a bug introduced in version 4.0 and regarding encoding of custom error messages when sending them to clients based on Web and Node.js (Unified API) Client SDKs; such messages can be supplied through the exceptions thrown by notifyUser and notifyNewSession. The bug only affected messages which included double quotes and would cause the onServerError callback not to be invoked at all on the client JavaScript code.
Fixed an inefficiency in the processing of COMMAND mode snapshot introduced in version
6.0 build 1737. The issue was noticeable only with snapshots of many thousands of keys.
Removed the same kind of inefficiency also with regard to real-time updates.
Improved the handling of cross-origin requests (used by the Web (Unified API) Client SDK), by returning the appropriate headers also upon most error responses.
Revised the parsing of the various configuration files (including adapters.xml) to improve diagnostics. Some space characters are now ignored. COMPATIBILITY NOTE: No change is to be expected in the interpretation of correct configuration files.
Slightly revised the page supplied by the internal Web Server upon a 404 error, to also have IE and Edge display it rather than a custom page.
Enforced upload of audit logs by default when LICENSE_SERVER is configured in lightstreamer_version_conf.xml. COMPATIBILITY NOTE: If the upload is undesirable or problematic for any reason, it can be suppressed with the subsequent <automatic_audit_upload> element.
Extended the factory settings for the <remove_cipher_suites> elements, to comply with the current common recommendations.
Clarified in the configuration file that the names chosen for the <http_server> and <https_server> blocks are available to the clients.
Realigned the launch script to suggest the use of java 8.
Put a reminder about JMX RMI connector credential setting in PRODUCTION_SECURITY_NOTES.TXT.
Updated the Client Library included in the Monitoring Dashboard to SDK for Web Clients (Unified API) Version 7.0.2. COMPATIBILITY NOTE: If LICENSE_FILE is configured in lightstreamer_version_conf.xml and the supplied license file doesn't support Web SDK Version 7.0.2, still no upgrade is needed in order to use the Monitoring Dashboard.
Changed the default for the <handshake_pool_size> setting, from 1 to half the number of available cores, to better cope with intense client reconnection activity.
Updated the "file tag" of the launch scripts. The update was due, but forgotten, in the previous release, to reflect the applied changes.
Put a reminder of the <server_tokens> setting in PRODUCTION_SECURITY_NOTES.TXT.
Fixed a bug triggered by thread pool settings of a 0 "max_size" (which means unlimited in this case) and a 0 "max_free", for pools which support these settings. The bug would cause a progressive and unlimited growth of the pool.
Fixed a bug introduced with version 6.0, which caused the count of the total number of internal selectors to be always reported as 0. This affected managers based on JMX Extension SDK (including the JMX Tree) and the Special MONITOR Data Adapter; the latter, in turn, affected the Monitoring log and the Monitoring Dashboard.
Fixed a bug which, in case of a massive disconnection of clients, could have caused some harmless error conditions on single connections to be reported and handled as serious errors affecting the whole NIO selector.
Extended the check of the <read_timeout_millis> setting in the case of
TLS/SSL handshake operations. Now this delay limit is applied not only to read,
as well as write, operations related to the handshake, but also to any queueing of
elaboration tasks on the "TLS-SSL AUTHENTICATION" or "TLS-SSL HANDSHAKE" thread pool.
Clarified in the log when a connection is closed due to the
<read_timeout_millis> setting.
Updated the included versions of some third-party libraries. COMPATIBILITY NOTE: As the new libraries have different names, make sure you have removed the previous version of the libraries upon upgrade. Moreover, if using a custom launch script, ensure that the new libraries are now referred.
Extended the launch scripts to allow for the customization of the path of the main configuration file through an environment variable; before, a custom modification of the script was the only way to achieve that. COMPATIBILITY NOTE: The script now checks a variable named LS_CONFIG; in case the same name were currently used for a custom variable in the launching environment, this would rise a conflict.
Extended the launch script for unix/linux to clarify how to handle the case in which the file descriptor limit has to be manually supplied.
Extended the installation script for Redhat, so that the installed System V init script now supports the "status" option to determine the current status of Lightstreamer server. This enables the "status" command for the "service" utility.
Revised the internal handling of field values to improve the most common usage scenarios. This also extends the cases of early conversions of field values, hence extending the scope of the <force_early_conversions> configuration element.
Applied some performance improvements to cope with a huge number of concurrent requests for new sessions.
Reorganized the initial configuration phase; some log messages related to adapters and jmx initialization may have changed.
Slightly refactored the launch scripts, to simplify custom changes.
Applied some improvements to the Monitoring Dashboard layout. Changed the layout of the "JVM Memory Heap" chart.
Added some clarifications to the General Concepts document.
Added an early check of the correctness of any trigger expressions configured, whose failure will prevent startup; before, all related notification deliveries would just fail.
Clarified in the Clustering document how to handle the case
in which a Load Balancer discontinues the stickiness during a session and
improved the internal handling of this case.
Also clarified how a rebalancing can be enforced. Introduced, to this purpose,
the <max_session_duration_minutes> configuration flag, to set a maximum
duration for client sessions, after which a client has the opportunity
to recover with a new session, and the Balancer has the opportunity to migrate
the client to a different Server instance.
Fixed a wrong startup check which caused the startup to fail upon a missing <reaction_on_database_failure< flag also when the MPN Module was not enabled.
Fixed a bug in the computation of statistics on the MPN Module activity, used by the PushNotificationsMBean and the internal monitoring Data Adapter and log. The values that represent averages over an interval were reported delayed, among the data for the subsequent interval.
Revised and improved the Monitoring Dashboard.
Fixed a bug which caused wrong decimal parts to be displayed for the "total bytes"
fields when more than 1GB was reported.
Fixed a bug which caused a wrong value to be displayed in the "total heap" donut
when more than 1GB was reported.
Fixed the general behavior related to the case in which the Server was not reachable.
In particular, when reconnecting after a temporary disconnection, the charts are
now cleared to avoid confusion.
Improved the usability in several other small aspects.
Improved the functionality of the preinstalled welcome page in several small aspects and fixed some browser compatibility issues. This also removes some possible harmless warning messages from the Server console.
Fixed a bug introduced in build 1737 which caused loss of compatibility with very old Metadata Adapter binaries (as IllegalArgumentException was thrown upon the invocation of methods with an old signature).
Fixed the determination of the SDK versions used by the clients, which was ignoring the subminor version number. This also affects the values reported by the JMX interface.
Extended the install script for MACOSX (now macOS) with suitable variables to customize the IDs if a new user and/or group has to be created.
Added a default configuration for loggers used by the included third-party "Apache Velocity" library.
Added identification tags at the beginning of various configuration files and launch scripts. By keeping them, future upgrades of these files may be automated.
Removed the main README file, but kept directives on how to upgrade in the new HOW_TO_UPGRADE.TXT file.
Introduced a Push Notification Service (or MPN Module),
which can be leveraged by the clients to have notifications sent to their
devices, through an available third-party Push Notification Service, upon
updates for subscribed items. Currently, only sending notifications
through Apple's APNS and Google's GCM is supported
and requesting subscriptions for such notifications is only supported by the
iOS / OS X (now macOS) and the Android Client SDKs, respectively. See the new chapter 5
in the General Concepts document for an introduction to the feature.
Introduced several new thread pools for the MPN Module operations.
The module also leans on an external database, which, in case of a cluster
of Server instances, can be shared among all instances.
See the new optional <mpn> configuration block for configuration details.
The new optional <max_mpn_devices> element is also available, to set
activity limits for protection.
Introduced a suitable logger, "LightstreamerLogger.mpn", with several
subloggers, for the MPN Module log (see the factory logging configuration
file for details).
When enabled, the MPN Module will also produce its own Audit Logs.
Note that the feature may not be available, depending
on the license terms. It is always available in the LICENSE_SERVER and DEMO
cases, in the latter case with a limit of 20 devices served.
However, the MPN Module is not available with
this edition.
New libraries have also been added under the "lib"
directory for this extension.
COMPATIBILITY NOTE: If using a custom launch script,
ensure that the new libraries are referred.
Conflicts between the new
libraries and existing Adapter code are no longer possible, because of the
newly introduced ClassLoader separation.
Extended the provided 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.
However, with the included license, all the new
statistics will always hold a 0 value.
However, the MPN Module is not available with this
edition, hence all the new statistics will always hold a 0 value.
Introduced 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. However, the MPN Module cannot be enabled
in Moderato edition.
Extended the provided Monitoring Data Adapter with statistics related
with the MPN Module, as documented in the last paragraph of the General
Concepts document. The extension is also leveraged by the new
Monitoring Dashboard. However, in Moderato edition, all the new statistics
will always hold a 0 value.
Introduced the Monitoring Dashboard, which extends and replaces the Monitor
Console. The new page has multiple tabs, which show the information available
in the previous Monitor Console with significant visual improvements;
moreover, the last tab shows the newly introduced JMX Tree, which exposes
the JMX interface in web form.
COMPATIBILITY NOTE: *** IMPORTANT *** The security
level previously adopted for the access to the Monitor Console may no longer
be adequate for the full Monitoring Dashboard, which enables
data view and management, including
the Server shutdown operation (note that the JMX Tree is enabled by factory
settings). We recommend configuring the credentials
and protecting them by making the Monitoring
Dashboard only available on https server sockets,
and furtherly restrict the JMX Tree
to ports not accessible from the Internet,
by leveraging the settings in the <dashboard> configuration block.
See PRODUCTION_SECURITY_NOTES.TXT for a full check-list.
The Monitoring Dashboard can be reached through a different URL path,
whose default is /dashboard. The path can be changed through the
<dashboard_url_path> element under the <dashboard> block.
COMPATIBILITY NOTE: If keeping an existing
installation where the Internal Web Server is leveraged, ensure that there
are no conflicts with the new reserved path.
The extension is associated to several changes with respect to the previous
configuration rules:
New libraries have also been added under the "lib" directory for this extension.
COMPATIBILITY NOTE: If using a custom launch script,
ensure that the new libraries are referred.
Conflicts between the new
libraries and existing Adapter code are no longer possible, because of the
newly introduced ClassLoader separation.
Removed the proprietary Sun/Oracle HTML adaptor to the JMX interface; now, web access to the JMX interface can be performed through the new Monitoring Dashboard, with the included JMX Tree. As a consequence, web access to JMX can now be performed through the normal listening ports, with no need for a dedicated port. This also allows for access through https, which was not available with the old HTML adaptor. COMPATIBILITY NOTE: If there is a requirement to still rely on a dedicated port, perhaps with restricted firewall rules, for web access to JMX, then it is possible to setup a new server port through <http_server> or <https_server> and restrict the visibility of the JMX Tree to only this server port, through the settings in the <dashboard> block. COMPATIBILITY NOTE: Any credentials set to ensure restricted access to the HTML adaptor can be transferred to the Monitoring Dashboard, through the settings in the <dashboard> block. Note that the involved users will have access to the full Monitoring Dashboard features. Removed the <html_adaptor> configuration section from the <jmx> block. COMPATIBILITY NOTE: If keeping an existing configuration file, the <html_adaptor> block, if present, must be removed; otherwise the Server will refuse to start, in order to avoid confusion.
Introduced separate ClassLoaders for the loading of the external libraries used by the Server internally. This means that all these libraries are no longer visible from Adapter code and this should prevent the rise of any conflicts. COMPATIBILITY NOTE: No issues are expected, but see the SDK for Java In-Process Adapters changelog for the details. Should any problem arise, the previous behavior can also be restored, by changing the classpath setting in the Server launch script (see the inline comment for details). As a consequence, added separate libraries in the "lib" directory, containing the custom helper classes needed for the log configuration and the minimal server startup code. Also moved most external libraries in dedicated subdirectories. The above has also required a thorough modification of the launch scripts. COMPATIBILITY NOTE: It is not possible to reuse a current installation of the previous 5.1.2 version and just overwrite the libraries; a fresh installation is needed and the new launch script has to be used. Any custom launch script should be revised.
Extended the log configuration to handle some of the included third-party libraries (see the factory logging configuration file for details). COMPATIBILITY NOTE: Conflicts with any configuration for the same libraries in existing Adapter code are no longer possible, because of the newly introduced ClassLoader separation. COMPATIBILITY NOTE: If reusing an existing configuration, the new loggers should be added; otherwise, some undesired log may be received from the newly included libraries.
Introduced the management of the Proxy Protocol, which allows a local reverse proxy or load balancer to provide information on the remote endpoint in a direct way. See the new configuration elements in the <client_identification> blocks for details, also about how the existing elements interact with the new ones. A dedicated logger, LightstreamerLogger.connections.proxy, has also been added.
Introduced the <allow_protocol> and <remove_protocols>
configuration elements in the <https_server> to make it possible to restrict
the protocol versions to be used in the TLS/SSL interactions.
Introduced the same elements also in the <rmi_connector> block, to configure
the JMX communication channel.
Changed the factory and recommended settings for TLS/SSL sockets, to remove weak protocols, by leveraging the new <remove_protocols> configuration elements. This may cause some clients to no longer be able to connect; in this case, the added configuration can be modified. COMPATIBILITY NOTE: As the change only involves the factory configuration file, if an existing configuration is kept, it will not be affected by the restriction. However, we recommend manually applying the same restriction to these installations as well.
Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license file, an upgrade is needed.
Fixed a bug on the management of sendMessage requests for which a sequence is specified; the bug could have caused some messages to be wrongly considered as duplicated, hence discarded, due to a race condition.
Fixed a bug in the internal detection of connection close causes, which could give rise to cause code notifications of 43 (failure) upon some cases of normal close.
Fixed the "stop" scripts, to take the <hostname> specified for the JMX RMI connector or the "java.rmi.server.hostname" property into account, as the Server does.
Fixed a bug which caused the "stop" scripts to fail when the Server was still blocked in the startup phase, typically while waiting for the initialization of some Adapter.
Improved the launch scripts to enforce, by default, a maximum pause setting for the GC. This fixes cases in which the default settings could allow for pauses incompatible with the default timeouts used by the various Client SDKs in socket inactivity checks.
Fixed a memory leak triggered by exceptions thrown by the Metadata Adapter upon notifyNewTables, which also caused the subscription attempt to never be retried until reissued by the client application.
Fixed a bug in the initialization phase, which could have caused the generation of more threads and NIO selectors than configured. These spurious resources wouldn't have been used by the Server, so they would have been just redundant.
Fixed a missing case in which the error page (customizable through the <error_page> configuration element) should have been issued instead of a generic response.
Fixed the install script provided in bin\unix-like\install for the Redhat case,
which wouldn't have run correctly if the default installation user had been left.
Changed the install script for the openSUSE case, to also force run-at-startup,
as for all other scripts.
Fixed the install script for the MACOSX (now macOS) case, which would have generated a wrong
launch script; also revised the way it creates the dedicated user.
Improved the policy for the speculative sizing of the TCP buffers. Fixed cases in which
the resizing was inappropriate.
Improved the management of internal buffers; this should reduce the use of short-lived memory
for high numbers of sessions, particularly when <reuse_pump_buffers> is set to N.
Fixed missing cases of buffer optimization when <reuse_pump_buffers> is set to N;
this significantly improves the scalability in terms of concurrent TLS/SSL connections.
Improved parsing of HTTP requests for the internal Web Server, to limit the cases of unrecognized requests.
Extended the scope of the <server_tokens> configuration element to all aspects of the interaction with the clients. This fixes a few rare cases in which further identification information could be sent also when "MINIMAL" was specified.
Fixed a harmless bug which could have caused redundant logs of lost updates.
Improved the support for request pipelining upon responses in HTTP 1.1, to deal with the case of pipelined requests occurring during streaming or long polling responses.
Improved the management of items requested in COMMAND mode with unfiltered dispatching: unless <preserve_unfiltered_command_ordering> is Y, a round-robin policy is enforced among the keys on updates waiting to be sent. This should prove to be beneficial when no license-related frequency restrictions are in place.
Changed from N to Y the default of the <disable_session_mbeans> configuration flag, so that the related, potentially high, overhead will not affect JMX clients and the Server, unless explicitly requested. COMPATIBILITY NOTE: If keeping an existing configuration file with this element not defined and taking advantage of the JMX interface and the Session MBeans, <disable_session_mbeans> should be explicitly set to N.
Improved the check related with the <server_pool_max_queue> setting. Now, if optional pools are configured in adapters.xml to absorb specific subsets of tasks from the SERVER pool, their task queues are included in the count under check.
Changed the default configuration when installing the Server as a service on
Windows: NSSM is now configured not to relaunch the Server in case of failure.
If needed, you may configure the service to restart in case of failure by
changing the 'Recovery' property of the service.
COMPATIBILITY NOTE: Obviously, if the Server is currently installed as
a service, it can be updated without being affected by this change; the
change will take place only on the next installation.
Improved the support for the installation of the Server as a service under
Windows; now it is possible to configure the display name, the description
and the startup type. See "README.TXT" under "bin/windows" for details.
Improved the LS.bat script by returning, in turn, the exit code returned by
Lightstreamer server; the error code is useful if Lightstreamer Server
is installed as a service and NSSM is configured not to relaunch the Server,
to let Windows correctly manage the service restart.
Removed the log4j jar from the "shared" folder. It was there only for the benefit of the preinstalled demos. COMPATIBILITY NOTE: If there were custom Adapters relying on the predeployed log4j jar, they could be ported in the new structure only by copying the log4j jar too; preferably, the jar should be put in the Adapters own folders.
Updated the included versions of some third-party libraries.
COMPATIBILITY NOTE: As the new libraries have different
names, ensure that the previous version of the libraries is removed. Moreover,
if using a custom launch script, ensure that the new libraries are now referred.
Conflicts between the new libraries and existing Adapter code are no longer possible,
because of the newly introduced ClassLoader separation.
Improved the implementation of internal timers; this may reduce memory footprint when strong update merging/filtering is involved.
Modified the default setting of the <selector_max_load> configuration element for the Windows case; previously, it had a dedicated value of 1000 to overcome a known JDK 5 NIO bug; however, the currently supported JDK versions are unaffected. COMPATIBILITY NOTE: If leaning on the default setting, the change should just cause a visible reduction in thread usage. Note that very old versions of JDK 6 for Windows are affected by another NIO bug (2177606) and a higher load on the selectors might, in principle, trigger it.
Added the <snapshot_pool_size> configuration element; now there is full
control on the number of threads allocated for all the various internal pools.
Added the <selector_pool_size> configuration element, which allows some control
on the overall number of NIO selectors and related threads used by the Server.
Added the <timer_pool_size> configuration element, which allows for
parallelization of internal timer activity.
Extended the supplied "MONITOR" Data Adapter by adding a "TIME_MS" field,
carrying a UTC timestamp, in all monitor_log_* items.
Extended the supplied "MONITOR" Data Adapter with new statistics on the overall
number of item subscriptions performed by the Clients. Look for CLIENT.ITEM_SUBSCR
and CLIENT.MAX_ITEM_SUBSCR on the General Concepts document for details.
Extended the Internal Monitor log to include the actual number of item subscriptions.
The new statistics is also reported by the new Monitoring Dashboard.
Improved the handling of unexpected empty elements in the "adapters.xml" files.
Moved the activity log of the send_message requests to a suitable sublogger (namely LightstreamerLogger.requests.messages), which allows for easy removal of this log, if overwhelming.
Adjusted the Server's self-identification in answers to clients.
Revised the format of error pages.
Revised the names of some internal thread pools.
Improved logging of closed connection and sessions with details on the connection close cause.
Improved logging of new sessions with information on the type and version of the involved client library, when available.
Introduced the "accept_extra_headers" and "accept_credentials" properties to the <cross_domain_policy> configuration element: if specified they respectively allow the clients to send extra headers and credentials on CORS requests. See description in the configuration file for details.
Optimized memory usage related to item and field names.
Introduced support for the WebPositive web browser.
Clarified in the "SSL Certificates" document how to cope with incomplete certificate chains received.
Revised the Clustering.pdf document, to clarify the conditions for the support of
WebSockets by the Load Balancer.
Simplified the document by removing notes pertaining to the support of old browsers;
added references into the JavaScript SDK documentation for notes on special cases.
Revised and improved the "General Concepts" document, also with the addition of a thorough introductory section.
Added clarifications on when the <enabled> configuration element within <websocket> can be leveraged to cope with a Load Balancer not handling WebSockets correctly.
Wholly revised the preinstalled welcome page and the related demos. Now, the preinstalled resources are no longer meant as a deployment example that can be used as a starting point for creating your own POC. See the new "demos" site at demos.lightstreamer.com for all the available examples.
Modified the policy for the active session count to be reported in the generated audit logs: sessions will no longer be considered as long as they are in "prestarted" state (see CLIENTS.SESSIONS in paragraph 4.2.1 of the General Concepts document for details). This may give rise to lower averages in the audits, which may actually be seen as a relief of contractual terms. In fact, prestarted sessions may include sessions that have not been completely established because of communication issues, but (perhaps for the same cause) are being kept open for some time.
Improved the internal dispatching of NIO tasks; this may remove bottlenecks
in extreme cases.
Improved the internal mechanism of I/O buffer reusal;
this may remove bottlenecks in extreme cases.
Introduced the possibility of customizing the page to be returned upon a "404 Not Found" response, through the <notfound_page> configuration element in <web_server>. Note that the 404 response is not used normally, but only when the Internal Web Server is enabled.
Fixed a bug introduced with version 5.0, by which the <delta_delivery> configuration setting was ignored and delta delivery was always applied. Note that applying delta delivery is the normal case.
Introduced the <use_enriched_content_type> configuration
element; now it possible to choose between two options, text/plain and text/enriched,
the content-type to be specified in the response headers when handling requests issued
using the text output protocol.
By default, text/plain is still used, but the factory configuration supplied specifies
the text/enriched content-type. This has some consequences on the Generic Client SDK;
see the related changelog.
Fixed a bug on the internal statistics, which, under high load, might have caused spurious logs of the form "Current delay for tasks..." with very high delay.
Fixed a race condition that, in rare cases, could have caused a session not to be removed from the statistics when closed.
Fixed a bug that could have caused a startup error if the "max_free" setting of some thread pool had been configured as 0.
Improved the internal implementation of some thread pools.
Revised the internal timers to reduce thread contentions; this should reduce
potential bottlenecks under very high load.
Tested the compatibility with the new Java 8 release.
Changed the factory and recommended settings for TLS/SSL sockets, to remove weak cipher suites. This may cause some clients to no longer be able to connect; in this case, the <remove_cipher_suites> configuration elements should be modified. COMPATIBILITY NOTE: The change only involves the configuration file; if an existing configuration is kept, the Server upgrade will have no effect, although we recommend checking if the restriction can be manually applied to these installations as well.
Fixed the restart.sh launch script, which could have failed to stop the running Server for particular choices of the custom JVM arguments. Also clarified the script use case.
Improved the launch scripts and the installation scripts for the unix/linux environments
in order to support the use of unusual names for the installation directory, such as names
including spaces.
Revised the installation scripts for the unix/linux environments to better handle the case
in which the standard DESTDIR environment variable is not supplied (see the details in
bin/unix-like/install/README.TXT). COMPATIBILITY NOTE:
If using the supplied scripts in order to reinstall the Server, just make sure again that
the scripts are compliant with your environment.
Addressed a possible incompatibility issue on the installation script for MacOSX (now macOS).
Extended the "Clustering.pdf" document, to clarify the conditions for the availability of WebSocket connections when a Load Balancer is in place.
Fixed a bug affecting the configuration of the DEMO license. The <edition> element was ignored, so that the Server would always run in Vivace edition.
Fixed a bug on unfiltered subscriptions in COMMAND mode, whereby an ADD immediately following a DELETE on the same key could have been delayed until the next event on that key.
Fixed a bug which affected the log of "create_session" requests, by stripping the first and the last character; the bug was introduced in version 5.1.
Fixed a bug that could have caused data inconsistency or system vulnerability issues in particular client environments and under particular conditions.
Improved and optimized the allocation and parsing of client requests. Particularly improved the efficiency in the handling of SendMessage requests over WebSocket.
Extended the provided 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 <automatic_audit_upload> configuration element in lightstreamer_version_conf.xml. To this purpose, the pubkey.cer file has been added to the "lib" directory.
Fixed a bug on the HTTP header parsing, that could have caused particular cases of headers lying on multiple lines to be parsed incorrectly.
Fixed a bug on the WebSocket handshake that could have caused the websocket establishment
to be delayed on some browsers.
Fixed a bug on WebSocket closure that might have caused a closure handshake to fail.
Fixed the notification of trial license expiration, corrupted in build 1513.1.11.
Fixed the reporting of syntax errors in the configuration file, which caused further errors.
Fixed the installation script for Redhat, which caused the Server to always run as root,
regardless of the user configured.
Fixed a typo in the console output of the launch script.
Improved the compatibility with the Android browser for Android version 4.x; this may also fix connection issues on some devices.
Deprecated the <base_url_path> configuration flag, which was only leveraged by the SDK for HTML Clients, but it is no longer leveraged by the new SDK for JavaScript Clients. COMPATIBILITY NOTE: If the existing configuration uses this flag, it can be left unchanged and the flag will be still obeyed. However, the support may be discontinued in future releases.
Finally removed the support for the old-style configuration of the listening ports, not based on the <http_server> and <https_server> blocks. Also removed the support for the obsolete configuration element <redundant_delivery>. COMPATIBILITY NOTE: Existing configurations still using the old elements have to be updated.
Made the <server_pool_max_free> configuration flag to be mandatory when <server_pool_max_size> is set to 0, since the previous default as also 0 was not suitable. COMPATIBILITY NOTE: Existing configurations leaning on the mentioned default have to be completed, otherwise the Server startup will fail.
Revised the format of the log messages. Revised the log messages upon syntax errors in client requests (only possible with clients based on the SDK for Generic Clients). Slightly revised the format of the lines produced by the Internal Monitor log, to improve readability.
Added in the Clustering.pdf document notes on how to enable cookie-based stickiness for non-browser clients.
Put minor changes to the sample StockListDemo Adapter.
Introduced support for requests through the WebSocket protocol; the supported versions of the
WebSocket specifications are 8 and 13.
Client libraries can now open a single WebSocket to send all requests and messages and to receive
all data pertaining to a session. At the moment, this feature has been exploited by the JavaScript
Client Library.
The support is enabled by default; see the new <websocket> element in the configuration
file.
A public specification of a network protocol based on WebSockets for custom clients is not
available yet.
Introduced support to cross-origin requests. See the new mandatory <cross_domain_policy>
element in the server configuration file for further details.
COMPATIBILITY NOTE: Current configuration files must be extended with
the <cross_domain_policy> element;
as long as an old HTML Client SDK is used, the element can be left empty.
Note that the new JavaScript Client Library, on most browsers, uses cross-origin XHR or
WebSocket requests to ask for streaming data; hence, the new <cross_domain_policy>
element should be set properly and allow your site origin, in order to ensure that web pages
supplied from your site can access the Server.
COMPATIBILITY NOTE: The above also holds for the Internal Monitor
Console, though the page origin, in that case, is the Server itself, so that a same-origin
access is performed; though most browsers don't need that, the Server origin should be
explicitly allowed in <cross_domain_policy> in order to ensure that the Monitor Console
keeps working on all browsers; see the Client Guide in the JavaScript SDK for details.
The factory setting of <cross_domain_policy> allows any kind of cross-origin access to
the Server; note that this kind of access was not even possible with the previous HTML Client
Library.
Disabled the forwarding of request cookies to some Metadata Adapter methods. As a consequence,
the new factory setting of <use_protected_js> is now N, which is recommended in order
to enable cross-origin access for some browsers which don't support cross-origin XHR
(see the Client Guide in the JavaScript SDK for details).
Introduced the <forward_cookies> configuration element (which defaults as N) to reenable
forwarding when needed.
COMPATIBILITY NOTE: Only if cookie information is used by
Metadata Adapter methods, <forward_cookies> should be set as Y. However, if cookie
information were used for authentication purpose (which is to be avoided, though),
<use_protected_js> should be left as Y and <cross_domain_policy> should be set
carefully.
Revised the licensing configuration, with the introduction of the new "lightstreamer_version_conf.xml" configuration file and the new mandatory <version_conf> configuration element in the main configuration file. See the inline comments in the factory configuration files for details. The <trial> and <production> blocks in the main configuration file have been dismissed. COMPATIBILITY NOTE: In order to keep using an existing configuration file, it must be ported; for the <production> block, refer to the "LICENSE_FILE" license type; for the <trial> block, refer to the "LICENSE_SERVER" license type and to the <http_proxy> block (note that the other parts of the <proxy> block are not available for trial license configuration).
Introduced the "DEMO" license type, which is not based on a license key or trial account. See <type> in the new "lightstreamer_version_conf.xml" configuration file for details.
Introduced the generation of audit log files when trial accounts are in use.
Discontinued the generation of audit logs for any other non-production licenses.
Provided an automatic update check service. See <automatic_update_check> in the
new "lightstreamer_version_conf.xml" configuration file for details. Note that a proper
proxy configuration, through the <proxy> block, may be needed.
New libraries have been added to the "lib" directory for this extension.
COMPATIBILITY NOTE: If any existing Adapter were based
on a different version of one of the libraries in "lib", conflicts may arise.
Revised the licensing configuration, with the introduction of the new "lightstreamer_version_conf.xml" configuration file and the new mandatory <version_conf> configuration element in the main configuration file. See the inline comments in the factory configuration files for details. The <production> block in the main configuration file has been dismissed. COMPATIBILITY NOTE: In order to keep using an existing configuration file, it must be ported to the new conventions.
Revised the licensing policy. The Server can now be run with full features with no need for a free license; as a consequence, the feature-limited "unregistered mode" has been dismissed. The <production> configuration block has then been dismissed. COMPATIBILITY NOTE: In order to keep using an existing configuration file, the <production> block must be removed.
Provided an automatic update check service, through the introduction of the new "lightstreamer_version_conf.xml" configuration file and the new mandatory <version_conf> configuration element in the main configuration file. See the inline comments in the factory configuration files for details. COMPATIBILITY NOTE: In order to keep using an existing configuration file, the configuration of the new file must be added. New libraries have been added to the "lib" directory for this extension.
Changed the names returned by the "MONITOR" Data Adapter for the "LICENSE_TYPE" field, according to the new licensing policy.
Discontinued the support for java 5 SDK and runtime environment. Java 6 or later is now required. COMPATIBILITY NOTE: installations of the Server still based on a java 5 JVM have to be upgraded. Existing Adapters compiled with a java 5 SDK don't need to be upgraded. Revised the suggested JVM configuration in the launch scripts.
Improved the launch scripts for Windows and major Linux and Unix-like Operating Systems,
supplied under the "bin" folder.
As a consequence, manually setting the LS_HOME variable is no longer requested.
Provided suitable scripts to install the Server for automatic execution in many Unix
and Linux environments, including MAC OS X (now macOS); see "install" under "bin/unix-like".
Updated the included version of the third-party slf4j and logback libraries. COMPATIBILITY NOTE: As the new libraries have different names, ensure that the previous version of the libraries is removed. Moreover, if using a custom launch script, ensure that the new libraries are now referred. COMPATIBILITY NOTE: Existing java Adapter binaries leaning on the included support for slf4j/logback should not be affected (but see the slf4j/logback release notes). COMPATIBILITY NOTE: In case further slf4j/logback libraries are needed by the adapters, ensure that their versions are consistent with the new libraries included.
Removed the third-party JUG libraries. Removed the "lib/native" directory and any reference to it in the launch script. COMPATIBILITY NOTE: Existing launch scripts will still work; any included reference to the "lib/native" directory will be useless. Added more third-party libraries to support the new update check service. COMPATIBILITY NOTE: Existing launch scripts should be extended to include the new libraries in the "lib" directory in the classpath. Simplified the factory launch script in order to do a bulk add of the third-party libraries to the classpath.
Revised the implementation of the scripts that stop a running Server. They are now based on the RMI connector to the JMX service. As a consequence, the requirement for the script to work is that the <rmi_connector> block is properly configured, no longer the <jmxmp_connector> block. If the JMXMP connector is not used directly, it can be disabled. COMPATIBILITY NOTE: If an existing configuration disables the RMI connector, it should enable it, possibly exposing the port to local connections only, in order to restore the "stop" script functionality. The change is reflected by the new factory configuration. COMPATIBILITY NOTE: Any existing configuration should be changed, in order to restore the "stop" script functionality, by replacing the preconfigured <jmx> block with the new version included in the factory configuration file (the currently configured port number can be kept).
Removed the third-party Oracle's jmxtools.jar and jmxremote_optional.jar libraries, previously redistributed. This drops the support for the HTML Adaptor and JMXMP Connector to the JMX service. The support can be restored by manually downloading and reinstalling the libraries. See README.TXT in the SDK for JMX Extensions for details. COMPATIBILITY NOTE: If just upgrading an existing deployment, the aforementioned libraries should be manually removed. On the other hand, if the current deployment leans on the HTML Adaptor or the JMXMP Connector, the needed libraries must be obtained from Oracle as shown. Removed the factory preconfiguration of the HTML Adaptor and JMXMP Connector. COMPATIBILITY NOTE: If just upgrading an existing deployment, the aforementioned libraries should be manually removed. The Server no longer leans on these libraries, hence no impact is expected.
Introduced a distinction between "prestarted" and started sessions; see CLIENTS.SESSIONS
in paragraph 4.2.1 of the General Concepts document for details. Prestarted sessions
are not included in the session count as far as Server activity metrics are concerned.
Starting a prestarted session may fail if it would cause any existing limit on the
number of sessions to be exceeded.
Introduced the optional <client_identification> configuration block, in order to help to better identify the remote address of the connected clients. The block is related to each single <http_server> or <https_server> block. See the configuration file for details.
Changed the factory setting of <max_delay_millis> from 200 to 30 ms (setting <max_delay_millis> may improve performances at the expense of a less smooth data delivery). The new, less restrictive, value is suitable for applications in which push data is used to map moving positions, provided that no edition-related frequency limits apply.
Improved the support for TLS/SSL renegotiation
requests by the clients.
Introduced dedicated thread pools to handle the load related with TLS/SSL handshakes;
see <handshake_pool_size> and <https_auth_pool_max_*>
in the configuration file.
Introduced configuration settings to suspend acceptance of new connection requests when the thread pools devoted to request handling are busy; see <*_pool_max_queue>.
Improved the implementation of the temporary refusal of new client connections that can be requested through JMX (see the Server MBean). In case of an HTTPS connection, the refusal now occurs before the initial handshake takes place.
Fixed a compatibility issue with Html Client Library version 5, which could have caused error messages related to session creation refusal to be ignored by the library.
Fixed a bug, introduced in build 1513, which prevented the clean closure of TLS/SSL connections. This shouldn't have had any impact on normal operation.
Fixed a bug which could have caused some connections in long polling to return unnecessarily early, with no data.
Fixed a bug which would have provoked an error in the internal Web Server when sending an empty file, if the compression_threshold had been set to 0.
Fixed a bug which could have caused the processing of "remote logs" sent by the HTML Client Library to fail for unusual user-agents.
Fixed a bug in the management of logback's own log, whereby the log related to
logback initialization issues were not dumped. Now, it is available on the error console;
the log is shown only in case of errors and in that case it is in verbose form.
Introduced a custom Logback StatusListener implementation
(OnConsoleErrorWarningStatusListener). Such StatusListener is now configured by default
and will show on the standard error any internal ERROR or WARN event from Logback
internal status.
Discontinued the support for the old syntax of the JMX configuration. COMPATIBILITY NOTE: if any of the <html_adaptor_port>, <html_adaptor_public>, <html_adaptor_user>, <rmi_connector_port>, <jmxmp_connector_port> is still used in the configuration file, it should be rewritten with the current syntax.
Reduced the response overhead on polling requests issued by the Javascript Client Library.
Extended the format of the audit logs with a random identifier of the Server run. COMPATIBILITY NOTE: existing and new audit log lines can coexist with no problems.
Ensured that, for each type of monitor statistics, the same value is collected by the various consumers for each time period; consumers include the monitor log, Monitor Console and any "MONITOR" Data Adapters.
Extended the logging of client activities, by adding information on the server socket (i.e. <http_server> or <https_server> block) related to the connection.
Revised various error log messages.
Moved some harmless "Sync error" log messages from INFO to DEBUG level.
Expanded and clarified info log messages about session closing.
Discontinued support for the LS_top_max_frequency and LS_slowing_factor request parameters. Such parameters had already been dismissed in the client protocol and all client libraries. COMPATIBILITY NOTE: only clients based on a very old version of the client protocol or a client library might make use of these features. For them, the settings will no longer have any effect.
Slightly changed the response content-types for requests by the HTML/JavaScript Client Library; this may give rise to compatibility issues only for Opera browsers earlier than version 10.
Improved the performances under heavy load and under spikes of external requests, by reducing internal thread contention.
Changed the Connection counts
returned by the Internal monitoring Data Adapter and the
related log, to include sockets currently involved in the initial TLS/SSL handshake.
Similarly, moved the log of accepted connections in https, to be issued immediately,
before the initial TLS/SSL handshake, rather than after.
Improved the parsing of incoming HTTP requests, to make syntax checks more strict.
Denied support for specifying a network interface for the JMX RMI connector when the <data_port> setting is omitted, as this configuration is in fact not working properly. COMPATIBILITY NOTE: we assume that no existing installation could be configured in this way, as it wouldn't have worked correctly; anyway, in such a case, only a warning message will be issued. Fixed a bug which, with the above configuration, would have caused a port conflict error message to be issued.
Introduced the stdout/stderr redirection when launching the Server as a service under Windows. The LS.out file in the predefined logs directory is now generated.
Revised the layout of the Internal Monitor Console and fixed a formatting issue.
Updated the Clustering.pdf document, according with the new features added in the JavaScript SDK.
Fixed the jars of the included StockList demo: LS_StockListDemo_DataAdapter.jar also included the classes already in LS_quote_feed_simulator.jar.
Revised the documentation, in regard to the names of the main concepts.
Fixed the handling of uncommon pathnames in the utility scripts for using the Server as a service under Windows.
Fixed the documentation of the <license_path> configuration element with the extensions introduced in build 1513.1.4
Enlarged the "SNAPSHOT" thread pool (devoted to dispatching of snapshot contents) so as to match the number of available processors, if greater than 10.
Fixed a bug, introduced in version 3.6, which affected subscriptions by the HTML Client Library to items in MERGE mode in case their snapshots was also requested; the update representing the snapshot could have been notified as not being a snapshot by the library.
Fixed a bug in the RelativeFileAppenders$RollingFileAppender implementation: the <FileNamePattern> specified in the <rollingPolicy> was interpreted relative to the launch directory instead of being interpreted relative to the log configuration file location, as it should have been. Now the paths specified in the <FileNamePattern> elements are correctly interpreted. On the other hand note that the <File> element was already correctly interpreted and thus its handling has not changed.
Introduced the support for dinamically reconfiguring the maximum frequency of currently subscribed items, that can be leveraged by client libraries.
Introduced the optional "randomize" attribute for both the <default_keepalive_millis> and <max_idle_millis> configuration elements, that can be used in particular scenarios; see the descriptions in the configuration file.
Fixed a bug in the handling of the <allowed_domain> setting, by which the check could have been avoided by purposedly altering the Html Client Library.
Clarified how resampling works for the LightstreamerMonitorText and LightstreamerMonitorTAB loggers configuration.
Adopted java 7 as the recommended SDK runtime environment and as the factory setting in the launch scripts.
Added the <max_streaming_millis> configuration flag; see the configuration file for details.
Fixed a bug, introduced in version 4.0, affecting polling sessions; under particular conditions of slowness, poll requests could have returned immediately even with no data available, thus causing an unneeded increase of the overall frequency of requests.
Fixed a bug affecting polling sessions; under particular conditions of fastness, poll requests could have returned with no data even if data were available, thus causing data delivery to be delayed.
Fixed the supplied scripts for running the Server as a Windows service, which, under some conditions, could have failed to correctly install the service.
Fixed an issue with potential conflicts regarding proxy settings when a trial license is used; if proxy settings are supplied in order to access the LS trial license validation server, they could also affect connections performed by the Adapters.
Fixed a bug introduced in version 4.0 which could have caused an html client to receive wrong data in case of issues with the use of XHR during a polling session. The error was serious, but the triggering environmental conditions were very rare.
Fixed a potential race condition which could have led to an internal thread deadlock. A high rate of socket disconnections (about 100 per second) was the only triggering scenario observed.
Changed, from 6666 to 6600, the factory setting for the port to be used for accessing the HTML-based JMX interface; in fact, access to port 6666 could be restricted by some browsers because of conflicts with known protocols.
Extended license configuration support by allowing to specify multiple
<license_path> elements, so that, at any moment in the Server life, at least one
should refer to a valid license.
Slightly changed the log upon license refusal.
Fixed a bug that could have caused read failures on TLS/SSL connections upon long requests.
Fixed and changed the timestamp format on the audit logs. COMPATIBILITY NOTE: existing and new audit log lines can coexist with no problems.
Introduced the execute permission flags for launch scripts also in the zip version of the package.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Fixed a bug which caused the extension on the Resource MBean introduced in build 1803
(that is, the handling of multiple subrequests) to become ineffective.
Clarified the documentation of the Resource MBean with respect to the abovementioned
extension.
Introduced the computation of the ThreadPool MBean's AvgExecTimeMillis property also for the TLS-SSL HANDSHAKE pool. Previously, the property was not computed (as for all cpu-bound pool) and its value was always null.
Modified the statistics on Control Requests (hence, on all Requests as well) in the Resource MBean, so that, when a single Request from the client comprises multiple subrequests, the count will report all subrequests rather that the aggregated one.
Revised the javadocs overview.
Revised javadoc formatting style.
Modified the Session MBean, by removing the recently added ClientBuild property and extending the ClientVersion property to report the full version signature. COMPATIBILITY NOTE: Custom managers relying on the ClientBuild attribute, or on ClientVersion to report only a version number, should be revised.
Extended the Session MBean with more information on the Client SDK type, if available (see getClientBuild).
Introduced the support for the new Push Notification Service. This includes the new PushNotifications MBean and extensions in the DataAdapter, AdapterSet, Server, and Load MBeans, to report the served devices and the new thread pools.
Introduced the ThreadPool MBeans, one for each of the thread pools used internally
by Lightstreamer Server. See the ThreadPoolMBean class documentation for details.
Extended the Load MBean to provide a list of the names of all active thread
pools (see getThreadPools). Note that the pool naming has changed in Server
version 6.0.
Introduced a fake MBean of type "Session" and no SessionId associated, which is added when the creation of the Session MBeans is disabled; it acts as a reminder that the feature can be enabled. COMPATIBILITY NOTE: Custom managers should recognize and ignore the new MBean; it does not expose the properties of a normal Session MBean. Added a "destroySession" operation in the Resource MBean; this overcomes the unavailability of this functionality when Session MBeans are disabled.
Introduced the "clearSnapshot" operations on the DataAdapter MBeans, for clearing the state of an item bypassing the Data Adapter (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the documentation for details and usage clarifications.
Extended the Resource MBean and the DataAdapter MBeans with new statistics on the overall number of item subscriptions performed by the clients (see get*ItemSubscriptions).
Extended the Session MBean with information on the Client SDK type, if available (see getClientType and getClientVersion).
Extended the life of the Session MBean until the termination of the
notifySessionClose invocation; hence, from within this callback, the Metadata
Adapter can access the MBean and get the final value of cumulative statistics.
Added, for completeness, the IsClosed property (which is true in that case).
Fixed the getSessionListForItem method in the DataAdapter MBeans to return an empty list instead of null upon items not subscribed to.
Clarified the docs about the inclusion of "prestarted" sessions.
Fixed wrong links in the docs.
Extended the Stream MBean and the Session MBean, with new properties carrying statistics on the elaboration of Client Messages, sent through the SendMessage requests. See the documentation for details.
Revised the reporting of bandwidth limits in the Session and Stream MBeans.
Fixed an inconsistency in the Session MBean; the AllocatedMaxBandwidthKbps
property getter now returns the server-side bandwidth limit for the Session,
according with the setter behavior; before, it used to return the limit currently
enforced on the session, which is now returned by the new read-only property
AllocatedBandwidthKbps. COMPATIBILITY NOTE: Custom
managers that use the AllocatedMaxBandwidthKbps getter may need to be changed.
Clarified when the special 0 value is possible in bandwidth limit values.
Introduced a 3-decimal approximation for the reported bandwidth limit values.
COMPATIBILITY NOTE: Custom managers that rely
on the reported bandwidth limits for internal computations may need to be
revised.
Changed the count of the overall number of connected sockets in the
Resource MBean to include sockets currently involved in the initial TLS/SSL
handshake.
Extended the Resource MBean by introducing the count of sockets currently
performing a TLS/SSL initial handshake and the count of failed handshakes.
Extended the Resource MBean with new properties to report the connections used for WebSocket interaction. The current and maximum number of such connections and the cumulative number of upgrades from HTTP/HTTPS are reported. See the documentation for details.
Extended the Load MBean to report the current queue on the newly introduced
thread pools; see "getQueueStageHandshake".
Removed from the Load MBean the previously deprecated "getQueueStageIOPush"
and "getQueueStageHTTPSAccept" methods.
COMPATIBILITY NOTE: Custom managers that still request these properties may
may need to be revised.
Revised the various session count statistics in the Resource MBean: prestarted sessions
are no longer included; see CLIENTS.SESSIONS in paragraph 4.2.1 of the General Concepts
document for details.
Extended the Resource MBean to provide the count of current prestarted sessions.
Extended the Session MBean to indicate when a session is in prestarted state.
Removed the deprecated getSubscribedItemList and getSubscribedItems methods from the Session MBean. COMPATIBILITY NOTE: Any custom managers still using those methods may have to be changed.
Added the getVersionConfigFile and getVersionConfigAsProperties methods in the Server MBean to make it available the contents of the newly introduced version configuration file.
Changed the names returned by getLSLicenseType in the Server MBean, according to the new licensing policy.
Fixed the comment on the "CumulControlRequest" property of the Session MBean on the html adaptor.
Refined the periodic statistics carried by the getAveragePoolQueueWait property of the Load MBean.
Fixed the included Version.txt file, which was not reporting the latest build number.
Regenerated the API documentation with the newest JDK default template.
Specified the version number in the javadocs.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Introduced a "first_connection_timeout_millis" configuration parameter for the Robust Proxy Data Adapter, similarly to what is available for the Robust Metadata case (but with a 0 default, which is consistent with the previous behavior).
Introduced a new strategy for the "events_recovery" configuration parameter of the Robust Proxy Data Adapter. See "enforce_snapshot" in the sample configuration file under "adapter_robust_conf_template".
Extended the configuration templates to advertise the variable-expansion feature introduced in Server version 6.1.
Improved a log message, which was unclear, related with Remote Adapter unavailability.
Embedded the Proxy Adapter binaries related with the current version of the Adapter Remoting Infrastructure. Previously, the ls-proxy-adapters.jar file supplied by the ARI SDK had to be added to the Adapter Set libraries. As a consequence, the ls-proxy-adapters.jar binaries are no longer provided directly. As a further consequence, the compatibility constraint of the Adapter Remoting Infrastructure is now stated directly with respect to the Server. COMPATIBILITY NOTE: Existing Adapter Set deployments based on the old Proxy Adapters supplied in ls-proxy-adapters.jar are supported seamlessly.
Introduced the "PROXY_FOR_REMOTE_ADAPTER" and "ROBUST_PROXY_FOR_REMOTE_ADAPTER" reserved names to be used in place of the class names for the inclusion of the new embededd Proxy Adapters in adapters.xml. COMPATIBILITY NOTE: The new reserved names are not expected to conflict with custom class names in an existing adapters.xml. COMPATIBILITY NOTE: In order to port an existing Adapter Set configured for Remote Adapters to the new Proxy Adapters, the adapters.xml configuration file has to be changed to comply with the new naming (and ls-proxy-adapters.jar can be discarded).
Introduced an explicit initialization request sent by the Proxy Adapters to the Remote Adapters upon connection. This now allows for:
See "remote_params_prefix" in the sample "adapters.xml" files for details on how the initialization parameters can be specified. COMPATIBILITY NOTE: Existing Remote Servers based on the .NET and Generic Adapter SDKs have to be upgraded to the new SDK version. However, backward compatibility can be restored by disabling the new request through the new "init_remote" configuration parameter.
Discontinued the support for the "Piped" versions of the Proxy Adapters. Only the "Networked" versions and their "Robust" extensions are now available. COMPATIBILITY NOTE: Existing installations based on the "Piped" versions should be ported to the "Networked" versions. But we don't expect this case to occur for production deployments, as the use of the "Piped" versions was not recommended for production. Removed the "eos_count_limit" and "eos_sleep_time" configuration parameters, which were only used by the "Piped" versions of the Proxy Adapters.
Introduced the "remote_address_whitelist" parameter, to be used to specify a list of IP addresses, from where Remote Adapter connections are accepted by a Proxy Adapter. If missing, connections are still accepted from any host.
Changed the logger names used by the Proxy Adapters for their own logging and replaced the old logger configuration with the new one in the Server's factory log configuration file (see the supplied file for details). COMPATIBILITY NOTE: To keep using an existing log configuration file, the logger should be manually replaced too. Obviously, as long as existing Adapter Set deployments based on the old Proxy Adapters are in use, the old logger should also be kept.
Removed the description of the ARI protocol (made available to custom Remote Servers for implementing the Adapter interface via TCP) from the scope of this component. Now, the "Adapter Remoting Infrastructure" component (no longer an SDK) only covers Lightstreamer-Server-side support (based on the Proxy Adapters) for all remoting SDKs. See the new "SDK for Generic Adapters" for the ARI protocol topic.
As a consequence of the introduction, in Server version 6.0, of separate ClassLoaders for the loading of the external libraries used by the Server internally, specifed the suggested settings in the factory Proxy Adapter configuration (through the new <classloader> setting), to enforce sharing of the slf4j/logback logging libraries with the Server. This confirms the previous behavior, hence the log configuration of the Proxy Adapters is still included in the Server log configuration file.
Revised the factory configuration of the optional thread pools in adapters.xml; with the new suggested configuration, some adapter-related pools are enabled and will take on some tasks previously falling in the "SERVER" pool.
Revised the default naming of connections (for logging purposes) and related threads,
by leaning on the configured proxy names instead of progressive numbers.
Introduced name suffixes to distinguish subsequent streams that may be
created by the Robust Proxy Metadata Adapter.
Moved the configuration examples (which include parameter descriptions) under "doc".
Provided a new introductory document.
Revised and relieved the Notes on Method Sequence for the Notify New Tables and Notify Tables Close methods, according with the locking policy change and the new <sequentialize_table_notifications> parameter introduced in SDK for Java Adapters version 5.1.
Discontinued the compatibility with the previous version of the Server.
Revised the low level log of the Proxy Adapters, to allow for suppressing the log of real-time messages while logging the requests and replies from the Remote Server; see com.lightstreamer.adapters.remote in the Server log configuration file. Fixed a typo in the com.lightstreamer.adapters.remote logger description.
Introduced new configuration properties to let the RobustNetworkedMetadataProvider return a custom error notification to the client upon a request for a new session when the Remote Server is currently unavailable; see "notify_user_disconnection_code" and "notify_user_disconnection_msg" in "conf\sockets(robust)\adapters.xml".
Introduced new configuration properties to let the RobustNetworkedDataProvider manage a custom item which carries notifications about the availability of the Remote Server; see "remote_adapter_status" in "conf\sockets(robust)\adapters.xml".
Added checks on the correct configuration of the Proxy Adapters; in fact, wrongly setting a notify port on a Proxy Metadata Adapter could lead to wrong behavior.
Improved the extraction of HTTP headers supplied by the "NUS"/"NUA" request.
Added log to detect issues caused by obsolete Remote Servers
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Extended the configuration template to advertise the variable-expansion feature introduced in Server version 6.1.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Revised the javadocs overview.
Revised javadoc formatting style.
Clarified in the Javadocs under which conditions field values supplied to the ItemEventListener can be reused.
Revised the title of the provided JavaDocs.
Added identification tags at the beginning of the various sample adapters.xml files provided. By keeping them in your own adapter configuration files, future upgrades of these files may be automated.
Extended the MetadataProvider interface to support the new
Push Notification Service (aka MPN Module). When enabled, the new methods will be
invoked in order to validate client requests related with the service. See the
Javadocs for details (see also the <mpn_pool> element in the sample
adapters.xml for Adapter related thread pool configuration).
COMPATIBILITY NOTE: Existing Metadata Adapter source
code has to be extended in order to be compiled with the new jar (the new methods
could just throw a NotificationException), unless the Adapter class inherits
from one of the supplied FileBasedProvider, LiteralBasedProvider or
MetadataProviderAdapter. In the latter case, the Adapter will accept any
MPN-related request; however, MPN-related client requests can be satisfied only
if the involved "app" has been properly configured.
On the other hand, existing Metadata Adapter binaries are still supported
(but for the unlikely case of a name conflict with the new methods) and will
refuse any MPN-related request (unless the Adapter class inherits from one of
the supplied FileBasedProvider, LiteralBasedProvider or MetadataProviderAdapter,
where the above considerations hold).
However, the MPN Module is not available with
this edition.
Extended the MetadataProvider interface to support
the new Push Notification Service (aka MPN Module). However, the MPN Module
cannot be enabled in Moderato edition.
COMPATIBILITY NOTE: Existing Metadata Adapter source
code has to be extended in order to be compiled with the new jar (the new methods
could just throw a NotificationException), unless the Adapter class inherits
from one of the supplied FileBasedProvider, LiteralBasedProvider or
MetadataProviderAdapter.
On the other hand, existing Metadata Adapter binaries are still supported.
Changed the initialization order for Metadata Adapters and Data Adapters. By default the Metadata Adapter is initialised before any Data Adapter of the same Adapter Set. The optional configuration parameter "metadata_adapter_initialised_first" has been added to the adapters.xml configuration file to initialise the Metadata Adapter in parallel with the Data Adapters. COMPATIBILITY NOTE: Existing Adapter Sets relying on a concurrent initialization of Data and Metadata Adapters (may be the case for Remote Adapters) should use the "metadata_adapter_initialised_first" configuration parameter to restore the parallel initialization. Distinct Adapter Sets are initialised in parallel as before.
Introduced the "clearSnapshot"/"smartClearSnapshot" operations on the ItemEventListener, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the javadocs for details. COMPATIBILITY NOTE: Existing Data Adapters don't need to be recompiled. Extended some demo source code to show how the new methods can be invoked.
As a consequence of the introduction of separate ClassLoaders for the loading
of the external libraries used by Lightstreamer Server internally, all these libraries
are no longer visible from Adapter code.
COMPATIBILITY NOTE: Existing Adapters that lean on libraries
included by Lightstreamer Server should now include these libraries explicitly.
Sharing of library state is no longer possible,
but it was not supposed to be leveraged anyway.
The only exception is for logging. If any Adapter leans on the instance of slf4j/logback
included by the Server (perhaps in order to share the log configuration), it can be
configured to share these libraries through the new <classloader> setting in
adapters.xml (see the sample adapters.xml for details). In particular, this is the
case for Proxy Adapters.
However, note that the slf4j and logback libraries have
been updated; hence, if any custom Adapter has to keep sharing these libraries,
check out the slf4j and logback changelogs for any compatibility issues.
Introduced separate ClassLoaders for loading the resources related with the various Adapter Sets. As a consequence, classes pertaining to different Adapter Sets can no longer see each other, though they can still share any classes defined in the "shared" folder. By the way, note that any classes found in "lib" and "classes" under the Adapter Set folder are now added to the Adapter Set ClassLoader, even if all the Adapters declare a different dedicated <install_dir>. COMPATIBILITY NOTE: Existing Adapter code that leans on class sharing between the Adapter Sets may fail; however, the old behavior can be restored by simply placing all jars and classes in the "shared" folder. Moreover, introduced the possibility of loading the classes of single Metadata or Data Adapters in dedicated ClassLoaders (still inheriting from the ClassLoader of the Adapter Set); see the new <classloader> configuration element in the sample adapters.xml for details.
Fixed a race condition that, in principle, could have caused notifySessionClose to be invoked twice on the same session.
Embedded the binaries of the basic LiteralBasedProvider in ls-adapter-interface.jar. As a consequence, the ls-generic-adapters.jar file is no longer provided. Note that this library was also predeployed in the "shared" folder. COMPATIBILITY NOTE: If an existing Adapter installation is based on the LiteralBasedProvider and includes the ls-generic-adapters.jar file within its own folder, the jar should be removed to avoid confusion. Also note that the removed library also included the sample FileBasedProvider, which is no longer provided. COMPATIBILITY NOTE: in the unlikely case of an existing Adapter installation based on the FileBasedProvider, the old ls-generic-adapters.jar should be left; if it had been left in the "shared" folder, it is recommended to place it within the Adapter's own folder. Extended the interface Javadocs to include the LiteralBasedProvider, previously documented under the "examples" folder.
Introduced a sample adapters.xml configuration file, which includes the description of all parameters, in the new "adapter_conf_template" folder under "docs". It should be used as the reference for adapters.xml writing. On the other hand, the adapter configuration file of the preinstalled welcome page is no longer meant as a reference.
Revised the factory configuration of the optional thread pools in adapters.xml;
with the new suggested configuration, some adapter-related pools are enabled
and will take on some tasks previously falling in the "SERVER" pool.
Clarified the docs with regard to the thread pools involved in the various adapter
invocations.
Added details in the debug log of events received from the Data Adapters.
Fixed an error in the documentation of getWinIndex in the TableInfo class; clarified how the field can be used to match subscription and unsubscription requests.
Fixed some truncated short descriptions in the javadocs.
Improved the Javadoc, with introductory notes and instructions on the use of the sample LiteralBasedProvider.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Changed the SDK name, which was "SDK for Java Adapters", to avoid confusion with the new SDK for Java Remote Adapters.
Clarified the license terms for the included example source code.
Fixed an incorrect usage of SimpleDateFormat in some of the provided demo source files.
Relieved the locking policy on the invocation of the "notifyNewTables" and
"notifyTablesClose" callbacks, so that delays on the callback execution no longer
propagate to the update flow for the session. As a consequence, blocking implementations
of "notifyNewTables" are now allowed. See the javadocs for details.
COMPATIBILITY NOTE: In some cases, the relative order
of data and notification events may change, but only when different tables
are involved, in which case no order specification has never been claimed.
This also fixes an issue in the support of the Adapter Remoting Infrastructure,
in which the implementation of "notifyNewTables" can't but be potentially blocking.
Introduced the <sequentialize_table_notifications> tag in the Metadata Adapter configuration, to allow for also relieving the sequentialization constraint on the "notifyNewTables" and "notifyTablesClose" callbacks, so that delays on the callback execution would not even propagate to other subscription requests for the session. See the inline comment in the demos "adapters.xml" for details.
Fixed a typo in the documentation of the init method of both adapters, where "adapter_conf.id" was reported instead of "adapters_conf.id".
Improved the extraction of HTTP headers supplied to notifyUser.
Clarified the API documentation in several points.
Regenerated the API documentation with the newest JDK default template.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Fixed a problem introduced by a known Java compiler bug, which caused a "verify error" to be reported at runtime. The problem only affected the previous build 24.
Improved the Javadocs, by shortening the concise descriptions of some classes and methods.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Introduced parallelization of the invocations of methods on the Remote Metadata Adapter; in fact, previously, the invocations were always done sequentially, with possible inefficient use of the available resources (invocations for the Data Adapter were already done in parallel). Also introduced suitable configuration; see the docs for MetadataProviderServer and DataProviderServer for details. COMPATIBILITY NOTE: If existing Remote Metadata Adapters don't support concurrent invocations, sequential invocations should be restored by configuration.
Introduced the possibility to configure the keepalive time (which was fixed to one second) through the custom "lightstreamer.keepalive.millis" system property.
Fixed the API documentation of class Server, by removing the method "init". In fact, the method was not meant to be public.
Improved logging; now the detailed log of request-reply messages not including notification messages (i.e. data updates) is possible. Moreover, the keepalives can now be excluded from the the detailed log of request, reply and notification messages.
Added missing javadocs for the RemotingException class and a few other fields.
Fixed some mistaken class names and other typos in the javadocs comments.
Also removed the spurious DataProviderProtocol docs.
Revised javadoc formatting style and fixed a formatting error in DataProvider class.
Fixed the Javadocs for DataProvider and MetadataProvider interfaces on the way
implementations are supplied.
Fixed the handling of generic exceptions thrown by a DataProvider or MetadataProvider implementation: generic exceptions are now forwarded to the connected Lightstreamer Server whenever possible.
Included in Lightstreamer distribution. The features are similar to the current SDK for .NET Adapters (version 1.9 build 1008).
Improved the app configuration example, by showing how to configure the keepalive messages.
Dropped the compatibility with .NET environment versions prior to 4.0. 4.0 or later is now required. COMPATIBILITY NOTE: Check the .NET runtime environment in use before updating existing Remote Adapter installations. If the Remote Adapter is run by a custom launcher, and if the application had been compiled for an earlier .NET environment, the loading of the new library may fail. In this case, the application has to be recompiled and possibly ported to a 4.0 or later target environment.
As a consequence of the new runtime requirements, the names of the provided exe and dll files have changed, to lose the _N2 suffix. COMPATIBILITY NOTE: Existing Remote Adapter installations may require some renaming within some custom script. If the Remote Adapter is run by a custom launcher, a rebuild of the application may be needed to refer to the new dll name.
Introduced parallelization of the invocations of methods on the Remote
Metadata Adapter; in fact, previously, the invocations were always done
sequentially, with possible inefficient use of the available resources.
Several policies are now available for both Metadata and Data Adapter method
invocation, and can be configured through the application configuration;
see the new sample file in the new "conf" directory for details.
By default, the invocations to the Metadata Adapter methods are now done
in parallel.COMPATIBILITY NOTE: If existing
Remote Metadata Adapters don't support concurrent invocations, sequential
invocations should be restored by configuration.
Introduced the possibility to configure the keepalive time (which was fixed to one second) through the application configuration; see the new sample file in the new "conf" directory for details.
Improved logging; now the keepalives can be excluded from the the detailed log of request, reply and notification messages.
Fixed obsolete notes in the docs for DataProvider and MetadataProvider interfaces on the way implementations are supplied.
Improved logging; now the detailed log of request-reply messages not including notification messages (i.e. data updates) is possible.
Reduced some long pathnames in the docs pages, which could cause issues on some systems.
Introduced the possibility to provide Adapter initialization parameters
directly from the Proxy Adapter configuration; such parameters (to be
supplied as explained in the Adapter Remoting Infrastructure documentation)
will be added to those already received by the Metadata or Data Adapter
Init method.
As a consequence, the Init method of a Remote Adapter is no longer invoked
upon Remote Server startup, but only after the connection with the Proxy
Adapter has been established. COMPATIBILITY NOTE:
The move of initialization stuff performed in the Init method from before
to after the connection attempt may be undesirable. If this is the case:
Extended the MetadataProvider interface to support the new
Push Notification Service (aka MPN Module). When enabled, the new methods will be
invoked in order to validate client requests related with the service. See the
interface docs for details.
COMPATIBILITY NOTE: Existing Remote Metadata Adapter
source code has to be extended in order to be compiled with the new dll
(the new methods could just throw a NotificationException),
unless the Adapter class inherits from one of the supplied LiteralBasedProvider
or MetadataProviderAdapter. In the latter case, the Adapter will accept
any MPN-related request; however, MPN-related client requests can be satisfied
only if the involved "app" has been properly configured.
On the other hand, existing Remote Metadata Adapter binaries hosted by an old
version of the .NET Adapter SDK still run with the new version of Lightstreamer
Server and the Proxy Adapters, as long as the MPN Module is not enabled.
However, the MPN Module is not available with
this edition.
Extended the MetadataProvider interface to support
the new Push Notification Service (aka MPN Module). However, the MPN Module
cannot be enabled in Moderato edition.
COMPATIBILITY NOTE: Existing Remote Metadata Adapter
source code has to be extended in order to be compiled with the new dll
(the new methods could just throw a NotificationException),
unless the Adapter class inherits from one of the supplied LiteralBasedProvider
or MetadataProviderAdapter.
On the other hand, existing Remote Metadata Adapter binaries hosted by an old
version of the .NET Adapter SDK still run with the new version of Lightstreamer
Server and the Proxy Adapters.
Introduced the "ClearSnapshot" operations on the Remote Server's IItemEventListener, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the interface docs for details. COMPATIBILITY NOTE: Existing Data Adapters don't need to be extended or recompiled.
Removed the dependency of the SDK library from log4net for its own logging.
Custom launchers should use the new static SetLoggerProvider function in the
"Server" class to provide suitable consumers, by implementing new dedicated
interfaces (see the docs for details).
COMPATIBILITY NOTE: Existing custom launchers will still run with the new
SDK library, but they won't print any log coming from the library itself;
in order to print such log, they have to be extended.
The supplied DotNetServer_N2.exe still leans on log4net, over which it
forwards all library's log.
Updated the included log4net dll to version 1.2.13; note that, according
with the above change, the log4net library is no longer required in order
to compile the Adapters, but only in order to run DotNetServer_N2.exe.
Changed DotNetServer_N2.exe so that the /host command line argument is now mandatory; this disallows the use in combination with the "Piped" versions of the Proxy Adapters. COMPATIBILITY NOTE: this is just a consequence of the discontinuation of "Piped" versions brought by Adapter Remoting Infrastructure 1.7; see related notes.
Fixed an error in the documentation of the WinIndex property in the TableInfo class; clarified how the field can be used to match subscription and unsubscription requests.
Simplified the included documentation, to lean on the Adapter Remoting Infrastructure documentation for architectural aspects and on the available examples for the deployment aspects.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Modified the SDK versioning, which now differs from the internal dll versioning.
Improved the performances under high update load.
Relieved the restrictions on the use of the NotifyNewTables method, according with the locking policy change introduced in SDK for Java [In-Process] Adapters version 5.1.
Clarified the API documentation in several points.
Fixed a bug that affected the special Update method overloads based on the IItemEvent and IIndexedItemEvent interfaces. In case the "robust" version of the Proxy Data Adapter had been in use, the updates could have been discarded.
Improved the extraction of HTTP headers supplied to NotifyUser.
Clarified the API documentation in several points.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Check for newer versions on npm.
Fixed a bug in the parsing of requests that could lead to incorrect results in case of two or more simultaneous requests.
Removed the library and jsdocs from the package. Only links to online resources are now provided.
Introduced the possibility to provide Adapter initialization parameters directly from the Proxy Adapter configuration. Hence, a "init" event has been added to both the MetadataProvider and DataProvider objects; it will be triggered after the connection with the Proxy Adapter has been established and passed the new parameters (to be supplied as explained in the Adapter Remoting Infrastructure documentation). COMPATIBILITY NOTE: The new events can be left unhandled, so no code changes are needed.
Extended the MetadataProvider object to support the new Push Notification Service (aka MPN Module). When enabled, the new events will be issued in order to validate client requests related with the service. See the docs for details. COMPATIBILITY NOTE: Existing Remote Metadata Adapter code is still supported (but for the unlikely case of a name conflict with the new events) and the Adapter will accept any MPN-related request; however, MPN-related client requests can be satisfied only if the involved "app" has been properly configured. However, the MPN Module is not available with this edition.
Extended the MetadataProvider interface to support the new Push Notification Service (aka MPN Module). However, the MPN Module cannot be enabled in Moderato edition. COMPATIBILITY NOTE: Existing Remote Metadata Adapter code is still supported.
Added the clearSnapshot method to the DataProvider object, for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). See the interface docs for details.
Improved interpretation of non-string values used as field value updates: while previously all "falsey" values, excluding the empty string, were interpreted as nulls now their string representation is assumed COMPATIBILITY NOTE: If a null was expected on the Client as a consequence to a falsey value passed to the adapter, such value has to be replaced with an explicit null or the Client has to be changed accordingly.
Improved the interface documentation.
Fixed the documentation of some cases in the MetadataResponse class, which were
confused with the corresponding requests.
Introduced suitable documentation for the default behavior of the MetadataProvider
object.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Officially introduced in Lightstreamer distribution.
Check for newer versions on the Python Package Index.
Fixed notification of End Of Snaphsot in case of not availability of the snapshot.
Fixed docstrings in modules "lightstreamer_adapter/server.py" and "lightstreamer_adapter/subscription.py".
Fixed unit tests.
Updated logging messages.
Finishing touches on the package documentation visible from the PyPi repository.
Upgraded to final version, ready for production use.
Officially introduced in Lightstreamer distribution.
Fixed a wrong link to the online examples in examples.txt.
Fixed syntax errors in the examples of the MPI and DPI commands. The syntax specifications were unaffected.
Introduced as a separate SDK to address the ARI Protocol, made available to custom Remote Servers for implementing the Adapter interface via TCP. For the history of the previous versions of the protocol, refer to the "Adapter Remoting Infrastructure" component, up to version 1.4.3.
Extended the protocol to introduce the possibility to provide Remote Servers with initialization parameters directly from the Proxy Adapter configuration. Hence, new "DPI" and "MPI" methods, for Data and Metadata Adapters respectively, have been added; they will be invoked on the request channel immediately after the connection and passed the new parameters (to be supplied as explained in the Adapter Remoting Infrastructure documentation). See the protocol documentation for details. COMPATIBILITY NOTE: Existing Remote Servers have to be extended in order to accept and answer the new request, otherwise the connection will fail. However, the previous behavior can be enforced on the Proxy Adapter by disabling the new request through the new "init_remote" configuration parameter of the Proxy Adapter.
Extended the protocol with requests related with the new Push Notification Service (aka MPN Module). When enabled, the new requests will be issued in order to validate client requests related with the service. See the Protocol documentation for details. COMPATIBILITY NOTE: existing Remote Servers don't need to be extended as long as the MPN Module is not enabled. However, the MPN Module is not available with this edition.
Extended the protocol with requests related with the new Push Notification Service (aka MPN Module). However, the MPN Module cannot be enabled in Moderato edition. COMPATIBILITY NOTE: existing Remote Servers don't need to be extended.
Introduced the "CLS" command on the Data Adapter notification channel for clearing the state of an item in a single step (or, in DISTINCT mode, for notifying compatible clients that the update history should be discarded). Refer to "clearSnapshot" in the Java In-Process Adapter SDK for details.
Clarified the protocol documentation with regard to the thread pools within Lightstreamer Server involved in the invocation of the various methods.
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. This includes the specification of field names as "data-field" attributes in DOM cells to be handled by StaticGrid or DynaGrid. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug introduced in version 6.1 which prevented the "slowing algorithm" (see setSlowingEnabled) from working.
Fixed a bug in setRequestedBufferSize, which caused the value "unlimited" to be ignored for subscriptions in MERGE mode, which would stick to the default buffer size of 1.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Revised the documentation of possible subscription error codes.
Fixed the Documentation of the FlashBridge class, which included spurious entries for names "onBridgeReadyCalled" and "callBridgeReady".
Fixed a bug that could prevent the transition to "cold" style of a cell in a grid, hence leaving it in "hot" state. This was only possible if the Server's <delta_delivery> setting had been forced to N.
Addressed a compatibility issue with the new Safari 10, which, on some environments, caused the cells associated with StaticGrid or DynaGrid objects not to be detected.
Fixed the handling of wrong calls to getFields and getFieldSchema on Subscription. In some cases, an exception different from the IllegalStateException was thrown.
Fixed a bug that could affect connection sharing on old browsers when equipped with Norton Internet Security.
Fixed a bug in the logging support, which caused the setUseInnerHtml method of the DOMAppender to be ineffective (false was always meant).
Fixed the log produced by the library, as, between the window name (when available) and the timestamp a space was missing.
Fixed a bug that, under conditions of client machine overloaded or badly responsive, could have caused a successful subscription, together with the related updates, not to be notified to the application. The bug only affected slave pages when connection sharing was enabled.
Fixed a bug that could have led, under certain circumstances, to an endless loop of connection and disconnection when two or more pages were trying to share the connection.
Added clarification details in the documentation of setCookieHandlingRequired and enableSharing.
Renamed the SDK, which was named "SDK for JavaScript Clients". The new name also emphasizes that it is based on the Unified APIs, like an increasing number of other Client SDKs. Also renamed the internal folder from "sdk_client_javascript" to "sdk_client_web_unified".
Discontinued the documentation of the use of this library in a Node.js environment. Now the new SDK for Node.js Clients (Unified API) is available, with dedicated documentation and instructions on how to acquire the library from the npm service.
Discontinued the supply of the alternative versions of the library, which,
however, can still be created with Generator.html. Also moved Generator.html
under the lib folder.
Note that the library version
for Node.js was in AMD format and required to be included in a custom source
together with RequireJS. The use of the library version available through the
npm service (see the new Node.js Client SDK) is recommended instead.
Changed the names of some properties in the ConnectionOptions bean. To resume:
This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using getters and setters for any of the specified properties should be ported, but the old getters and setters are still supported. On the other hand, custom code which defines onPropertyChange on a ClientListener and mentions any of the specified properties has to be ported to the new property names.
Separated the ConnectionSharing class from the LightstreamerClient: this means the class and its dependencies
can now be excluded using the Generator.html.
Hence, the API and usage for this class have changed:
clientInstance.connectionSharing.enableSharing(...);
clientInstance.connectionSharing.isMaster();
becomes
clientInstance.enableSharing(new ConnectionSharing(...));
clientInstance.isMaster();
where the parameters of the old enableSharing method and the new ConnectionSharing constructor are still the same.
COMPATIBILITY NOTE: existing code leveraging enableSharing
should be ported, although old code still works for now (provided that the ConnectionSharing
class is not excluded via Generator.html); if no sharing at all is configured,
the enableSharing call can also be removed.
When connection sharing is enabled, it is now possible to force the LightstreamerClient
to release sharing-related resources by using the enableSharing(null) call while DISCONNECTED.
Fixed a bug introduced on version 6.2.6: the bug prevented the use of WebSockets in some cases in which the user connection was switched from a non-WS-enabling network to a WS-enabling one.
Fixed a bug: in case of a Subscription Error the client would still try to subscribe the Subscription again, until a manual unsubscribe call was performed.
Fixed a bug which prevented the invalid-license error from being notified on Node.js.
Changed the behavior of getConnectTimeout/setConnectTimeout. This setting now accepts the "auto" value. If "auto" is specified, the timeout will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value. To check and/or modify the current timeout a new getter/setter pair is exposed: getCurrentConnectTimeout/setCurrentConnectTimeout. COMPATIBILITY NOTE: If the getConnectTimeout method is called by the client code its receiving variable may now contain the string "auto"; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.
Slightly changed the reconnection policy upon unexpected errors affecting an active session. In some known cases, the reconnection will no longer be immediate (with the risk of a fast reconnection loop), but the configured retry delay will be applied.
Improved the support for connection sharing by taking advantage of the SharedWorker class, where supported by the browser. As a consequence, sharing will now succeed in some contexts in which it used not to take place.
Introduced a Promise polyfill (https://github.com/jakearchibald/es6-promise). The polyfill is optional and can be excluded using the Generator.html; in this case the library expects to find the Promise class in the environment.
Fixed a wrong argument type in the docs for class FunctionAppender.
Fixed the documentation of onServerError and onStatusChange, to specify that onServerError
is always preceded, not followed, by onStatusChange with DISCONNECTED.
Fixed various links in the JSDocs. Also slightly revised the style of the JSDocs.
Fixed the documentation of the DOMAppender and FunctionAppender constructors,
which indicated optional arguments before a mandatory argument. Actually,
an argument qualified as optional can omitted only if not followed by further
arguments, hence arguments preceding a mandatory one are mandatory as well.
Aligned the documentation of all Appenders by removing the optionality attributes
to their common constructor arguments.COMPATIBILITY NOTE:
No change is needed to existing code, because each of these arguments can still
be omitted, as long as no subsequent arguments are supplied.
Clarified the policy for optional function arguments in the docs introduction.
Removed from the documentation various classes that are not related
with the interface, but used to be provided as utilities.
The whole set of utility classes can be found on GitHub at the following address:
https://github.com/Lightstreamer/utility-toolkit-javascript
Removed also some log-related classes that are not needed for setting up the
library log, but used to be provided to offer a full reusable logging system.
The whole logging system can be found on GitHub at the following address:
https://github.com/Lightstreamer/utility-logging-javascript
COMPATIBILITY NOTE: These classes are still included
in the library as part of the implementation, so application code exploiting them
will keep working. However, any future changes related with these classes
will not be reported.
Incremented the major version number. COMPATIBILITY NOTE: If running the Server with a license file that supports JavaScript SDK up to version 6.x or earlier, clients based on this new version will not be accepted by the Server.
Fixed a bug introduced on version 6.1.4 which only affected the use on Node.js; the effect was that, when the Server was unavailable, no more connection attempts were tried.
Fixed an error in the JSDocs, where SimpleLoggerProvider was documented as a module (with static methods); actually, it is a class, with instance methods and an empty constructor.
Fixed a bug: when using the SDK library inside a WebWorker, setting the setCookieHandlingRequired flag to true prevented the library from connecting.
Fixed a bug on the onClearSnapshot implementation of the DynaGrid/StaticGrid/Chart classes, which caused it to have no effect.
Fixed a bug in the SimpleLoggerProvider.removeLoggerAppender method.
Fixed an error in the JSDoc: in the ClientListener.onStatusChange the status "CONNECTED:STREAM-SENSING" was erroneously reported as "CONNECTED:STREAM-SENSE".
Prevented a serious error, on the opening of a WebSocket to a certain host, from blocking other WebSockets connections to different hosts.
Changed the behavior of the addListener method for the LightstreamerClient, Subscription, Chart, DynaGrid and StaticGrid classes: adding a second time the same listener instance now has no effect. COMPATIBILITY NOTE: if in existing code a same listener was added two times to a certain instance, it will no longer receive the events twice; moreover, upon the first invocation of removeListener it will be removed and it will stop receiving events. Hence such code may need to be revised.
Introduced work-around for early XDomainRequest failures related to specific proxies.
Introduced partial compatibility with React Native: at the moment the Client can only connect in HTTP-POLLING mode.
Clarified in the docs that the RemoteAppender does not support log of "INFO" and "DEBUG" levels.
Changed the value of the LightstreamerClient.LIB_NAME static property to "javascript_client".
Changed the default value for the ConnectionOptions.setContentLength setting.
Introduced support for the new error related to the expiration of an active session on Lightstreamer Server (error 48). The error is not forwarded to the ClientListener, a reconnection is performed instead.
Improved support for stickiness expiration on load balancers: if a client request pertaining to the current session is sent to the wrong instance of Lightstreamer Server, the Client automatically terminates the current session and opens a new one.
Fixed the Chart and ChartLine classes: positionXAxis and positionYAxis were supposed to accept negative values, but such values were explicitly blocked by their implementation.
Fixed a typo in the documentation of the "preventCrossWindowShare" parameter of "enableSharing".
Fixed the fade effect on IE<=8 for cases where the end color is "transparent": in these cases the fade effect will not be applied and a discrete switch will occur (previously there was no change at all and the starting color was left).
Fixed the "inherited methods" section of the JSDocs: some methods were missing, others were pointing to the wrong location. Also improved the readability of such list.
Fixed a bug that, under rare circumstances, could have triggered a non-strict loop of requests for the xhr.html file.
Added the error code 30 in onServerError; the case is only predisposed for future special licenses.COMPATIBILITY NOTE: custom clients which check the possible error outcomes don't have to be updated, as long as there is no change in license terms.
Extended the sendMessage with a new flag that permits to queue messages while the Client is offline.
Renamed the setRetryTimeout and getRetryTimeout methods into setRetryDelay and getRetryDelay. The old names are kept as aliases to mantain backward compatibility with previously written code. The behavior of the associated value is also changed: while the delay was previously started from the failure of the connection, it is now calculated from the start of the connection, thus absorbing any round-trip or timeout between the start of the connection and its failure.
Introduced the setFirstRetryMaxDelay and getFirstRetryMaxDelay settings. The actual delay is a randomized value between 0 and the value set on the property associated with the new methods. The randomization might help avoid a load spike on the cluster due to simultaneous reconnections, should one of the active servers be stopped. Previous versions of the SDK library had an hardcoded 0 value for this setting, the new 100ms default value should not introduce a noticeable difference.
Fixed the management of invalid key values when two-level push is active.
Now an invalid key no longer causes the session to fail, but only a notification
to onCommandSecondLevelSubscriptionError with the new code 14 is issued.
Fixed the documentation of two-level push, to specify the implicit conditions
that determine the (unlikely) cases in which a key value is invalid.
Fixed an error in the obfuscation process which, under rare circumstances, could have caused a "OpenAjax is not defined" exception.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there. Example code for normal html pages should also be found on GitHub; the source code of the preinstalled welcome page is no longer meant as a reference.
Introduced the new setHttpExtraHeadersOnSessionCreationOnly/isHttpExtraHeadersOnSessionCreationOnly in the the ConnectionOptions class. Unlike with setHttpExtraHeaders, extra http headers will not be sent on all connections, but only during session creation; this still ensures that the headers will reach notifyUser and does not disable WebSocket connections.
Introduced the support for io.js.
Fixed a bug that might have occasionally caused an error to be shown on the browser console (the text of the error was: 'Uncaught Executor error time: NaN').
Incremented the minor version number. COMPATIBILITY NOTE: If running the Server with a license file that supports JavaScript SDK up to version 6.1 or earlier, clients based on this new version will not be accepted by the Server.
Introduced the new setHttpExtraHeaders/getHttpExtraHeaders in the the ConnectionOptions class. It is now possible to add extra http headers to the requests sent to Lightstreamer Server. NOTE: Setting a non null value for this setting disables WebSockets.
Improved compatibility with redirect-based authentication mode used by some proxies.
Fixed a bug in the autoscroll behavior of the DynaGrid class: it was adhering to the documentation only if listening to a DISTINCT Subscription.
Fixed a bug affecting IE8: if many Subscriptions were subscribed/unsubscribed to the LightstreamerClient in a strict loop a "Stack overflow at line: 0" error might have been generated.
Fixed an incompatibility with phonegap applications running on Windows Phone 8.
Fixed a bug affecting Chrome, and potentially other browsers, that prevented the SDK library from working correctly if, depending on the case, "Block sites from setting any data" or "Block third-party cookies and site data" was selected on the Content settings.
Fixed a bug introduced on version 6 that might have prevented the SDK library to behave correctly if Websockets were not used (because of configuration or network/browser/intermediaries capabilities) and a load balancer using cookie stickiness was placed between the Client and the servers.
Fixed an issue with Chrome 33 and greater, where a harmless request for a page named "null" was performed to the web server.
Fixed an issue, introduced on version 6.1, with the Rekonq browser, that prevented the SDK library from correctly starting up.
Fixed a bug that in rare cases could have prevented the recovery of a shared connection in case of closure of the "master" Client.
Fixed an issue with Node.js on Linux that was observed in particular scenarios and, in these cases, prevented the connection.
Removed the need of cookie usage in most situations.
Added a onClearSnapshot callback to the SubscriptionListener. The callback will be invoked upon a corresponding invocation of "clearSnapshot" on the Adapter side for one of the subscribed items (provided that the Subscription is for DISTINCT or COMMAND mode) with the request to accomplish the specified action. Note that the "clearSnapshot" invocation is not available for Servers lower than version 6.0. COMPATIBILITY NOTE: Existing code will keep working as long as, on the Adapter side, "clearSnapshot" is not used for items in DISTINCT or COMMAND mode; otherwise, the item state on the Client may become inconsistent, hence implementing the new callback would be mandatory.
Added a default handling of the onClearSnapshot event in the AbstractGrid class
that's thus reflected on subclasses:
All the rows/charts associated to an item receiveng the onClearSnapshot event are
removed from the widget.
Fixed a bug that in rare cases could have made the Client send wrong-composed requests to Lightstreamer Server. The bug had two effects, none of which caused any actual issue: the Client may have sent extra useless requests; in response to such requests the Server would have logged error messages in the log.
Fixed a bug that prevented the correct execution of VisualUpdate.setCellValue calls having null as second parameter.
Expand the ConnectionOptions.setForcedTransport method to accept "HTTP" and "WS" values. These new values force the Client to only use the related transport without forcing it into using a fixed connection method (i.e.: POLLING or STREAMING).
Fix a bug on the StaticGrid. Once sorted it may have routed updates to the wrong rows.
Extended the Chart implementation to accept nulls as chart values. Nulls have now special meanings: a single null (either on the X or Y axis) will make the Chart ignore the update, a double null (on both the X and Y axis) will clear the involved ChartLine. COMPATIBILITY NOTE: existing code will keep working as long as the rule imposing to only feed the Chart with valid numbers was respected. If not it is possible to leverage parsers for the Chart.setXAxis and Chart.addYAxis methods to prevent nulls to reach the internal Chart engine.
Improved Node.js compatibility.
Revised the directory structure of the included examples.
Clarified the license terms for the included example source code.
Incremented the minor version number. COMPATIBILITY NOTE: If running Lightstreamer Server with a license file that supports JavaScript Client SDK up to version 6.0 or earlier, clients based on this new version will not be accepted by the Server.
Improved the Chart class: now charts are printed using the <canvas> element. If <canvas> is not available the SDK library will switch to the previous behavior.
Fixed an issue that may crash IE7 in case the SDK library needs to fallback to the "Unoptimized HTTP Polling".
Improved compatibility between Opera and the "Unoptimized HTTP Polling".
Fixed a bug on the StaticGrid class: if the grid was bound to a COMMAND or DISTINCT Subscription and there were more cells bound to the same field then the grid would have stopped showing updates on the HTML after a clean or scroll operation.
Fixed a bug introduced on build 1595: UNORDERED messages may have been repeated if the session connection was "Unoptimized Polling over HTTP" (see http://goo.gl/kwREX for reference).
Removed a potential memory leak: the disposal of a LightstreamerClient instance was leaving some resources behind.
Fixed generator.html to work on browsers when/where the console instance is not available.
Introduced a better handling of proxies that can forward the WebSocket handshake but can't properly handle the open WebSocket.
Fixed an issue with Firefox that might have caused a reconnection attempt to hang for many seconds after Lightstreamer Server had been unavailable for a while.
Fixed handling of string parameters entered in the ConnectionDetails and ConnectionOptions objects: a parameter supposed to be a string may have been mistakenly parsed as a number resulting in heading 0 and . to be removed.
Improved style of the StatusWidget appearance by replacing any globally set BackgroundColor with a transparent one.
Added some missing [optional] flags to the documentation.
Fixed a bug in the Subscription class: when used in COMMAND mode, the "key" field of a "row" might have been mistakenly empty if such "row" was removed (via a DELETE command) and then added again (via an ADD command) by the adapter.
Fixed a bug in the ItemUpdate.isValueChanged method: when used against a second-level field an erroneous true was returned.
Removed a 100/200 ms delay on subscriptions and messages that was erroneously introduced client-side. In case of file:/// executions the delay may also have been suffered during the dequeuing of received updates.
Improved send message performances.
Improved fallback mechanisms for Android stock browser.
Extended the supplied Monitor Demo with the newly available message-related statistics.
Added an example of integration with the Dojo libraries. Actually the example is hosted on GitHub and only a link is provided.
Included in the Client Guide document notes on how to configure the RequireJS optimization tool for use with a code including the JavaScript Client SDK library.
Introduced the new JavaScript Client SDK, which replaces the old HTML Client SDK with a brand new, fully redesigned, API and extended features, including:
See the included documentation for any details. The HTML Client SDK library shipped with the previous versions of Lightstreamer is still supported by Lightstreamer Server since Server version 4.0.
Check for newer versions on npm.
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug introduced in version 6.1 which prevented the "slowing algorithm" (see setSlowingEnabled) from working.
Fixed the handling of wrong calls to getFields and getFieldSchema on Subscription. In some cases, an exception different from the IllegalStateException was thrown.
Fixed the log produced by the library, as, between the window name (when available) and the timestamp a space was missing.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Revised the documentation of possible subscription error codes.
Added clarification details in the documentation of setCookieHandlingRequired.
Introduced the new Node.js SDK. See the "sdk_client_nodejs_unified" folder.
Previously, the Node.js library was available as part of the SDK for JavaScript Clients,
now called SDK for Web Clients (Unified API).
Note that the library was released in two different versions: as a "flavour" of the
JavaScript Client Library and through the npm service. This SDK only refers to the library
deployed via npm. However, currently, the use of the Web (Unified API) Client Library in the
Node.js flavour, which is based on AMD, is not recommended.
The Client Library has the same characteristics of the library in the current
SDK for Web Clients (Unified API) version 7.0.2 and you can refer to that SDK for the
changelog with respect to previous versions (although some topics in that changelog,
obviously, don't pertain to Node.js), with the following additions:
Updated obsolete names in the signature of the SDK and some included files.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Added a onClearSnapshot callback to the FlashTable. The callback will be invoked upon a corresponding invocation of "clearSnapshot" on the Adapter side for one of the items in the table (provided that they are subscribed to in DISTINCT or COMMAND mode) with the request to accomplish the specified action. COMPATIBILITY NOTE: Existing code will keep working as long as, on the Adapter side, "clearSnapshot" is not used for items in DISTINCT or COMMAND mode; otherwise, the item state on the Client may become inconsistent, hence implementing the new callback would be mandatory.
Revised the directory structure of the included examples.
Clarified the license terms for the included example source code.
Ensured compatibility with the new JavaScript Client SDK.
Ported the included demos to the new JavaScript Client SDK library.
Note that the "commons" directory is no longer used to bring configuration code and
imported JavaScript library code, which is now all included in the demo directory.
Removed the "javascript bridge" part of the SDK library, lsflashbridge.js, which is no longer needed with the new JavaScript Client SDK library. This also removes the strict dependency of each library build from a specific build of the underlying library, which was the case with the old HTML Client SDK library.
Changed the behavior of the onStatusChange callback; as a consequence of the required change of the underlying Client SDK library, the callback now returns new status indicators. COMPATIBILITY NOTE: existing code making use of the values returned by the onStatusChange callback should be wholly revised, by referring to the new behavior.
Simplified the SDK library deployment, by removing the version-reporting files.
Ported to the current HTML Client SDK library build.
Ported to the current HTML Client SDK library build.
Rebuilt the included StockList demo; the demo binaries have reduced significantly.
Ported to the current HTML Client SDK library build.
Ported to the current HTML Client SDK library build.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Fixed the documentation of the Table classes, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Fixed a bug in the protocol layer regarding the interpretation of some kind of ERROR messages. In case one of such error messages was received the Client was unable to forward them to the application layer.
Used Flex 4 SDK to build the SDK library.
Improved the layout of the included examples.
Clarified the license terms for the included example source code.
Fixed a bug in the management of non-ascii and control characters in field values; for particular values, the bug could also cause nearby characters to be affected.
Dropped the support for Flex 3. Flex 4 or later is now required.
COMPATIBILITY NOTE: existing clients compiled against Flex 3
have to be ported to Flex 4 or higher version.
Improved the robustness in case of connection problems.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Fixed a bug that prevented the use of very long (> 2^15) custom strings (for instance: for item groups, fields schemas or user names), by causing exceptions to be thrown.
Fixed a bug that, under rare circumstances, could have prevented the success of the session rebind procedure performed by the Library, causing the session to hang and eventually close.
Fixed a bug that could have prevented the natural termination of the process
when Lightstreamer Server happened to be unresponsive.
Fixed a bug that, upon session close, could have allowed the process to terminate
naturally, without invoking the application's OnClose (which, instead, should have
been given an opportunity to prevent termination).
Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Modified the SDK versioning, which now differs from the internal dll versioning.
Discontinued the compatibility with the previous version of the Server.
Introduced the ChangeSubscription method, which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription; this also introduces a new error code in PushServerException.
Fixed the handling of mocked calls to UnsubscribeTable when a batch is in place.
Fixed a bug which prevented the ForceUnsubscribeTable method from working. This method was provided only as a help for particular cases of error recovery.
Fixed a memory leak that could have caused a zombie thread to be left after an unsuccessful attempt of connecting to Lightstreamer Server; if the Server had been unreachable for long time for any reason and a loop of attempts had been performed, the leak could have become significant.
Fixed a potential bug that may have occurred after a SendMessage call, causing an ObjectDisposedException to be internally issued.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Property maxConcurrentSessionsPerServer of LSConnectionInfo is now maxed out at 4. Previously, trying to set a value greater than 4 would raise an exception.
Raised minimum iOS version requirements to 8.0.
Introduced the use of NSURLSession in place of NSURLConnection, where available.
Added bitcode support.
Slightly revised the organization of the doc folder.
Updated obsolete names in the signature of some included files.
Fixed a problem that was causing that some kind of connection errors were not notified via the common LSConnectionDelegate and would result in automatic reconnection attempts after a timeout.
Fixed bug that caused a missing "changed" flag on the first update of a field if the update value was null.
Fixed bug that left failed subscriptions in the Client's cache, leading to a possible duplicated subscription after an automatic reconnection.
Fixed bug that was causing an empty user parameter to be sent in place of a null user parameter.
Fixed a problem triggered when disconnecting while a connection attempt was hanging: an attempt to use the exception thrown by openConnection could have led to a memory violation.
Fixed overzealous Unicode decoding that could lead to corrupted update values. E.g. sequences like U+XXXX are no more converted to their corresponding Unicode character.
Reduced memory consumption during exception handling.
Added log delegation. Now an LSLogDelegate may be set on the LSLog class to redirect logging lines to an app-specific logging facility.
Removed the 32-bit-only version of the library from the SDK distribution. The mixed 32- and 64-bit library version now is compatible up to, and including, iOS 5.1. COMPATIBILITY NOTE: If your project used the 32-bit version of the SDK library, libLightstreamer_iOS_client.a, update the project to use the mixed 32- and 64-bit version, libLightstreamer_iOS_client_64.a.
Fixed bug that caused notification of benign timeout events during initial phases of stream-sense cycles. These notifications have been discontinued since version 1.2.3, but under particular conditions they were still sent.
ARC-ified. As a consequence of ARC-ification, delegates are now held with weak references, hence, you should keep a strong reference of delegates passed to the SDK library, or they will be released immediately and their methods will not be invoked. COMPATIBILITY NOTE: If your code does not keep a strong reference of delegates passed to the SDK library, it should be revised. Moreover, if your app is not developed with ARC, it is necessary to add "-fobjc-arc" to Other Linker Flags under the app's Build Settings, or you may encounter linking errors.
Added support for Mobile Push Notifications. The LSClient now provides methods to activate
special MPN subscriptions that will be delivered via mobile push (i.e. remote) notifications.
An MPN subscription is backed by a real-time subscription, from which it may take any field value.
Unlike the usual real-time subscriptions, MPN subscriptions are persistent: they survive the session
and are identified by a permanent, global, unique key provided by the APIs at time of activation.
Mobile Push Notifications carry common iOS remote notification information, like a sound and an icon
badge, but additionally may carry user-defined data at the benefit of the application.
See the interface documentation for details.
However, support for Mobile Push Notifications by Lightstreamer Server
(i.e. the MPN Module) is not available with this edition.
Added an alternative version of some methods to offer an error handling pattern that better fits Cocoa Touch. Now, for every method that may throw an exception in presence of a runtime error, a corresponding non-exception-throwing version is provided. This alternative method has always the same name, semantics, return value and parameters, except for an additional NSError output parameter that may be used (if not nil) to store a runtime error. Note that exceptions due to programming errors (such as use of invalid field names, wrong API call sequence, etc.) may still be thrown. See the API reference home page for an example.
Added new LSPushClientException, thrown in case passed parameters are invalid or conflicting. Previously, a generic LSException was thrown, with a varying exception name property. COMPATIBILITY NOTE: Existing code depending on the LSException class or on the exception name property should be revised. Generic LSException is never thrown now, but remains as a base class of all specific exceptions.
Modified the LSTableInfo class to allow the setter methods to throw a LSPushClientException. This is needed to support the creation of unmodifiable instances, as needed by the new MPN support. COMPATIBILITY NOTE: Existing code is not affected, as only unmodifiable instance can throw the exception and such instances are only returned by the newly introduced LSMPNSubscription class.
Fixed the documentation of the LSExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Improved the reconnection mechanism: if a connection error is detected within an existing valid session, a reconnection attempt is tried after a short randomized interval that can be configured with the new parameter LSConnectionInfo.firstRetryMaxDelaySecs. Moreover, subsequent connection retries now consider the delay specified by LSConnectionInfo.retryDelaySecs as part of an elapsed timeout. This avoids an additional delays if a longer timeout has expired. If a connection retry fails immediately, instead, the delay specified by LSConnectionInfo.retryDelaySecs is applied.
Fixed unsubscription APIs: now an active connection is no more needed, they will unsubscribe the table whether the Client is connected or not. In certain cases a zombie subscription may remain on Lightstreamer Server.
Fixed bug that caused rounding of requested max frequency when changing constraints on an existing table subscription.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Decoupled the session thread from the notification of connection events and asynchronous message events. Previous risks of deadlock by closing the connection during a connection event are now avoided. API docs have been updated to reflect the change.COMPATIBILITY NOTE: Existing code using background threads to call closeConnection during a connection event will continue to work. Anyway, consider that connection events may now be called with a short delay, and represent a connection status that may have changed in the meantime.
Improved enforcement of network timeouts. Now the SDK library is able to detect stalled network operations also for control connections. When this happens it cancels the operation to avoid keeping the Client blocked indefinitely.
Improved connection check on synchronous and asynchronous send message. Clarified asynchronous send message API docs.
Fixed a race condition that, upon concurrent invocations of openConnection, could have caused some of these invocations to be aborted but to return with no exception.
Fixed bug that was sending exceptions caught while sending asynchronous messages to the connection delegate instead of the message delegate.
Fixed bug that could lead to hang during connection closure, when called under network instability.
Fixed bug with the policy for ConcurrentSessionsPerServer exceeding: the "none"
policy was not obeyed and the "block" policy was used instead.
Changed the default policy from "none" to "block".
COMPATIBILITY NOTE: Existing code leaning on the default to be "none" should
now explicitly set this policy. Code trusting the SDK library default, due to the
aforementioned bug, won't experience any change.
Changed the ConcurrentSessionsPerServer setting interpretation, in order
to clarify its meaning: previously it was referring to "maximum number
of HTTP connections for each distinct server address", with a default of 3, which would translate
to 2 maximum streaming sessions per server address (as 1 connection was always kept
as spare for control connections). Now it correctly refers to "streaming
connections", and the new default is 2.
COMPATIBILITY NOTE: Existing code that performs the setting will now allow
one more session, unless changed accordingly.
Added use of "no-cache" HTTP headers for better traversal of network operators' transparent proxies.
Fixed missing check for client connection during synchronous and asynchronous message send. Improved asynchronous message send API docs.
Fixed wrong log category for some messages of LSThreadPool class.
Added new LSConnectionStatusConnecting value for LSConnectionStatus. This value reports when the Client is currently trying to connect (or reconnect after a connection drop). This case was previously included in the LSConnectionStatusDisconnected status. COMPATIBILITY NOTE: Existing code leveraging the LSConnectionStatus value should be checked.
Fixed bug that could cause a subscription or a batch to be sent to Lightstreamer Server even when the connection procedure was not fully completed. The Client now correctly raises an exception saying the Client is not connected.
Fixed bug that could lead to automatic resubscription of tables used on a previous session that has since been forcibly closed by Lightstreamer Server.
Fixed bug that was causing the isSnapshot flag to be NO for snapshot events after an automatic resubscription
Fixed bug that could lead to missing table resubscription after automatic reconnection if a closeConnection was called in the meantime
Fixed bug that could lead to unexpectedly long stall detection time.
Fixed bug that could cause a crash while closing the connection under some rare conditions.
Dropped support for iOS versions lower than 5.0; now the iOS Client SDK supports only iOS versions 5.0 and greater. COMPATIBILITY NOTE: clients deployed on old iOS versions may no longer work.
Discontinued the invocation of Event clientConnection:didReceiveConnectionFailure: during the stream-sensing phase of the connection for benign timeout conditions. Now, when the Client connects, this event will no longer be received until a full Stream-sense cycle has been completed. COMPATIBILITY NOTE: Existing code handling this Event to recover connection issues may behave differently, but those issues will be handled by Lightstreamer Stream-sense mechanism, which should be desirable.
Discontinued all the invocations of Event clientConnection:didStartSessionWithPolling: upon session rebind; hence, the event is now called just once per each session, at session establishment, aligning iOS Client SDK behavior to other Client SDKs. Note that this affects also streaming sessions, on content length exhaustion. COMPATIBILITY NOTE: Existing code depending of these notifications may behave differently; the clientConnectionDidEstablish: Event can be used instead.
Added support for TLS/SSL authentication challenge through a new (optional) LSConnectionDelegate event. The new event is named clientConnection:willSendRequestForAuthenticationChallenge: and reflects the equivalent delegate call of NSURLConnectionDelegate. See the event documentation for more information.
Fixed typo in method signature for end-of-snapshot event in LSTableDelegate. The new name is didEndSnapshotForItemPosition. COMPATIBILITY NOTE: A workaround is in place to let code developed with the previous releases to continue working without modifications. See table:didEndSnapshotForItemPosition:itemName: for more information.
Improved batch mode: now the Client will automatically split the batch in more chunks if its size should be more than the configured <request_limit> on Lightstreamer Server.
Fixed bugs related to special subscription cases: unfiltered dispatching, unlimited buffer size and distinct snapshot length were not passed appropriately under certain conditions.
Fixed bug related to conversion of Unicode characters at end of string.
Fixed bug related to protocol handling of # and $ characters at the beginning of a field value. The bug was causing a repeated # or $ character if the field value was beginning with one of these two characters.
Improved the included StockList Demo:
Fixed bug causing crash when the app was put in background and recalled after 1 minute or more.
Removed unsubscription on background: now the app relies completely on the LightStreamer client reconnection and resubscription mechanism.
Clarified life cycle of connection events in the source code.
Clarified the license terms for the included example source code.
Added support for 64 bit ARM architectures through a separate version of the SDK library.
Upgraded the included demo to the iOS7 look and feel.
Fixed a bug on the encoding of attributes to be submitted in client requests; the bug could have caused errors in request submission if particular characters had been used in strings such as user/password values or item/group/field/schema names.
Reworked low-level threading model: now the SDK library makes use of dynamic thread pools, for better performance and lower memory footprint.
Extended LSConnectionInfo: introduced properties to specify client behavior in case multiple sessions have to be opened towards the same instance of Lightstreamer Server.
Fixed an issue with exception handling, whereby exceptions occurred while processing updates from Lightstreamer Server could have caused the updates to be silently discarded; now an invocation to clientConnection:didReceiveDataError: on the LSConnectionDelegate is provided.
Fixed minor bugs and documentation errors.
Included code version optimized for iPhone 5 chipset (armv7s).
Adapted the included demo to the iOS6 / iPhone5 environments.
Added the optional isAboutToSendURLRequest callback in the LSConnectionDelegate, to provide a hook that makes it possible to decorate the underlying HTTP requests, if needed to comply with low-level system requirements.
Discontinued the compatibility with the previous version of Lightstreamer Server.
Introduced the "changeTableSubscription" method, which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription.
Fixed the wrong name "infoWithPushServerURL" in the documentation page on how to open a connection.
Revised and improved the handling of cases of poor connectivity and of switching
between networks.
Note that it is now required that the SystemConfiguration framework is included
in the framework list of the XCode project.
Fixed a bug that could have caused high CPU usage under particular conditions.
Fixed a bug on the Stream-sense algorithm, which was not working properly.
Fixed a bug that could have caused session rebinds to timeout improperly.
Fixed a bug that could have caused a crash in case of concurrent unsubscription and update of the same item.
Fixed a bug that could have caused a crash in case of multiple reconnections in a short period of time.
Fixed a bug that could have caused http to be used for control connections also when https was needed, when <control_link_address> / <control_link_machine_name> was specified on Lightstreamer Server configuration.
Fixed bugs that could have caused a deadlock when repeatedly calling closeConnection and openConnection under poor connectivity.
Fixed minor documentation errors on LSTableDelegate and LSConnectionInfo.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Check for newer versions of Lightstreamer_iOS_Client on CocoaPods.
Added the new setting limitExceptionsUse
in LSLightstreamerClient to
avoid throwing an exception when certain methods are called with an invalid parameter.
E.g. valueWithFieldName:
in LSItemUpdate and valueWithItemName:fieldName:
in LSSubscription both obey to this new setting. See API docs for more information.
Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Moved the LIB_NAME
and LIB_VERSION
methods of LSLightstreamerClient to
class properties. They can now be accessed with the dot notation. Previous class methods remain
available.
Fixed a bug on the implementation of disconnect
, whereby an ongoing loop
of connection attempt was not interrupted in case of Server down or wrong address.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Revised the default setting for the contentLength
property of LSConnectionOptions,
to allow the library to set it to the best value.
Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit
the number of sessions that can be concurrently open to the same Server. New properties are:
maxConcurrentSessionsPerServer
(a class property) and
maxConcurrentSessionsPerServerExceededPolicy
. See docs for more information.
Added new event to LSClientDelegate to respond to an authentication challenge raised during
network connection. New event is client:willSendRequestForAuthenticationChallenge:
.
See docs for more information.
Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.
Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos:
on
LSSubscriptionDelegate, which is only predisposed.
The client library is now distributed as a framework.
Raised the minimum iOS version requirements to 8.0.
Fixed a memory leak that could become significant with intense update activity.
Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
Included in Lightstreamer distribution package. See "sdk_client_ios_unified".
Added bitcode support.
Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.
Event client:didChangeProperty:
now reports correct iOS client
property names, e.g. "pollingTimeout" instead of "pollingMillis".
Fixed potential exception which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Prevented reconnection attempts upon wrong answers from the Server.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of client:didReceiveServerError:withMessage:
and client:didChangeStatus:
, to specify that the former
is always preceded, not followed, by the latter with DISCONNECTED.
Changed the type and behavior of connectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed over time) by the library itself. Note that "auto" is also the new default value. To check and or modify the current value a property is exposed: currentConnectTimeout. COMPATIBILITY NOTE: if the connectTimeout property is changed by the client code, the given parameter must be modified to be a String. If the connectTimeout property is accesses by the client code its receiving variable must be converted to an NSString; moreover it is likely that connectTimeout accesses should be replaced by currentConnectTimeout ones. See the docs for further details.
Introduced as an improved alternative to the SDK for iOS clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.
Renamed the SDK from "SDK for OS X Clients" to follow the renaming
of the operating system.
References to "OS X" or "Mac OS X" now changed to "macOS".
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Property maxConcurrentSessionsPerServer of LSConnectionInfo is now maxed out at 6. Previously, trying to set a value greater than 4 would raise an exception.
Raised minimum macOS version requirements to 10.9.
Introduced the use of NSURLSession in place of NSURLConnection, where available.
Added bitcode support.
Revised the organization of the doc folder.
Updated obsolete names in the signature of some included files.
Fixed a problem that was causing that some kind of connection errors were not notified via the common LSConnectionDelegate and would result in automatic reconnection attempts after a timeout.
Fixed bug that caused a missing "changed" flag on the first update of a field if the update value was null.
Fixed bug that left failed subscriptions in the Client's cache, leading to a possible duplicated subscription after an automatic reconnection.
Fixed bug that was causing an empty user parameter to be sent in place of a null user parameter.
Fixed a problem triggered when disconnecting while a connection attempt was hanging: an attempt to use the exception thrown by openConnection could have led to a memory violation.
Fixed overzealous Unicode decoding that could lead to corrupted update values. E.g. sequences like U+XXXX are no more converted to their corresponding Unicode character.
Reduced memory consumption during exception handling.
Added log delegation. Now an LSLogDelegate may be set on the LSLog class to redirect logging lines to an app-specific logging facility.
Fixed bug that caused notification of benign timeout events during initial phases of stream-sense cycles. These notifications have been discontinued since version 1.0.2, but under particular conditions they were still sent.
ARC-ified. As a consequence of ARC-ification, delegates are now held with weak references, hence, you should keep a strong reference of delegates passed to the SDK library, or they will be released immediately and their methods will not be invoked. COMPATIBILITY NOTE: If your code does not keep a strong reference of delegates passed to the library, it should be revised. Moreover, if your app is not developed with ARC, it is necessary to add "-fobjc-arc" to Other Linker Flags under the app's Build Settings, or you may encounter linking errors.
Minimum macOS version supported is now 10.7 (Lion), up from 10.6 (Snow Leopard). This is required by ARC.
It is now required that the Security framework is included in the dependencies of the project. COMPATIBILITY NOTE: if your project does not include the Security framework you will see linking errors during the build process. Adding the framework will solve the errors.
Added support for Mobile Push Notifications. The LSClient now provides methods to activate
special MPN subscriptions that will be delivered via mobile push (i.e. remote) notifications.
An MPN subscription is backed by a real-time subscription, from which it may take any field value.
Unlike the usual real-time subscriptions, MPN subscriptions are persistent: they survive the session
and are identified by a permanent, global, unique key provided by the APIs at time of activation.
Mobile Push Notifications carry common macOS remote notification information, like an icon badge,
but additionally may carry user-defined data at the benefit of the application.
See the interface documentation for details.
However, support for Mobile Push Notifications by Lightstreamer Server
(i.e. the MPN Module) is not available with this edition.
Added an alternative version of some methods to offer an error handling pattern that better fits Cocoa. Now, for every method that may throw an exception in presence of a runtime error, a corresponding non-exception-throwing version is provided. This alternative method has always the same name, semantics, return value and parameters, except for an additional NSError output parameter that may be used (if not nil) to store a runtime error. Note that exceptions due to programming errors (such as use of invalid field names, wrong API call sequence, etc.) may still be thrown. See the API reference home page for an example.
Added new LSPushClientException, thrown in case passed parameters are invalid or conflicting. Previously, a generic LSException was thrown, with a varying exception name property. COMPATIBILITY NOTE: Existing code depending on the LSException class or on the exception name property should be revised. Generic LSException is never thrown now, but remains as a base class of all specific exceptions.
Modified the LSTableInfo class to allow the setter methods to throw a LSPushClientException. This is needed to support the creation of unmodifiable instances, as needed by the new MPN support. COMPATIBILITY NOTE: Existing code is not affected, as only unmodifiable instance can throw the exception and such instances are only returned by the newly introduced LSMPNSubscription class.
Fixed the documentation of the LSExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Improved the reconnection mechanism: if a connection error is detected within an existing valid session, a reconnection attempt is tried after a short randomized interval that can be configured with the new parameter LSConnectionInfo.firstRetryMaxDelaySecs. Moreover, subsequent connection retries now consider the delay specified by LSConnectionInfo.retryDelaySecs as part of an elapsed timeout. This avoids an additional delays if a longer timeout has expired. If a connection retry fails immediately, instead, the delay specified by LSConnectionInfo.retryDelaySecs is applied.
Fixed unsubscription APIs: now an active connection is no more needed, they will unsubscribe the table whether the Client is connected or not. In certain cases a zombie subscription may remain on Lightstreamer Server.
Fixed bug that caused rounding of requested max frequency when changing constraints on an existing table subscription.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Decoupled the session thread from the notification of connection events and asynchronous message events. Previous risks of deadlock by closing the connection during a connection event are now avoided. API docs have been updated to reflect the change.COMPATIBILITY NOTE: Existing code using background threads to call closeConnection during a connection event will continue to work. Anyway, consider that connection events may now be called with a short delay, and represent a connection status that may have changed in the meantime.
Improved enforcement of network timeouts. Now the SDK library is able to detect stalled network operations also for control connections. When this happens it cancels the operation to avoid keeping the Client blocked indefinitely.
Improved connection check on synchronous and asynchronous send message. Clarified asynchronous send message API docs.
Fixed a race condition that, upon concurrent invocations of openConnection, could have caused some of these invocations to be aborted but to return with no exception.
Fixed bug that was sending exceptions caught while sending asynchronous messages to the connection delegate instead of the message delegate.
Fixed bug that could lead to hang during connection closure, when called under network instability.
Fixed bug with the policy for ConcurrentSessionsPerServer exceeding: the "none"
policy was not obeyed and the "block" policy was used instead.
Changed the default policy from "none" to "block".
COMPATIBILITY NOTE: Existing code leaning on the default to be "none" should
now explicitly set this policy. Code trusting the SDK library default, due to the
aforementioned bug, won't experience any change.
Changed the ConcurrentSessionsPerServer setting interpretation, in order
to clarify its meaning: previously it was referring to "maximum number
of HTTP connections for each distinct server address", with a default of 3, which would translate
to 2 maximum streaming sessions per server address (as 1 connection was always kept
as spare for control connections). Now it correctly refers to "streaming
connections", and the new default is 2.
COMPATIBILITY NOTE: Existing code that performs the setting will now allow
one more session, unless changed accordingly.
Added use of "no-cache" HTTP headers for better traversal of network operators' transparent proxies.
Fixed missing check for client connection during synchronous and asynchronous message send. Improved asynchronous message send API docs.
Fixed wrong log category for some messages of LSThreadPool class.
Added new LSConnectionStatusConnecting value for LSConnectionStatus. This value reports when the Client is currently trying to connect (or reconnect after a connection drop). This case was previously included in the LSConnectionStatusDisconnected status. COMPATIBILITY NOTE: Existing code leveraging the LSConnectionStatus value should be checked.
Fixed bug that could cause a subscription or a batch to be sent to Lightstreamer Server even when the connection procedure was not fully completed. The Client now correctly raises an exception saying the Client is not connected.
Fixed bug that could lead to automatic resubscription of tables used on a previous session that has since been forcibly closed by Lightstreamer Server.
Fixed bug that was causing the isSnapshot flag to be NO for snapshot events after an automatic resubscription
Fixed bug that could lead to missing table resubscription after automatic reconnection if a closeConnection was called in the meantime
Fixed bug that could lead to unexpectedly long stall detection time.
Fixed bug that could cause a crash while closing the connection under some rare conditions.
Discontinued the invocation of Event clientConnection:didReceiveConnectionFailure: during the stream-sensing phase of the connection for benign timeout conditions. Now, when the Client connects, this event will no longer be received until a full Stream-sense cycle has been completed. COMPATIBILITY NOTE: Existing code handling this Event to recover connection issues may behave differently, but those issues will be handled by Lightstreamer Stream-sense mechanism, which should be desirable.
Discontinued all the invocations of Event clientConnection:didStartSessionWithPolling: upon session rebind; hence, the event is now called just once per each session, at session establishment, aligning OS X (now macOS) Client SDK behavior to other Client SDKs. Note that this affects also streaming sessions, on content length exhaustion. COMPATIBILITY NOTE: Existing code depending of these notifications may behave differently; the clientConnectionDidEstablish: Event can be used instead.
Added support for TLS/SSL authentication challenge through a new (optional) LSConnectionDelegate event. The new event is named clientConnection:willSendRequestForAuthenticationChallenge: and reflects the equivalent delegate call of NSURLConnectionDelegate. See the event documentation for more information.
Fixed typo in method signature for end-of-snapshot event in LSTableDelegate. The new name is didEndSnapshotForItemPosition. COMPATIBILITY NOTE: A workaround is in place to let code developed with the previous releases to continue working without modifications. See table:didEndSnapshotForItemPosition:itemName: for more information.
Improved batch mode: now the Client will automatically split the batch in more chunks if its size should be more than the configured <request_limit> on Lightstreamer Server.
Fixed bugs related to special subscription cases: unfiltered dispatching, unlimited buffer size and distinct snapshot length were not passed appropriately under certain conditions.
Fixed bug related to conversion of Unicode characters at end of string.
Fixed bug related to protocol handling of # and $ characters at the beginning of a field value. The bug was causing a repeated # or $ character if the field value was beginning with one of these two characters.
Improved the included StockList Demo: clarified life cycle of connection events in the source code.
Clarified the license terms for the included example source code.
Included in Lightstreamer distribution.
The included library is very similar to that for the iOS Client SDK 1.2.2 build 74.2.
Check for newer versions of Lightstreamer_macOS_Client on CocoaPods.
Added the new setting limitExceptionsUse
in LSLightstreamerClient to
avoid throwing an exception when certain methods are called with an invalid parameter.
E.g. valueWithFieldName:
in LSItemUpdate and valueWithItemName:fieldName:
in LSSubscription both obey to this new setting. See API docs for more information.
Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Moved the LIB_NAME
and LIB_VERSION
methods of LSLightstreamerClient to
class properties. They can now be accessed with the dot notation. Previous class methods remain
available.
Fixed a bug on the implementation of disconnect
, whereby an ongoing loop
of connection attempt was not interrupted in case of Server down or wrong address.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Revised the default setting for the contentLength
property of LSConnectionOptions,
to allow the library to set it to the best value.
Renamed the SDK from "SDK for OS X Clients (Unified API Version)" to follow the renaming
of the operating system.
References to "OS X" or "Mac OS X" now changed to "macOS".
Added new properties to LSConnectionOptions and new behavior to LSLightstreamerClient to limit
the number of sessions that can be concurrently open to the same Server. New properties are:
maxConcurrentSessionsPerServer
(a class property) and
maxConcurrentSessionsPerServerExceededPolicy
. See docs for more information.
Added new event to LSClientDelegate to respond to an authentication challenge raised during
network connection. New event is client:willSendRequestForAuthenticationChallenge:
.
See docs for more information.
Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.
Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos:
on
LSSubscriptionDelegate, which is only predisposed.
The client library is now distributed as a framework.
Raised the minimum macOS version requirements to 10.9.
Fixed a memory leak that could become significant with intense update activity.
Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
Included in Lightstreamer distribution package. See "sdk_client_os_x_unified" (now sdk_client_macos_unified).
Added bitcode support.
Fixed casing of property "sessionID" of LSConnectionDetails as "sessionId", for coherence with other Unified Client APIs.
Event client:didChangeProperty:
now reports correct client
property names, e.g. "pollingTimeout" instead of "pollingMillis".
Fixed potential exception which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Prevented reconnection attempts upon wrong answers from the Server.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of client:didReceiveServerError:withMessage:
and client:didChangeStatus:
, to specify that the former
is always preceded, not followed, by the latter with DISCONNECTED.
Changed the type and behavior of connectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed over time) by the library itself. Note that "auto" is also the new default value. To check and or modify the current value a property is exposed: currentConnectTimeout. COMPATIBILITY NOTE: if the connectTimeout property is changed by the client code, the given parameter must be modified to be a String. If the connectTimeout property is accesses by the client code its receiving variable must be converted to an NSString; moreover it is likely that connectTimeout accesses should be replaced by currentConnectTimeout ones. See the docs for further details.
Introduced as an improved alternative to the SDK for OS X (now macOS) clients. The interface offered is completely different, and it is very similar to the one currently exposed by the SDK for JavaScript Clients.
Check for newer versions of Lightstreamer_tvOS_Client on CocoaPods.
Added the new setting limitExceptionsUse
in LSLightstreamerClient to
avoid throwing an exception when certain methods are called with an invalid parameter.
E.g. valueWithFieldName:
in LSItemUpdate and valueWithItemName:fieldName:
in LSSubscription both obey to this new setting. See API docs for more information.
Removed a restriction on field names that can be supplied to a LSSubscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Moved the LIB_NAME
and LIB_VERSION
methods of LSLightstreamerClient to
class properties. They can now be accessed with the dot notation. Previous class methods remain
available.
Fixed a bug on the implementation of disconnect
, whereby an ongoing loop
of connection attempt was not interrupted in case of Server down or wrong address.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Revised the default setting for the contentLength
property of LSConnectionOptions,
to allow the library to set it to the best value.
maxConcurrentSessionsPerServer
(a class property) and
maxConcurrentSessionsPerServerExceededPolicy
. See docs for more information.
Added new event to LSClientDelegate to respond to an authentication challenge raised during
network connection. New event is client:willSendRequestForAuthenticationChallenge:
.
See docs for more information.
Fixed bug that caused a crash if an LSSubscription object was created before initializing an LSLightstreamerClient instance.
Removed any remaining use of NSURLConnection. Now all networking is done through NSURLSession.
Fixed a bug that could have caused wrong error codes (that is, codes different from the documented ones) to be reported by subscription error events of LSSubscriptionDelegate.
Fixed the documentation of subscription:didClearSnapshotForItemName:itemPos:
on
LSSubscriptionDelegate, which is only predisposed.
The client library is now distributed as a framework.
Fixed the Server compatibility note for version 2.0.1 in this changelog, which was mistakenly brought back to 6.0.1.
Fixed a memory leak that could become significant with intense update activity.
Fixed bug in network reachability thread that caused a 100% CPU usage if the client was initialized but left unconnected.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
Included in Lightstreamer distribution.
The included library is very similar to that for the
iOS Client SDK (Unified API Version) 2.0.0 build 33.
See "sdk_client_tvos_unified".
Fixed the Javadocs, by removing private class MpnSubscriptionInfo.
Revised javadoc formatting style.
Added support for Mobile Push Notifications. The LSClient now provides methods to activate
special MPN subscriptions that will be delivered via mobile push notifications
(i.e. cloud messages).
An MPN subscription is backed by a real-time subscription, from which it may take
any field value. Unlike the usual real-time subscriptions, MPN subscriptions are persistent:
they survive the session and are identified by a permanent, global, unique key provided
by the APIs at time of activation.
Mobile Push Notifications carry common GCM cloud message information,
like a collapse key and custom data in the form of key-value pairs.
See the class documentation for details.
However, the support for Mobile Push Notifications
by Lightstreamer Server (i.e. the MPN Module) is not available with this edition.
As part of the support for Mobile Push Notifications, extended the SimpleTableInfo bean with a "getAdapterSet" method. This is only related to MPN inquiry requests and it should be ignored in other contexts.
Introduced configurable timeouts on socket connection and read operations. See the documentation of openConnection for details.
Fixed a bug that could have prevented the natural termination of the process
when Lightstreamer Server happened to be unresponsive.
Fixed a bug that, upon session close, could have allowed the process to terminate
naturally, without invoking the application's OnClose (which, instead, should have
been given an opportunity to prevent termination).
Discontinued the raise of exceptions upon session close when the close occurs during the execution of an unsubscription request; in this case, it is guaranteed that the unsubscription is being performed on Lightstreamer Server.
Fixed the documentation of "onUnsubscrAll" in HandyTableListener, which is not meant to be invoked in some cases.
Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Discontinued the compatibility with Android versions prior to 2.3.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Fixed some spurious "Discarded unknown property" log messages in the connection phase.
Fixed a few typos in the Javadocs.
Ported the included example to a newer version of Android Client SDK.
Clarified the license terms for the included example source code.
Regenerated the API documentation with the newest JDK default template.
Discontinued the compatibility with the previous version of Lightstreamer Server.
Introduced the changeSubscription method, which allows for modification of the maximum frequency settings for currently subscribed items, with no need for a resubscription; this also introduces a new error code in PushServerException.
Fixed the handling of mocked calls to unsubscribeTable when a batch is in place.
Fixed a bug which prevented the forceUnsubscribeTable method from working. This method was provided only as a help for particular cases of error recovery.
Introduced the new ExtendedConnectionListener interface that extends the still available ConnectionListener. When the new interface is implemented, the new onSessionStarted overload is invoked carrying extra information about the current server host, which, however, is not useful for the Moderato case.
Fixed a compatibility issue for Android version 2.2 and earlier that was introduced
in build 10. The issue would give rise to an unresolved method exception upon a connection
attempt, but, in turn, it was only triggered by an unchecked exception thrown
by the underlying I/O library.
Extended the scope of the PushConnException to wrap any Throwable, whereas before it only used
to wrap IOExceptions. COMPATIBILITY NOTE: existing clients were
already not supposed to expect PushConnException to only wrap IOExceptions.
Improved the checks on unexpected issues during I/O operations.
Improved the robustness against unexpected issues during I/O operations.
Suppressed warnings about BufferedReader usage in the JVM log.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Check for newer versions online.
Introduced the use of WebSockets both for streaming and for subscription
and client message requests, which brings an overall performance improvement.
As a consequence, setForcedTransport now also supports the "WS", "WS-STREAMING",
and "WS-POLLING" values and the predisposed setEarlyWSOpenEnabled method
is now effective.
Modified the name of the library made available via Maven. Now, ls-android-client should be referred in place of ls-android-client-compact. However, the latter is still available as an alternative "compact" version of the library. In fact, the memory footprint of the library, when including its dependencies, has increased significantly, whereas the "compact" version has not grown, but it does not include WebSocket support.
Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported and recompiled. If the property is not used in any form, existing compiled code can still run against the new library.
Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and their changes during subscription life. See the docs for details and special cases. COMPATIBILITY NOTE: Custom code has to be ported, by implementing the new method, and recompiled. Existing compiled code should still run against the new library: invocations to onRealMaxFrequency to the custom listener would cause an exception that would be caught internally.
Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug on the implementation of disconnect(), whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument;
negative values will now be accepted to mean that the Server default timeout is to be used.
COMPATIBILITY NOTE: Existing code using the 5-argument
version of sendMessage and supplying 0 as "delayTimeout" must be modified to use
-1 instead. Invocations to the 1-argument version don't have to be modified.
Added new error codes 66 and 68 to onServerError, onSubscriptionError, and
onSecondLevelSubscriptionError, to report server-side issues; previously,
upon such problems, the connection was just interrupted.
Added missing error code 60 to onServerError documentation; this error
reports server-side licensing limitations.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError
documentation; when a subscription request cannot find the session,
the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.
Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.
Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Improved the management of setHttpExtraHeadersOnSessionCreationOnly, when true. Previously, the extra headers (supplied with setHttpExtraHeaders) were still sent, redundantly, on control requests.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Improved the documentation of various methods in regard to the special case
of two-level subscriptions.
Detailed the documentation of the various
property getters and setters in regard to the possible values.
Improved the Javadocs, by shortening the concise descriptions of some classes and methods.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Fixed a bug which could have caused onSubscriptionError and onCommandSecondLevelSubscriptionError to report wrong error codes, that is, codes different from the documented ones.
Fixed the documentation of onClearSnapshot, which is only predisposed.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
As moved to final, renamed the internal folder from "sdk_client_android_alpha" to "sdk_client_android_unified".
Changed the names of some properties in the ConnectionOptions bean. To resume:
This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using any of the mentioned properties has to be ported and any related binaries have to be recompiled.
Fixed potential NullPointerException which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Changed the type and behavior of the getConnectTimeout/setConnectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value.
To check and or modify the current value, a new CurrentConnectTimeout property, with its getter/setter pair in ConnectionOptions, is exposed. COMPATIBILITY NOTE: if the setConnectTimeout method is called by the client code, the given parameter must be modified to be a String. If the getConnectTimeout method is called by the client code its receiving variable must be converted to a String; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.
Prevented reconnection attempts upon wrong answers from the Server.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of onServerError and onStatusChange, to specify that onServerError is always preceded, not followed, by onStatusChange with DISCONNECTED.
Revised javadoc formatting style and fixed various typos in the javadocs.
Resorted to an external package for the log support. COMPATIBILITY NOTE: Custom code using the LoggerProvider interface should be revised, based on the new documentation; see setLoggerProvider.
Improved the handling of long polling.
Added missing documentation of setProxy in ConnectionOptions.
Introduced as an improved alternative to the SDK for Android Clients.
The interface offered is completely different, and it is very similar
to the one currently exposed by the SDK for JavaScript Clients.
see "sdk_client_android_alpha".
Revised javadoc formatting style; also fixed links and missing fields in the javadocs.
In BlackBerry 7 SDK, fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
In BlackBerry 7 SDK, introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
In BlackBerry 7 SDK, clarified the license terms for the included example source code.
Improved the included example of BlackBerry 10 integration based on Adobe AIR.
Updated the included examples of BlackBerry 10 integration, to lean on the new versions of Lightstreamer Flex and JavaScript SDKs. Note that, only to run the JavaScript example, the new version of the Server is needed.
Introduced the support for BlackBerry 10, by adding the sdk_client_blackberry10 subfolder. The current SDK has been moved to the sdk_client_blackberry7 subfolder and has been left unchanged; it can only be used up to BlackBerry 7 (i.e. BlackBerry OS). For BlackBerry 10 no dedicated libraries are needed and examples of how to achieve integration by leveraging other SDKs are shown.
Introduced the reverse heartbeat mechanism. Introduced the new method LSClient.setReverseHeartbeatMillis method to configure it and LSClient.getReverseHeartbeatMillis to test it.
Changed the return type of the ConnectionProvider clone method from ConnectionProvider to Object. COMPATIBILITY NOTE: if a custom ConnectionProvider was implemented the return value of its clone method must be changed; on the other hand the implementation of the method does not need any change. Note that the included demo has been changed accordingly.
Regenerated the API documentation with the newest JDK default template.
Introduced the setMaxFrequency and setFrequencyUnlimited methods, which allow
for modification of the maximum frequency settings for currently subscribed items;
unless in single connection mode, the changes will take place immediately,
with no need for a resubscription.
Extended the sample code to demonstrate the use of the new methods.
Changed the default for the setIdleTimeout method of the ConnectionPolicy class from 30000 to 19000 ms.
Fixed a bug that sometimes caused HandyTableListener instances to receive updates carrying the wrong old values.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Revised javadoc formatting style; also fixed links and missing fields in the javadocs.
Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Introduced the reverse heartbeat mechanism. Introduced the new LSClient.setReverseHeartbeatMillis method to configure it and LSClient.getReverseHeartbeatMillis to test it.
Changed the return type of the ConnectionProvider clone method from ConnectionProvider to Object. COMPATIBILITY NOTE: if a custom ConnectionProvider was implemented the return value of its clone method must be changed; on the other hand the implementation of the method does not need any change.
Regenerated the API documentation with the newest JDK default template.
Introduced the setMaxFrequency and setFrequencyUnlimited methods, which allow
for modification of the maximum frequency settings for currently subscribed items;
unless in single connection mode, the changes will take place immediately,
with no need for a resubscription.
Extended the sample code to demonstrate the use of the new methods.
Changed the default for the setIdleTimeout method of the ConnectionPolicy class from 30000 to 19000 ms.
Fixed a bug that sometimes caused HandyTableListener instances to receive updates carrying the wrong old values.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Revised javadoc formatting style; also fixed missing fields in the javadocs.
Fixed a bug that could have prevented the natural termination of the process
when Lightstreamer Server happened to be unresponsive.
Fixed a bug that, upon session close, could have allowed the process to terminate
naturally, without invoking the application's OnClose (which, instead, should have
been given an opportunity to prevent termination).
Discontinued the raise of exceptions upon session close when the close occurs during the execution of an unsubscription request; in this case, it is guaranteed that the unsubscription is being performed on Lightstreamer Server.
Fixed the documentation of "onUnsubscrAll" in HandyTableListener (LSClient interface), which is not meant to be invoked in some cases.
Fixed the documentation of the ExtendedTableInfo class, to clarify that item and field names in lists to be submitted to a LiteralBasedProvider or similar are not allowed to be null, empty or to contain spaces. Now, checks have been added when item and field names are supplied and an exception is thrown, if needed. COMPATIBILITY NOTE: Existing code is not expected to be using null or empty item/field names or item/field names containing spaces; in fact, in case it did, it would still have been subject to unexpected behaviours and exceptions.
Clarified in the docs how timeouts on socket connection and read operations can be configured.
Fixed the docs for the ProxyInfo class (LSProxy interface), to state that the default for the onFailedConnectionRetry property is true.
Introduced the support for the new client identification mechanism.
Removed the examples, which are now only hosted on GitHub and managed through the new "demos" site. Provided suitable references to find the examples there.
Improved the included test source code to demonstrate showing the session close cause code.
Fixed some spurious "Discarded unknown property" log messages in the connection phase.
Fixed a few typos in the Javadocs.
Clarified the license terms for the included example source code.
Improved the support of the Load Test Toolkit for tests in SSL.
Fixed a bug introduced in version 2.5.1 which affected the "lsproxy" interface.
Ensured the compatibility with the new Load Test Toolkit for Lightstreamer Colosseo.
Regenerated the API documentation with the newest JDK default template.
Discontinued the compatibility with the previous version of Lightstreamer Server.
Introduced the changeSubscription method (LSClient interface), which allows for
modification of the maximum frequency settings for currently subscribed items,
with no need for a resubscription; this also introduces a new error code in
PushServerException.
Extended the sample code to demonstrate the use of changeSubscription.
Fixed the handling of mocked calls to unsubscribeTable when a batch is in place.
Fixed a bug which prevented the forceUnsubscribeTable method from working. This method was provided only as a help for particular cases of error recovery.
Introduced the new ExtendedConnectionListener interface that extends the still available ConnectionListener. When the new interface is implemented, the new onSessionStarted overload is invoked carrying extra information about the current server host. , which, however, is not useful for the Moderato case.
Improved the robustness against unexpected issues during I/O operations.
Extended the scope of the PushConnException to wrap any Throwable, whereas before it only used
to wrap IOExceptions. COMPATIBILITY NOTE: existing clients were
already not supposed to expect PushConnException to only wrap IOExceptions.
Introduction of Lightstreamer "Duomo" release (Server 4.0).
Check for newer versions online.
Introduced the use of WebSockets both for streaming and for subscription
and client message requests, which brings an overall performance improvement.
As a consequence, setForcedTransport now also supports the "WS", "WS-STREAMING",
and "WS-POLLING" values and the predisposed setEarlyWSOpenEnabled method
is now effective.
Replaced the "maxBandwidth" property of the ConnectionOptions bean with two distinct properties: "requestedMaxBandwidth" and the read-only "realMaxBandwidth", so that the setting is made with the former, while the value applied by the Server is only reported by the latter, now including changes during session life. The extension affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener (see the docs for details). COMPATIBILITY NOTE: Custom code using "maxBandwidth" in any of the mentioned forms has to be ported and recompiled. If the property is not used in any form, existing compiled code can still run against the new library.
Introduced a new callback, "onRealMaxFrequency", to the SubscriptionListener, to report the frequency constraint on the subscription as determined by the Server and their changes during subscription life. See the docs for details and special cases. COMPATIBILITY NOTE: Custom code has to be ported, by implementing the new method, and recompiled. Existing compiled code should still run against the new library: invocations to onRealMaxFrequency to the custom listener would cause an exception that would be caught internally.
Introduced a new property, "clientIp", in the ConnectionDetails bean; it is a read-only property with the related getter and keyword for onPropertyChange (see the docs for details).
Completed the implementation of methods whose implementation was only partial. This regards:
Removed a restriction on field names that can be supplied to a Subscription object within a "field list"; names made by numbers are now allowed. Obviously, the final validation on field names is made by the Metadata Adapter.
Fixed a bug which could have caused unexpected short blocks in the case of synchronous polling mode
Fixed a bug on the implementation of disconnect(), whereby an ongoing loop of connection attempt was not interrupted in case of Server down or wrong address.
Revised the sendMessage implementation in the HTTP case, to limit recovery actions
when messages are not to be ordered and a listener is not provided.
Revised sendMessage to accept 0 as a legal value for the "delayTimeout" argument;
negative values will now be accepted to mean that the Server default timeout is to be used.
COMPATIBILITY NOTE: Existing code using the 5-argument
version of sendMessage and supplying 0 as "delayTimeout" must be modified to use
-1 instead. Invocations to the 1-argument version don't have to be modified.
Added new error codes 66 and 68 to onServerError, onSubscriptionError, and
onSecondLevelSubscriptionError, to report server-side issues; previously,
upon such problems, the connection was just interrupted.
Added missing error code 60 to onServerError documentation; this error
reports server-side licensing limitations.
Removed error code 20 from onSubscriptionError and onSecondLevelSubscriptionError
documentation; when a subscription request cannot find the session,
the session is just closed and recovered immediately.
Revised the documentation of the possible error codes.
Slightly delayed the availability of the "serverSocketName" property of the ConnectionDetails bean, which was already valued upon session start. COMPATIBILITY NOTE: Custom code using getServerSocketName right after a session start, should ensure that onPropertyChange for "serverSocketName" gets invoked first.
Added the support for non standard unicode names, if supplied as hostnames in the Server's <control_link_address> configuration element.
Removed useless requests to the Server for bandwidth change when the Server is not configured for bandwidth management.
Improved the management of setHttpExtraHeadersOnSessionCreationOnly, when true. Previously, the extra headers (supplied with setHttpExtraHeaders) were still sent, redundantly, on control requests.
Revised the default setting for the "ContentLength" property of ConnectionOptions, to allow the library to set it to the best value.
Clarified in the documentation the meaning of null in setRequestedMaxFrequency and setRequestedBufferSize. Extended setRequestedMaxFrequency to allow the setting also when the subscription is "active" and the current value is null.
Improved the documentation of various methods in regard to the special case
of two-level subscriptions.
Detailed the documentation of the various
property getters and setters in regard to the possible values.
Improved the Javadocs, by shortening the concise descriptions of some classes and methods.
Fixed a bug, regarding only subscriptions in COMMAND mode, which caused unchanged fields to be redundantly indicated as changed. The bug didn't affect the returned data values.
Fixed a bug which could have caused onSubscriptionError and onCommandSecondLevelSubscriptionError to report wrong error codes, that is, codes different from the documented ones.
Fixed the documentation of onClearSnapshot, which is only predisposed.
Fixed the included README.TXT, that contained an obsolete note about the library not being ready for production. Only releases explicitly versioned as beta are not ready for production.
Added meta-information on method argument names for interface classes, so that developer GUIs can take advantage of them.
Clarified the documentation in regard to a few API methods that still have a partial implementation or are just predisposed and not implemented yet.
As moved to final, renamed the internal folder from "sdk_client_java_se_beta" to "sdk_client_java_se_unified".
Changed the names of some properties in the ConnectionOptions bean. To resume:
This affects the getter and setter names and also the invocations of onPropertyChange on the ClientListener. COMPATIBILITY NOTE: Custom code using any of the mentioned properties has to be ported and any related binaries have to be recompiled.
Added logging messages (at ERROR level) for those cases in which runtime exceptions could be thrown while running some asynchronus code paths.
Fixed potential NullPointerException which could be thrown when setting or updating fields and/or items list if logging is enabled at DEBUG level.
Fixed an error in the log of the keepalive interval setting.
Fixed the documentation of onServerError and onStatusChange, to specify that onServerError is always preceded, not followed, by onStatusChange with DISCONNECTED.
Revised javadoc formatting style and fixed various typos in the javadocs.
Updated the versions of some external libraries which the SDK depends upon.
Changed the type and behavior of the getConnectTimeout/setConnectTimeout. This setting is now represented as a String in order to accept the "auto" value. If "auto" is specified the value used internally will be chosen (and possibly changed overtime) by the library itself. Note that "auto" is also the new default value.
To check and or modify the current value, a new CurrentConnectTimeout property, with its getter/setter pair in ConnectionOptions, is exposed. COMPATIBILITY NOTE: if the setConnectTimeout method is called by the client code, the given parameter must be modified to be a String. If the getConnectTimeout method is called by the client code its receiving variable must be converted to a String; moreover it is likely that getConnectTimeout calls should be replaced by getCurrentConnectTimeout ones. See the docs for further details.
Added the new method disconnectFuture to the LigtstreamerClient class, with the purpose to provide a notification when all
threads started by all LightstreamerClient instances living in the JVM have been terminated, because no more activities need to be managed
and hence event dispatching is no longer necessary.
Such method is especially useful in those environments which require an appropriate resource management, like "full" Java EE application servers
or even the simpler Servlet Containers. The method should be used in replacement of disconnect() in all those circumstances where it
is indispensable to guarantee a complete shutdown of all user threads, in order to avoid potential memory leaks and waste resources.
See the docs for further details about the proper usage pattern for this method.
Prevented reconnection attempts upon wrong answers from the Server.
Resorted to an external package for the log support. COMPATIBILITY NOTE: Custom code using the LoggerProvider interface should be revised, based on the new documentation; see setLoggerProvider.
Introduced the possibility to override the library-set HTTP headers through the ConnectionOptions.setHttpExtraHeaders method (previously it was the other way round).
Improved the handling of long polling.
Added missing documentation of setProxy in ConnectionOptions.
Introduced as an improved alternative to the SDK for Java SE Clients.
The interface offered is completely different, and it is very similar
to the one currently exposed by the SDK for JavaScript Clients.
see "sdk_client_java_se_beta".
Check for newer versions on NuGet.
Introduced the new .NET PCL (Portable Class Libraries) SDK. See the "sdk_client_pcl" folder.
This SDK is intended as a replacement for the old:
COMPATIBILITY NOTE: The Portable Class Library dll included in this SDK targets the following platforms:
If the target of your application is an older framework, you should revert to the older Client libraries.
Thoroughly redesigned the protocol, mainly on the response side. The new protocol, named TLCP, helps achieving various improvements, such as the following:
See the included documentation for any details. Any custom clients based on the previous versions of the protocol are still supported by Lightstreamer Server.
Redefined the SDK version, which is now 2.0.0 and also represents the version of the underlying TLCP protocol. It is meant that any explicit or implicit reference to the "previous" versions of the SDK may include version 6.0.3 or earlier. The supplied build number is still increasing and can be used to disambiguate.
Restricted the syntax checks on the requests, so that some illegal cases that used to be accepted are now refused. For instance, negative numeric values were, in some cases, treated like missing values and replaced with defaults. COMPATIBILITY NOTE: No client is expected to fall into the above illegal cases.
Added the LS_cause_code parameter to LS_op=destroy requests. The supplied codes will now be possible cause codes of the "END" message. COMPATIBILITY NOTE: The newly available codes are not to be expected from the "END" message, unless extended invocations of LS_op=destroy requests are introduced.
Clarified the use of the Control Link in the protocol documentation.
Added the cause code 48 upon the "END" message (asynchronous close). COMPATIBILITY NOTE: The code can be issued only if the new <max_session_duration_minutes> setting (introduced with Lightstreamer Server build 1741) is used, hence custom clients don't have to be updated to take the code into account, as long as the Server configuration is not changed.
Extended the protocol to support the new client identification mechanism. See the added parameters for the "create_session.txt" request. COMPATIBILITY NOTE: Existing clients have to be extended with the new parameters in order to comply with the current and future versions of the protocol; however, Lightstreamer Server always guarantees the support for old clients.
Added the error code 30 upon control.txt; the case is only predisposed for future special licenses.COMPATIBILITY NOTE: custom clients which check the possible error outcomes don't have to be updated, as long as there is no change in license terms.
Removed the error code 14 upon create_session/bind_session, as it is no longer issued. The check was related with the use in custom clients of the Adapter Set used by the Monitor Console/Dashboard, which is an undocumented (and unneeded) option.
Fixed a clarification comment on the protocol documentation: the single quote is expected to be escaped in field values, not the double quote.
Updated the included examples, to reflect changes in Lightstreamer Server default configuration and predeployed Adapters.
Extended the syntax with the "Preamble" element in the response header, which may be used in specific cases for padding purpose only. COMPATIBILITY NOTE: existing custom clients that perform strict checks on the response headers may refuse the response and eventually fail to establish a session, hence they should be extended. Backward compatibility can be enforced by removing the new <use_enriched_content_type> configuration setting.
Clarified the requirements on the URL encoding of the request attributes.
Clarified the encoding of values in regard to UTF-16 surrogate pairs.
Added new possible error codes, namely 7 and 8, pertaining to both the bind_session.txt request and the END push message. COMPATIBILITY NOTE: custom clients which check the possible error outcomes may have to be revised. However, the new errors are only possible when limits on the maximum number of sessions are set, either through the <max_sessions> settings or through the JMX service or by special licenses.
Introduced a 3-decimal approximation for the reported bandwidth limit values.
Slightly revised che checks for wrong requests and the related log messages issued by Lightstreamer Server.
Revised the documentation, in regard to the names of the main concepts.
Introduced the "reconf" operation, which allows for dinamically reconfiguring the maximum frequency of currently subscribed items; see the Network Protocol Tutorial document for details.
Introduction of Lightstreamer "Duomo" release (Server 4.0).