RTView®
Core Release Notes |
|
Data Sources
22387: OLAP and WMI data sources have been retired
The OLAP and WMI data sources have been retired from RTView.
HTTP Data Source
22327: Added support for additional JSON formats
The RTView HTTP Data Adapter JSON handlers have been enhanced to support additional JSON formats. The RTView HTTP Data Adapter comes with two default handlers that allow data to be sent to RTView applications by means of JSON data in specific formats as HTTP POST requests. This JSON data is mapped to GmsTabularData and can be used to update RTView function chains or write to RTView caches directly. The default handlers are contained in the gmsjhttpds.jar. Previously they expected JSON data in the same format as output by the rtvquery servlet when fmt=json. Now, they have been enhanced to support JSON same format as output by the rtvquery servlet when fmt=js, and fmt=json&arr=1. These new json formats are more compact and reduce the size of the htttp response, compared to the original fmt=json http response. fmt=js is the JavaScript Array Response Format The following is a JavaScript Array response format, where <DataType> is one of the following strings: string, int, long, double, or date. The first row in the array contains the column names, the second row contains the column data types, and the remaining rows are the data rows from the data table. This format is the most compact format. [ ["column 1 name", "column 2 name", ...], [DataType, DataType, ...], [value for column 1 in row 1, value for column 2 in row 1, ...], [row 2 values, ...] ... ] fmt=json&arr=1 is JSON Response Format, but the JavaScript array response will be used for data rows in the response, thus "metadata":[ {"name":"column 1 name","type":DataType}, ... metadata for other columns ... ], "data":[ [value for column 1 in row 1, value for column 2 in row 1, ...], [row 2 values, ...] ... ] }
JMX Data Source
22083: Jmx commands no longer fail silently when RTView isn't connected
In previous releases, if a jmx command failed because RTView wasn't connected, it failed silently. This has been fixed and the error is reported.
Demos
22395: WMI and OLAP have been removed from demos
WMI and OLAP references have been removed from the dstutorials demo.
Display Server
22117: Tomcat no longer throws an error if image path contains a backslash
A bug has been fixed in the thin client which would cause Tomcat 8.5+ to throw an IllegalArgumentException if the path to an image contained a backslash. The full exception is as follows: java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
Distribution
21999: Signed .jar files have been retired
The zip file of SL-signed libraries at lib\signed_jars.zip has been removed from the product, as Java applets are no longer supported by RTView.
22402: Bundled Apache Tomcat update to 8.5.24
The version of Apache Tomcat that is included with RTView has been upgraded from 7.0.72 to 8.5.24.
General
22080: Command line arguments with spaces now process properly on Unix
In previous releases, quoted command line arguments with spaces did not work on unix. This has been fixed.
Java Version Dependencies
22161: Java 1.9 is now officially supported
Java 1.9 is now officially supported. NOTES: Users of IBM DB2 may need to use the db2jcc.jar driver from DB2 11.1 for compatibility with Java 1.9
Object Library
22398: Fx Graphs now supported in 64 bit java on Windows
The Fx Graph objects are now supported in the Builder & Viewer in 64 bit versions of Java on Windows. Previously only 32 bit java was supported. This enhancement does not affect Linux or MacOS rtview installations. The Fx Graph objects are still not supported in the Builder/Viewer on those platforms.
Charts (General)
22114: webChartFlag can now be set in styles sheet for bar and trend graphs
In prior releases, the webChartFlag property could not be set on obj_bargraph and obj_trendgraph02 objects via an rtview stylesheet (.rts) file. This has been fixed, so the following stylesheet entries will now set webChartFlag on all such objects: obj_trendgraph02 { webChartFlag: 1; } obj_bargraph { webChartFlag: 1; }
Pie Charts
19863: Added support for HTML pie charts
BASICS: The thin client now supports a web pie chart. The web pie chart is a pure HTML implementation of an RTView pie chart object. In the RTView thin client, the web pie chart provides an interactive, high performance chart without requiring the Flash player or other browser plugin. There is no web pie chart in the Builder palette. Instead, a new property named webChartFlag has been added to the flex (obj_fxpie) and swing (obj_pie) pie charts. To enable the web pie chart the user simply sets the webChartFlag property to true (checked) on a flex or swing pie chart instance. Then, when the display is opened in the thin client in a web compatible browser, the web pie chart will appear in place of the flex or swing pie chart. This feature is similar to the webChartFlag property that has been available on the flex and swing trend graph and bar graph objects in several prior releases. PROPERTIES: The web pie chart supports all of the major properties available in the flex and swing pie charts. However several minor properties are not supported or have limited support in the web pie chart. These properties are listed at the end of this note. BEHAVIOR: In addition to the properties listed below, there are some behavioral differences between the web pie chart and the flex/swing pie chart as follows. 1) Stretching: Unlike the swing pie chart obj_pie, the web pie chart does not stretch to an oval shape to fill the available space. Instead the web pie chart remains round, with its diameter determined by the smaller dimension. (The flex pie chart is always round too). 2) Slice order: In the swing and flex pie charts the bottom edge of the first wedge/slice, corresponding to the first row in the valueTable, is drawn at 0 degrees (that is, its bottom edge is horizontal). The slices for subsequent rows follow in counter-clockwise order. In the web pie chart, the first slice is drawn at 90 degrees, so its left edge is vertical. The slices for subsequent rows follow in clockwise order. 3) Tooltip: The tooltip on the web pie chart shows the label and value for a wedge, but does not show its computed % 4) Wedge labels (on obj_fxpie only): On obj_fxpie, wedge labels are visible unless wedgeLabelPosition = None(0), as expected. However, the label shows only the wedge's label, not its value or %. Also the wedgeLabelPosition values of "Inside with Callout(3)" and "Outside(4)" give the same result as "Callout(1)" on the html5 chart. If wedgeLabelPosition = Inside(2), some wedge labels may spill outside of their wedge, depending on the size of the label and wedge. ENABLING / DISABLING: The web pie chart can be enabled for all obj_fxpie (flex) instances by adding the following rule to an rtview stylesheet (.rts) file loaded by the display server: obj_fxpie { webChartFlag : 1 } Similarly, the web pie chart can be enabled for all obj_pie (Swing) instances by the following rule: obj_pie { webChartFlag : 1 } See the documentation for more information on using RTView stylesheets. If a stylesheet is used note that the webChartFlag value can still be overridden and set to zero (false) on individual instances. UNSUPPORTED/IGNORED PROPERTIES: As mentioned earlier, some chart properties are hidden in the builder if webChartFlag is checked. These properties of obj_fxpie are hidden if webChartFlag is checked: bg3dFlag bgGradientFlag labelColumnFormat rowLabelVisFlag rowNameVisFlag legendBgGradientFlag legendWidthPercent legendValueVisFlag legendPercentVisFlag entranceDuration entranceTrigger entranceType exitDuration exitTrigger exitType wedgeExplodeRadiusPercent wedgeLabelTextColor wedgeLabelTextFont These properties of obj_pie are hidden if webChartFlag is checked: bgEdgeWidth bgGradientMode bgGradientColor2 bgRaisedFlag bgShadowFlag bgStyle borderPixels labelColumnFormat rowLabelVisFlag rowNameVisFlag labelMinTabWidth legendBgGradientMode legendBgGradientColor2 legendWidthPercent legendValueVisFlag legendPercentVisFlag outlineColor transparencyPercent
Version 7.0.0 Release Notes
Alerts
21795: Fixed an issue where the Cleared Reason for an alert was incorrect
In prevous releases, the Cleared Reason was sometimes incorrect after an alert was disabled and re-enabled. This has been fixed.
21915: New Alert Scheduler added to RTView
RTView Alerts have been enhanced to support enabling and disabling alerts via schedule. In previous releases, schedules could only be applied to sql queries. In this release, the same schedules can also be applied to alerts. See the release note for 20179 or the Core User Guide for information on defining schedules. Configuration In addition to the schedule definitions, a table with the following columns is required to apply the schedules to alerts: Alert Name - The name of the alert to which the schedule will be applied. Alert Index - The alert index to which the schedule will be applied. If the Index Type is Default, this values should also be Default. For scalar alerts, this must be set to Default. Index Type - The index type of the Alert Index. If the value is All, the Alert Index value is assumed to contain all indexes. If the value is Default, this schedule will be applied to all alert indexes on the specified alert that do not match another row in this table. For scalar alerts, this must be set to Default. For tabular alerts that do not define any index types, this must be set to Default or All. Schedule - The name of a schedule from the RtvScheduleTable. Enabled - If false, this alert map row is not used. Like the schedule and rule tables, this table can be xml, database or any other table that can be retrieved via an RTView data source. The user must make the RtvAlertScheduleMap table available to RTView by defining a global reference function named RtvAlertScheduleMap. For scalar alerts, the Alert Index and Index Type must both be set to Default. For tabular alerts, if an alert name and alert index matches more than one row of the RtvAlertScheduleMap, the row with the Index Type All takes precedence. For all other Index Type values, the order in which they are specified in the indexTypes property on the alert definition controls the order of precedence. If an alert index doesn't match any of the rows, the schedule for the Default Index Type for the matching Alert Name is used. If there is no Default Index Type for that Alert Name, no schedules are applied to the alert. Runtime Behavior Schedules are applied to scalar alerts as follows: - If the alertamp, schedule or rule is not Enabled, it is ignored. - If the Exception for the Rule is set to true, the alert will be disabled from the Start Time to the End Time at which point it will revert back to the alert's enabled property value. This will have no effect if the alert's enabledFlag property value was previously false. When an alert is cleared due to being disabled via a schedule event, the Cleared Reason will be SCHEDULE STARTED if the alert was disabled because a schedule rule became active. The Cleared Reason will be SCHEDULE ENDED if the alert was disabled because a schedule rule became inactive. - If the Exception for the Rule is set to false, the alert will be enabled from the Start Time to the End Time at which point it will revert back to the alert's enabled property value. This will have no effect if the alert's enabledFlag property value was previously true. - Note that the Rule Interval value is not used by the alerts. Schedules are applied to tabular alerts as follows: - If the alert's enabledFlag is false, the scheduler will be ignored. In order to use schedules for tabular alerts, the alert's enabledFlag must be turned on. - If the alertmap, schedule or rule is not Enabled, it is ignored. - If the Exception for the Rule is set to true, the alert index will be disabled from the Start Time to the End Time at which point it will revert back to the alert's rowEnabledTable property value. This will have no effect if the alert index's rowEnabledTable property value was previously false for the alert index. When an alert is cleared due to being disabled via a schedule event, the Cleared Reason will be SCHEDULE STARTED if the alert was disabled because a schedule rule became active. The Cleared Reason will be SCHEDULE ENDED if the alert was disabled because a schedule rule became inactive. - If the Exception for the Rule is set to false, the alert index will be enabled from the Start Time to the End Time at which point it will revert back to the alert index's rowEnabledTable property value. This will have no effect if the alert index's rowEnabledTable property value was previously true for the alert index. - Note that the Rule Interval value is not used by the alerts. Schedule Events Table A new table, Schedule Events, has been added to the Alert Data Source. This table allows visibility into schedule events. It is updated with a new row each time a schedule sets the enabled flag on an alert or alert index. New rows replace the previous table content. In order to see all schedule events, you will need to store this table in a cache. This table contains the following columns: - Timestamp - The timestamp of the schedule event. - Alert Name - The name of the alert on which the schedule event occurred. - Alert Index - The alert index on which the schedule event occurred. This will be blank scalar alerts. For tabular alerts, this will be either be * or the name of the alert index depending on how the alert is configured in the RtvAlertScheduleMap. If the same schedule was applied to all alert indexes by specifying "Default" for both the Alert Index and Index Type, this value will be *. Otherwise, it will be the alert index value. - Schedule - The name of the schedule that generated the event. - Rule - The name of the rule in the schedule that generated the event. - Rule State - This will be STARTED if a rule became active. It will be ENDED if a rule became inactive. - Enabled - The enabled value of the alert or alert index after this schedule event occurred. Note that the Schedule Events table will be updated any time a schedule event occurs regardless of whether it results in a change to the enabled state of the alert. For example, you have an alert configured with a schedule rule that sets the enabled to false. If the alert's enabled state is already false when the schedule rule becomes active, it will not result in a change to the enabled state of the alert. Limitations Event alerts that are not configured with an alert index are not currently supported by the scheduler. Additional Changes This task also fixed a bug in the SQL scheduler where if specific dates are specified (instead of days of the week), the scheduler always returned the last date in the list as the next scheduled query time even if it wasn't the soonest date.
21924: Fixed an issue with disabling event alerts
In previous releases, disabling event alerts was sometimes ignored due to a bug that was introduced in RTView Classic 6.7.0, RTView EM 3.2.0. This has been fixed.
Builder
21672: Builder enhanced to remember dialog window sizes and positions
The Display Builder has been enhanced to automatically save and restore the size and location of the following dialogs: - Open (File->Open) - Save (File->Save/Save-As) - Function Results (Function Dialog->Result Button) The Tools->Reset Window Layout menu option and the -resetlayout command line option restore the size and location of these windows in addition to the other windows that were previously reset.
Builder - Options Dialogs
18560: Fixed a typo in Application Options
A typo in the Application Options Alert Global Notifications tab has been fixed.
Builder - Property Dialogs
15582: Japanese label for "Update Mode" property now shown on certain dialogs
Previously, the Japanese label for "Update Mode" property was not shown on certain polled ds attach to data dialogs when running on a Japanese OS. The English label was used instead. This is no longer the case. Affected dialogs include the custom polledds and polledds2 example data sources, and the http rest data source
Data Historian
21921: Microsoft SQL Server 2014 and 2016 now supported
Microsoft SQL Server 2014 and 2016 are now supported as databases for use with the Data Historian, provided that the latest JDBC driver is used (sqljdbc41.jar with Java 1.7, sqljdbc42.jar with Java 1.8).
Data Server
21898: Fixed an issue with rtvquery returning errors on valid query strings
In previous releases, the rtvquery servlet would sometimes return an error of "No data received before timeout, query may be invalid" for a specific, valid cache query string, on every attempt. The servlet needed to be restarted to clear the error. This has been fixed.
Data Sources
Cache Data Source
21689: Fixed an issue with the "Extend with SQL" cache feature
In prior releases, the "Extend with SQL" feature of the cache data source could cause thread growth if the history database connection was undefined or unavailable. This is now fixed.
Display Server
21853: Fixed an issue with small numbers not updating to zero in the thin client
In previous releases, the value displayed in an obj_rect_ilv object would not change if the previous value was greater than zero and less than one, and a value of zero was applied. This problem occurred only in the thin client and is now fixed.
21906: Thin client enhanced to check user role access on each request
In prior releases, after a user had logged into the thin client, the user could manually enter a specific URL in the same browser instance and possibly view data from rtview displays to which the user's role should have denied access. This is fixed.
21908: Enhanced display server with option to limit access to specific panel files
The display server now supports a "permitpanel" option to specify the panel layout files that the server will read. A panel layout for the thin client is requested from the display server with a URL parameter as follows: panels.jsp?file=X where X is the name of the panel layout file that the server should read. By default, the display server will attempt to read any filename on the server that is specified by the URL parameter. If the file is a valid panel layout file, the thin client will use it. But if the file does not exist, a "no such file" error is displayed in the browser, and if the file exists but does not contain the expected layout information, a "no panels found" error is displayed in the browser. The permitpanel option allows you to specify the file(s) which the display server will read in response to a panels.jsp request. Requests from panels.jsp for any other files are rejected with a "Permission denied" error shown in the browser, regardless of whether the file exists or not, and the server will not attempt to read such files. The option may be specified multiple times to allow access to multiple panel files. Command-line example: run_displayserver -permitpanel:PANELS.ini -permitpanel:layout.xml DISPLAYSERVER.ini example: permitpanel PANELS.ini permitpanel layout.xml In addition, the display server supports another new option to prevent attempts to load remote files, as follows: -permitfile:LOCAL_ONLY If that option is specified any rtv or image files that are referenced by URL will not be read and the server will log a message similar to the following: non-local file read permission denied: http://host/somefile
21909: Tomcat logs no longer produce gratuitous rtvCleanup errors
In previous releases the following error message appeared in the Tomcat log at shutdown, for each deployed copy of the rtvdisplay servlet: "SEVERE: The web application [/rtvdisplay] appears to have started a thread named [rtvCleanup] but has failed to stop it. This is very likely to create a memory leak." Starting with this release, the error message should be seen less often in the log file, although it may still appear occasionally. In any case, there is no danger of a memory leak when tomcat is shutdown.
21912: Fixed phishing vulnerabilities in thin client
In prior releases, it was possible to create phishing URLs which appeared to be directed at the rtview thin client but would redirect the user to another site, or download and possibly execute a file. These vulnerabilities have been fixed.
21990: Fixed a vulnerability in the thin client
An XSS (cross-site scripting) vulnerability in the thin client login.jsp file has been fixed.
21996: Fixed an issue with thin client resizing
In previous releases, after a display is resized by the thin client to fit the browser window, the black border around the default button (if any) was drawn in the button's original position, rather than the button's new position. This is fixed.
Distribution
21794: Bundled Apache Tomcat updated to 7.0.72
The version of Apache Tomcat that is included with RTView has been upgraded from 6.0.18 to 7.0.72.
Object Library
Tables
21045: Misconfigured table objects no longer cause javascript exceptions in the thin client
A bug in the thin client has been fixed which could cause a javascript exception if the columnFormat on a table object was misconfigured to specify a format for a string column, and a backslash character appeared in the column.
Platform Support
21871: Support for Java 1.6 dropped
RTView is now built with Java 1.7. Java 1.6 is no longer supported.
Version 6.9.0 Release Notes
21524: Format Table Columns function enhanced to preserve numeric column types
The Format Table Columns function supports a new argument, described below, to control its treatment of numeric columns. Format Mode - If 0 then all numeric columns are converted to strings in the result, using the local default format for any numeric columns not specified in Column Format(s). If Format Mode is nonzero, then only the numeric columns specified in Column Format(s) are formatted, all other numeric columns in the table remain numeric. The default value of Format Mode is zero, which makes the function behave as it did prior to this enhancement.
21582: Thin Client now adds scrollbars at smaller resolutions
Displays in the thin client with a minimum size and resize mode = Layout now correctly display scrollbars at smaller resolutions.
21668: Enhanced caches with new initialization option
BACKGROUND: If a cache's schemaTable property is not specified, then the cache's schema (column names and types) is copied from the first data table applied to the cache that contains at least one data row. Data tables that contain columns but no rows are ignored. In some configurations that can delay cache initialization and cause undesired behavior in functions and displays attached to the cache. ENHANCEMENT: An option has been added to the cache data source to initialize a cache's schema from the first data table applied to the cache, even if the table contains zero data rows. The new option can be specified on the command-line as follows: -cacheds:storeempty Or in CACHEOPTIONS.ini as follows: storeempty true Or in an rtview properties file as follows: sl.rtview.cache.storeempty=true The new option is disabled by default. If the new option is not specified, the cache's schema is initialized by the first data table containing at least one data row that is applied to the cache, as in all prior releases. If a cache's schemaTable property is specified then the cache's schema is always initialized from that table, as in prior releases, regardless of the new property setting.
Alerts
21677: Enhanced Alert data source
The Alert data source has been enhanced to support a new table named Alert Definitions. This table contains a row for each alert with the following columns: Alert Name - the name of the alert File Name - the name of the file containing the alert definition Substitutions - the substitutions specified when the alert definition file was loaded.
Commands
21562: Open Browser command enhanced to open the url in a new browser tab
For an Open Browser command with Browser Window = Named and Window Name = _tab, the thin client will now open the URL in a new browser tab rather than in a popup browser window. In all other cases the command behaves as in prior versions. This feature requires the browser's settings to be configured to automatically open a new tab for popup windows. That is the default setting in all browsers. But if the settings are configured to open popups in a new window, then the Open Browser command will open the URL in a new window as in prior releases.
Data Historian
21683: Fixed a retention / compaction issue
When a mixture of simple retention and retention via advanced compaction was used, only the first table using simple retention was processed for retention. This has been corrected.
21699: Enhanced Historian compaction to avoid long delays
The Historian smooth compaction code no longer performs a row count. This prevents long delays during smoothing by avoiding Select Count(*) calls.
Data Server
21648: Enhanced rtvquery servlet to handle +/- infinity and NaN
In prior releases, the rtvquery servlet encoded the numeric values NaN (not a number), positive infinity, and negative infinity in a json or jsonp response as "" (an empty string). This makes it impossible for a client application to distinguish between those three values, when processing a json or jsonp response. In this release, the rtvquery servlet supports a URL parameter to encode NaN, positive infinity, and negative infinity in a json or jsonp response as the strings "NaN", "Infinity", and "-Infinity" respectively. The new parameter is named "nanok" and a value of true specifies the new behavior. The default value is false. For example, the following URL specifies the new option: http://somehost/rtvquery/cache/MyCache/current?fmt=json&nanok=true The other response formats (xml, xmlrtv, js, text) supported by the rtvquery servlet have always used NaN, Infinity, and -Infinity. That behavior has not been changed, so the nanok=true parameter is not needed to make those values appear in the response in those formats.
21684: Enhanced rtvquery servlet to support CORS
The rtvquery (REST) servlet has been enhanced to support CORS (Cross-Origin Resource Sharing). A new optional property named AllowOrigins may now be specified in rtvquery.properties. The property value is a string that specifies which domains are allowed to send requests to the servlet. By default AllowOrigins is blank, which indicates that requests are allowed only from the same domain that hosts the rtvquery servlet (as in all prior releases). Specify a value of * to indicate that requests are allowed from any domain: AllowOrigins=* Or, specify a comma-separated list of the domains which may make requests, in this format: protocol://hostname_or_address:port For example: AllowOrigins=http://192.168.20.11:3456,https://SomeHost:6789
Data Sources
21658: HTTP REST DS
The RTView HTTP REST Data Adapter, is an extensible data adapter that allows RTView to interact with REST APIs by means of HTTP Requests. The Data Adapter provides an extensible framework with RTView, using the Apache HTTP Client to Make HTTP requests. Handlers are used to abstract the process of making an HTTP request. The RTVHttpRest adapter supports data attachments which will execute an HTTP Request, to get an HTTP Response, which can then be processed to extract a data table for use within RTView. The data attachments specify the handlers used for the various parts of making and processing an HTTP Request and Response. Default Handlers are available, and the user can implement custom handlers to extend functionality.There are examples of custom handlers in the custom/rtvhttprest directory of the RTView installation. Abstracting the HTTP Request / Response sequence in RTView Consider the following simplified execution of an HTTP Request using the Apache HTTP Client library which handles the response and updates a data attachment with GmsTabularData: // Get a HTTP Client CloseableHttpClient httpClient = getHttpClient(dataObj); // Get a HTTP Request HttpUriRequest request = getRequest(dataObj); // Execute request using client to get response CloseableHttpResponse response = httpClient.execute(request); // Handle response to get Tablular Data GmsTabularData table = getTabularData(response, dataObj, ...) // Update the data attachment(s) ds.storeData(dataObj, table); The above code can be used to interact with any HTTP REST API. The processing that varies has been abstracted out and can be supplied by pluggable handlers (java classes) which implement the appropriate interface. These can then be specified in the data attachment for the given HTTP Request and must be on the classpath of the RTView application at run time. The Attatch to RTVHttpRestData dialog contains the following fields: - Client Handler: A text field used to specify the fully qualified name of the java class used to implement the ClientHandler interface (com.sl.gmsjhttprestds.ClientHandler). The ClientHandler returns a CloseableHttpClient (client) that is used to execute a request (returned by a RequestHandler implementation) to return a response that is processed by a ResponseHandler. The DefaultClientHandler (com.sl.com.sl.gmsjhttprestds.DefaultClientHandler) can be used to return a default client. For more sophisticated client interactions a custom ClientHandler implementation can be written and used. See the RTView javadocs for more details. There are examples of custom handlers in the custom/rtvhttprest directory of the RTView installation. Typical uses of a custom ClientHandler implementation would be to set header fields required to interact with a REST API, e.g. Authentication tokens - Request Handler: A text field used to specify the fully qualified name of the java class used to implement the RequestHandler interface (com.sl.gmsjhttprestds.RequestHandler). The RequestHandler returns a HttpUriRequest (request) that is executed by a client handler to return a response that is processed by a ResponseHandler. The DefaultGetRequestHandler (com.sl.com.sl.gmsjhttprestds.DefaultGetRequestHandler) can be used to return a default HTTP GET request. Default request handlers are provided for all the HTTP request operations. Typical uses of a custom RequestHandler implementation would be to set header fields required to interact with a REST API (e.g. Authentication tokens) or process information supplied in the request string argument to enhance the contents of a request if it cannot be specified by the request URI alone. For more sophisticated request handling, a custom RequestHandler implementation can be written and used. See the RTView javadocs for more details. - Request: A Text field used to specify the URI used to make the request executed by the request handler. The Request Handler may use the request as is, or process it to extract additional information used in the request. The format of a URI, used by an HTTP request:[//[user:password@]host[:port]][/]path[?query][#fragment] - ResponseHandler: A text field used to specify the fully qualified name of the java class used to implement the ResponseHandler interface (com.sl.gmsjhttprestds.ResponseHandler) The ResponseHandler returns a GmsTabularData that is extracted by the RequestHandler from the response as a result of a request obtained from a RequestHandler being executed by a client obtained from a ClientHandler. The DefaultResponseHandler (com.sl.com.sl.gmsjhttprestds.DefaultResponseHandler) can be used to obtain default GmsTabularData containing information from the response. Typical uses of a custom ResponseHandler implementation would be to extract GmsTabularData from a given response. For more sophisticated response handling a custom ResponseHandler implementation can be written and used. See the RTView javadocs for more details. - Column(s): A combo box for specifying the names of the table columns to include in the result, or * (the default) for all columns. - Filter Rows: A checkbox to enable the following 2 fields: - Filter Column: The name(s) of the columns(s) to which the Filter Value should be applied. - Filter Value: The filter value(s) to be applied to the filter columns. See the RTView documentation for details on the format to be used for specifying filter values. Note that wild cards and regular expressions are not supported in the Filter Value field. For that type of filtering, various standard RTView functions are available.
Cache Data Source
21669: Enhanced caches with new trim option
An option has been added to the cache data source to remove rows periodically from a cache's history table according to its historyTimeSpan property. By default, that operation is performed only when new data is applied to the cache. The new option is useful in rare cases where new data may be applied to the cache at time intervals (e.g. 1 hour) that are longer than the cache's historyTimeSpan (e.g. 30 minutes). The new option can be specified on the command-line as follows: -cacheds:trimhist Or in CACHEOPTIONS.ini as follows: trimhist true Or in an rtview properties file as follows: sl.rtview.cache.trimhist=true If the new option is specified, the historyTimeSpan limit is checked on all caches every 30 seconds, approximately. The new option is disabled by default. If the new option is not specified, then the historyTimeSpan limit is only checked when new data is applied to the cache as in all prior releases.
HTTP Data Source
21522: Added new HTTP Data Adapter
The RTView HTTP Data Adapter embeds a HTTP server in RTView to handle data sent as HTTP Requests. When enabled, the embedded HTTP server is opened on a specified port, and delegates requests to handlers on given URLs. The RTView HTTP Data Adapter comes with two default handlers that allow data to be sent to RTView applications by means of JSON data in a specific format as HTTP POST requests. This JSON data is mapped to GmsTabularData and can be used to update RTView function chains or write to RTView caches directly. RTView can be updated by clients that can send HTTP POST requests, containing JSON data. Handlers receive the data, map the data to GmsTabularData, and then perform actions with that data. The default handlers are contained in the gsmjhttpds.jar. They expect JSON data in the same format as output by the rtvquery servlet when fmt=json. If no metadata is present, all columns are defined as string type. The rtvquery JSON response format is defined as: { "metadata":[ {"name":"column 1 name","type":DataType}, ... metadata for other columns ... ], "data":[ {"column 1 name":"row1, column1 value", ... data for other columns in row 1}, ... data for other rows ... ] } The expected format is a JSON object that can be mapped to GmsTabularData. The JSON object has two named members: "metadata" describing the metadata (column names and types for the following data), and "data" containing the data values. The "metadata" member is a name:value pair where the value is a JSON array of JSON objects, one per column. The column metadata objects have two members: "name" and "type". The "name" member is a name:value pair with the column name as its value. The "type" member is a name:value pair with the column type as its value. Valid column types are GmsTabularData column types: "string", "long", "int", "double", "float", "date", "boolean". The metadata is used to define the column types for the mapped GmsTabularData. If the metadata member is not present, the mapped GmsTabularData will use "string" for all columns. The "data" member is a name:value pair where the value is a JSON array of JSON objects, one per row of data in the mapped GmsTabularData. Each row is a JSON object, with member name:value pairs, one per column. Each column member is a name:value pair, where the name is the name of the column, and the value is the value of that column for that row. When the RTView HTTP Data Adapter is enabled (using the default RTVHTTPOPTIONS.INI file, contained in custom\rtvhttp), it has the following options set: Enabled: true Port: 9099 Root Url: /rtview Use HTTPS: false And sets the following RTVHttp Handlers DEFAULT_CACHE_WRITER Handler Name:DEFAULT_CACHE_WRITER Java Class: com.sl.gmsjhttpds.DefaultJsonCacheWriter Handler URL: /write/cache/ DEFAULT_JSON_HANDLER Handler Name:DEFAULT_JSON_HANDLER Java Class: com.sl.gmsjhttpds.DefaultJsonHandler Handler URL: /json/data/ DEFAULT_JSON_HANDLER is the Default Handler. The default handlers are contained in the gsmjhttpds.jar. They expect JSON data in the same format as output by the rtvquery servlet. If no metadata is present, all columns are defined as string type. HTTP POST requests to /rtview/json/data/<table_name> will be handled by the DEFAULT_JSON_HANDLER, which will make the data available via rtvhttp data attachments using the supplied <table_name>. Data sent to /rtview/json/data/<table_name> will be output by RTView HTTP data attachments, where the "Handler Name:" is set to DEFAULT_JSON_HANDLER, and the "Table Name:" is specified as the <table name> in the URL. For Example: Data sent to /rtview/json/data/MyData1 would be output by RTView HTTP data attachments, where the "Handler Name:" is set to "DEFAULT_JSON_HANDLER", and the "Table Name:" is "MyData1". Likewise, data sent to /rtview/json/data/MyData2 would be output by RTView HTTP data attachments, where the "Handler Name:" is set to "DEFAULT_JSON_HANDLER", and the "Table Name:" is "MyData2". Different data can be input to different function chains by being sent to different URLs in this way. HTTP POST requests to /rtview/write/cache/<cache_name> will be handled by the DEFAULT_CACHE_WRITER, which will write the data to the current table of the named cache, <cache_name>. Since the data is written to the cache directly by the handler using the cache name in the URL, no data attachments need be configured in this case. For Example: Data sent to /rtview/write/cache/CACHE1 would be written to the current table in cache "CACHE1". Likewise, data sent to /rtview/write/cache/CACHE2 would be written to the current table in cache "CACHE2". Different data can be written to different caches by being sent to different URLs in this way.
21646: A new servlet has been added for use with the HTTP Data Source
A new RTVPost Servlet has been added to RTView. This is a proxy servlet for use with the HTTP Data Source. It is useful for cases where an application cannot post directly to the application running the HTTP Data Source due to security or post access limitations. For RTView Enterprise Monitor users, this is useful for the NODEMON and DOCKERMON solution packages in the case where your node or docker application is outside the firewall and is limited to posting to port 80. The RTVPost servlet is in RTV_HOME\servlets\rtvpost\rtvpost.war. The following properties are supported in rtvpost.properties: proxyHost: The http host to which to post. The default is localhost. proxyPort: The http port to which to post. The default is 3275. proxyPath: The path to which to post. This is commented out by default. RTView Core users can modify RTV_HOME\servlets\rtvpost\rtvpost.properties and run the make_war script to rebuild the rtvpost.war file. RTView Enterprise Monitor users can run RTVAPM_HOME\common\bin\make_rtvpost_war from their project\webapps directory as follows: make_rtvpost_war appname -host:somehost -port:someport Where appname is the name of your application. The host and port options are optional. If not specified, the defaults above will be used. The appname argument is used to name the war file, appname_rtvpost.war. To modify the proxyPath, copy RTV_HOME\servlets\rtvpost\rtvpost.properties to your webapps directory, modify the proxyPath value and then run make_rtvpost_war as described above. To use the rtvpost war file, deploy it to your application server. HTTP posts should use the URL for rtvpost and will be forwarded to the specified proxyHost and proxyPort.
IBMMQ - IBM WebSphere MQ
20881: Version Restriction Removed for MQ Client jars
Previously the IBM MQ data adapter checked for the presence of a class that was only in a version specific set of MQ client jars. This is no longer the case. Users can now use any version of MQ client jars (greater than or equal to MQ version 6.0) in their classpath when using the IBM MQ data adapter. Note: Since the actual set of required MQ client jars varies by version of MQ, it is suggested that the set of MQ Client jars be put in a directory so that the java classpath "wildcard" mechanism can be used to refer to all the jars in a directory, rather than having to enumerate every jar file on the classpath. The RTV_USERPATH environment variable can be used to set a user defined classpath. for example: SET RTV_USERPATH=".;.\lib_7.1\*" or SET RTV_USERPATH=".;.\lib_7.5\*" Note: for later versions of MQ (8.0, 9.0) a single relocatable jar com.ibm.mq.allclient.jar is available.
SQL Data Source
21680: Fixed an issue with encrypted database passwords
In version 6.7, a problem was introduced that caused an error to print to the console for sl.rtview.properties.databasePassword property if the property value was encrypted. In the error message, the databasePassword in the error was shown in plain text. This problem has been fixed.
TIBCO Hawk Data Source
21851: An issue with the handling of the onTermination event has been fixed
In a previous version, in task 21299, a bug was introduced to the onTermination() error handling. In some cases, it would cause all data from the microagent that sent the error to stop coming into RTView. This has been fixed.
Display Server
21525: Added support for removing items from thin client context menu
Items can now be removed from the thin client context menu. This is done by specifying the names of the items in a property named MenuItemsToHide in rtvdisplay.properties. Multiple names are separated by commas. For example, the following will remove the "Export Table To HTML", "Export Table to Excel", "Export PDF", and "Status" items from the menu: MenuItemsToHide=PDF,ExcelTable,HtmlTable,Stat After adding the MenuItemsToHide property to rtvdisplay.properties, the corresponding .war file must be rebuilt and redeployed. Here are the names of all of the menu items, with the English label string of the menu item in quotes if it differs from the item name: Refresh Back Next Command "Execute Command" Drill "Drill Down" ExcelTable "Export Table to Excel" (Internet Explorer only) HtmlTable "Export Table to HTML" PDF "Export PDF" CopyCell "Copy Cell Value" Stat "Status" Logoff "Log Off" Use the menu item name when configuring MenuItemsToHide, not the label string.
Functions
21647: ArrayIndexOutOfBoundsException has been fixed
In previous releases, it was possible to get an ArrayOutOfBoundsException when closing a display containing a composite that was configured with the substititons property. This has been fixed.
General
21638: Firefox now displays button states the same as other browsers
In the thin client in Firefox, a button control (obj_c1button) will now appear depressed when the user clicks on it, as it does in other browsers.
21772: Extra-bold font in Firefox fixed
In the previous release, objects using font index 7 (sans-serif bold) would appear extra bold in some versions of Firefox if the display server was configured to use the extended font feature with arimob.ttf assigned to font 7. This has been fixed.
Object Library
Bar Charts
19862: Added new web bar chart
BASICS: The thin client now supports a web bar chart. The web bar chart is a pure HTML implementation of an RTView bar chart object. In the RTView thin client, the web bar chart provides an interactive, high performance chart without requiring the Flash player or other browser plugin. There is no web bar chart in the Builder palette. Instead, a new property named webChartFlag has been added to the flex (obj_fxbar) and swing (obj_bargraph) bar charts. To enable the web bar chart the user simply sets the webChartFlag property to true (checked) on a flex or swing bar chart instance. Then, when the display is opened in the thin client in a web compatible browser, the web bar chart will appear in place of the flex or swing bar chart. This feature is similar to the webChartFlag property that has been available on the flex and swing trend graph objects in several prior releases. PROPERTIES: The web bar chart supports all of the major properties available in the flex and swing bar charts. However several minor properties are not supported or have limited support in the web bar chart. These properties are listed at the end of this note. BEHAVIOR: In addition to the properties listed above, there are some behavioral differences between the web bar chart and the flex/swing bar chart as follows. - Legend: The legend does not show bar or trace data (y) values. Data values are only shown in the mouseover tooltips (if mouseOverFlag = 1). Labels longer than 200 pixels are wrapped in the legend, and labels longer than 150 pixels are clipped in the tooltip. The width and height of the legend is different between the bar char implementations. - Bar width and spacing will differ slightly between the chart implementations. - Bar values: The web chart automatically selects a text color and shadow to contrast with the corresponding bar, ignoring barValueTextColor. - Y axis autoscaling: Given the same y data values, the web bar chart may choose a different value range for the y axes in autoscale mode as compared to the older charts. Also the format and number of y axis labels shown on the web chart are determined automatically, unlike the swing bar chart where various yAxis* properties are used. - X axis label rotation threshold, spacing, and count differ between implementations. Also the web chart may skip labels on some bar groups to avoid crowded or overlapping labels. - Zooming: The user can zoom in on the chart's X axis (Y axis if drawHorizontalFlag = 1) by dragging across the plot area. - Reset button: If the user changes the chart's visible range, via the scrollbar or by dragging the cursor to perform a zoom, then a button labeled Reset will appear in the upper left corner of the plot area. A click on this button will reset the x axis to its original settings. - Scrolling: If the mouse is moved below the bottom of the chart while dragging the scrollbar, the scrolling will stop. This is unlike the behavior of other rtview objects, which will continue to scroll until the mouse button is released. - The perspective in 3D mode differs (above-right perspective in swing chart, center perspective in web chart). - The waterfall total bar (if visible) is not labeled on the X axis of the web chart - The web chart plots each trace point in the center of the corresponding bar group, while the swing chart plots each trace point on the center of each corresponding bar. OTHER KNOWN ISSUES/DIFFERENCES: - The max zoom-in level is one bar group. For example if there are 2 bars in each bar group, there will usually be at least 2 bars visible regardless of how far you zoom in. But, if the user intentionally zooms in on blank space between bars it is possible to end up with no visible bars. - After zooming or scrolling, the y axis range (x axis in horizontal mode) may change to reflect the range of values of the visible bars. This is designed behavior. - If draw3dFlag is set, dragging the scrollbar will also initiate a zoom-in, as though the user dragged in the plot area. This can be avoided by scrolling via clicks on the scrollbar arrows, instead. - Scrolling performance on a chart with many bars may be sluggish, depending on the vintage of the browser & host. - The chart's tooltip may overlap the Reset button making it difficult to click the button. Moving the mouse a bit will correct this problem. - Performance is affected by the number of bars, traces, trace points, use of trace line shadows, bar/trace fill, and other properties. Performance is also affected by the browser and version, and the CPU speed of the client host system. - On a touch interface, a swipe will scroll the chart left or right. - On a touch interface, a pinch-open gesture in the plot area will zoom the chart's range *in* to the pinched range. A pinch-close gesture will zoom out to the pinched range. A left/right swipe (or an up/down swipe in horizontal mode) will scroll the chart. The scrollbar (if visible) cannot be dragged reliably on a touch device, but the scrollbar arrow keys can be tapped. ENABLING / DISABLING: The web bar chart can be enabled for all obj_fxbar (flex) instances by adding the following rule to an rtview stylesheet (.rts) file loaded by the display server: obj_fxbar { webChartFlag : 1 } Similarly, the web bar chart can be enabled for all obj_bargraph (Swing) instances by the following rule: obj_bargraph { webChartFlag : 1 } See the documentation for more information on using RTView stylesheets. If a stylesheet is used note that the webChartFlag value can still be overridden and set to zero (false) on individual instances. SUMMARY OF UNSUPPORTED/IGNORED PROPERTIES: As mentioned earlier, some chart properties are hidden in the builder if webChartFlag is checked. An "n/a" after the property means the feature is not supported, "auto" means the value is assigned automatically and is not configurable, otherwise the assumed value of the property is shown. traceValueAlarmStatusTable : n/a (alert coloring & styling of trace markers is not supported, only supported for bars) valueHighAlarmMarkColor : n/a valueHighAlarmMarkStyle : n/a valueHighWarningMarkColor : n/a valueHighWarningMarkStyle : n/a valueLowAlarmMarkColor : n/a valueLowAlarmMarkStyle : n/a valueLowWarningMarkColor : n/a valueLowWarningMarkStyle : n/a bgEdgeWidth : 1 bgGradientMode : n/a bgGradientColor2 : n/a bgRaisedFlag : false bgShadowFlag : false bgStyle : Rectangle borderPixels : n/a barImage : n/a barValueTextColor : auto barValueTextFont : auto barValueTextHeight : auto labelColumnFormat : auto traceYValueFormat : auto yValueFormat : auto rowLabelVisFlag : true rowNameVisFlag : false mouseOverHighlightFlag : true scrollbarSize : auto scrollbarStartAtMaxFlag : true labelMinTabWidth : n/a barCenterFlag : true barFitFlag : true horizAxisLabelRotationAngle : auto horizAxisMinLabelHeight : n/a vertAxisMinLabelWidth : n/a legendBgGradientMode : n/a legendBgGradientColor2 : None legendWidthPercent : auto legendValueVisFlag : false (bar value is shown in tooltip, not legend) outlineColor : n/a markDefaultSize : auto markScaleMode : No scale transparencyPercent : 0 gridBgGradientMode : None gridBgGradientColor2 : n/a gridBgImage : n/a traceYAxisFormat : auto traceYAxisMajorDivisions : auto traceYAxisMinorDivisions : auto yAxisFormat : auto yAxisGridMode : Bar Axis yAxisMajorDivisions : auto yAxisMinorDivisions : auto traceProperties.MarkerColor (uses trace color) OTHER PROPERTY DIFFERENCES: scrollbarMode: "As Needed" mode is treated the same as "Always". The scrollbar is always horizontal, even if bars are horizontal. traceFillStyle: solid, gradient, & transparent gradient are all treated as transparent. traceProperties.MarkerStyle: For any value other than "No Marker" the marker style is chosen automatically. drillDownSelectMode: ignored, always treated as Element Only. barValueTextPos: if "Center" (4) position is selected, the bar values are shown in the center of each bar, all other position settings are ignored and the value position is chosen automatically. minSpacePerBar: If the property is set to 1 (the default) or less the chart will display a bar for every data value, even if that makes bars overlap when there are more bars than can fit in the plot area. In the swing chart, if minSpacePerBar > 1 it specifies the minimum pixel width for each bar (or height, in horizontal mode) so if there are more bars than can fit in the plot area given that minimum bar width (plus space between the bars) then only a subset of the bars are visible, and the user must scroll to see the additional bars. But in the web chart, the minSpacePerBar is instead used to calculate the minimum number of bar groups that should always be visible regardless or the plot area width. The calculation attempts to match the swing chart behavior but results will vary. webChartVisBarGroups: This is a new property and is visible only if webChartFlag = 1. It specifies the maximum number of bar groups that should be visible in the plot area. This can be used as an alternative to minSpacePerBar to control the size and number of visible bars. Depending on the size of the plot area and other factors, there may sometimes be one more or one fewer bar group visible than expected. The default value is zero which means there is no limit on the number of visible bar groups.
Charts (General)
21675: Enhanced charts with properties for legend text
Properties named legendTextFont and legendTextSize have been added to obj_trendgraph02, obj_bargraph, and obj_pie to allow the user to choose the font and size for legend text. Previously the legends on those objects always used SansSerif at 9 pixels (trend) or 10 pixels (bar and pie) . Those are now the default values for the new properties.
Links
21564: New Link Path Types have been added
RTView links have been enhanced to support two new linkPathType property values: Horizontal Square - Links are drawn from the right/left side of the parent closest to the child to the right/left side of the child closest to the parent. The link is straight if the parent and child are aligned horizontally, otherwise the link line has two 90 degree angles. This linkPathType has a limitation when the right/left side of the parent and child nodes overlap. In this case, the link line will be clipped. Vertical Square - Links are drawn from the top/bottom side of the parent closest to the child to the top/bottom side of the child closest to the parent. The link is straight if the parent and child are aligned vertically, otherwise the link line has two 90 degree angles. This linkPathType has a limitation when the top/bottom side of the parent and child nodes overlap. In this case, the link line will be clipped. The links have also been enhanced with a new property, linkCrossBarSpacing, in the Link Line category. This property is only applied if the linkPathType is set to Horizontal Square or Vertical Square. If this property is set to -1, the perpendicular line between the parent and child nodes is positioned in the center of the space between the parent and child nodes. Otherwise, it is positioned the specified number of pixels from the parent node. If the value is greater than the space between the parent and child nodes, the perpendicular line will be drawn in the center of the available space. Links with these linkPathTypes have been added to the Links palette in the builder. The Horizontal Square and Orthogonal links look the same in the palette, but the linkPathType is shown in the status area to help differentiate them.
Object Grid
21629: Style sheets are now correctly applied
In previous releases, the style sheet was not applied correctly to the icons in the object grid. The behavior was different in the viewer and the thin client. In the thin client, the style sheet was never applied to the icons in the object grid. In the viewer, the stylesheet properties always overrode the property values specified in iconProperties. This has been fixed so that both the viewer and thin client behave as follows: If a property value is specified in iconProperties, this value takes precedence over the style sheet value. Properties for which no value was specified in iconProperties will use the style sheet values. If you have an object grid in a display from a previous release that counts on the previous behavior, you have 2 options: 1. Modify the iconProperties value for your object grid so that all properties that should override the style sheet are specified and no properties that should not override the style sheet are specified. 2. Use the following command line option to revert to the old behavior: -objgriduseoldss
Tables
21666: Tree Grid support added to Table objects
The table object (obj_table02) now supports a "Tree Grid" mode. In this mode, the first column of the table behaves as a tree, allowing table rows to be expanded/collapsed in groups according to a hierarchy defined by the index columns in the data table. The new mode can be configured in the builder, but the feature is only fully implemented in the thin client. Three properties have been added to obj_table02 to support the new mode. These are visible only if webGridFlag is checked: webTreeGridFlag: check this to enable the new mode webTreeLabelColumn: the name of the column to be added as the tree (first) column of the table webTreeAggregateColumns: a list of column names and calculations to be applied to data columns in parent rows INDEX COLUMNS: To use the new mode, the table object's indexColumnNames property must be specified. Each index column in the data table (attached to the valueTable property) defines a level in the tree -- the first index column specifies the values for the top level of the tree, the second index column specifies the values for the second level in the tree, and so on. For example, here is a portion of a data table containing Major League Baseball (MLB) standings. The index columns are named League, Division, and Team: League Division Team W L American East Red Sox 93 69 American East Blue Jays 89 73 American Central Indians 94 67 American Central Tigers 86 75 American West Rangers 95 67 American West Mariners 86 76 National East Phillies 95 67 National East Mets 87 75 National Central Cubs 103 58 National Central Cardinals 86 76 National West Dodgers 91 71 National West Giants 87 75 (Note: The full MLB table has 5 teams in each division). The index column values in the above data table can be used to create a 3 level tree, as follows: > American > East Red Sox Blue Jays > Central Indians Tigers ... etc ... > National > East Phillies Mets ... etc DATA TABLE FORMAT: When tree grid mode is enabled, the data table is automatically converted to the format required for the mode, as follows: 1) A row is added to the table for each parent level in the tree. For example, when the MLB table above displayed in tree grid mode, it will contain 8 additional "parent" rows which don't appear in the original table. These rows are added for the parent levels in the tree, one for the American League, one for the National League, and one for each of the 3 divisions in each league (American East, American Central, American West, National East, National Central, National West). The data columns (W, L) for each of the parent rows is assigned a value of zero. This is because there is no data in the original table for the parent rows. 2) A new column is added to the beginning of the table to display the tree levels. By default the column is named "Node Label" but a different name can be specified in the webTreeLabelColumn property. 3) Columns named Node ID and Parent ID are added to the table. These define the parent-child relationships in the table, and are used by the thin client to construct the tree. These columns are automatically hidden, via the columnsToHide property. AGGREGATION: As mentioned earlier, the parent rows added to the data table will contain a zero in each numeric data column. The webTreeAggregateColumns can be configured to show aggregated values (sum, min, max, or average) in those data columns. The property expects a list of column name, calculation pairs, with semicolons between the pairs. For example, to show the sum of the W and L columns of the child rows in each parent row of the MLB table above: webTreeAggregateColumns: W,sum;L,sum With that configuration each Division row will show the sum of its teams W and L columns, and each League will show the sum of its divisions W and L columns. FILTER & SORT: In the thin client, all of the web grid filter and sort features are available, by clicking on the column header. There are a few differences to note. The column filter menu can be used to hide rows in the table. However, this does not affect the aggregate calculations (if any), since they are always performed on all rows in the table, visible or not. Also, a parent row will be shown if any of its children pass the filter test, even if the parent row itself does not pass the filter. For example, if the filter Team = Phillies is applied to the MLB table, only one row passes that filter but the table will display both of that row's ancestor rows, for a total of 3 rows: > National > East Phillies The column sort feature in the thin client applies the sort within each level. That is, the sort will reorder rows within a tree level but won't move rows between levels of the tree, and parent rows will still appear above the rows of their children. Limitations on webTreeGrid mode: - The webTreeGridMode behavior only works in thin client, and only in desktop browsers that support the web (HTML5) grid. In all other cases the table will not display a tree column. - The webTreeGridMode does not support server-side paging, filtering & sorting. This means that webTreeGridMode mode does not perform well on large data tables, because the entire data table must be downloaded to the browser. For best results it should only be applied to data tables with 1000 rows or fewer. The intended use is to display the contents of an indexed cache table, with fewer than 1000 rows. - The export to html/excel/pdf feature does not recognize webTreeGridMode and instead exports the entire table. Advanced use: If the data table attached to valueTable already contains rows for the parent levels of the tree, with columns named exactly "Node ID" and "Parent ID" that uniquely identify each row and its parent row, then the table won't be converted as described above. In this case the column to be used as the tree column should be identified by the webTreeLabelColumn property.
Version 6.8.0 Release Notes
Builder - Property Dialogs
21074: Substitutions listbox in Builder no longer throws ArrayIndexOutOfBoundsException
In prior releases, the Builder would sometimes throw an ArrayIndexOutOfBoundsException while updating the list of substitutions shown in the property sheet. This is fixed.
Customization
18831: Implement a platform-agnostic font solution for display server
A file named rtvfonts.jar is now included with RTView. This jar file is intended to provide consistent text size on displays that are configured on Windows but are deployed in the thin client via the display server running on Linux. On some Linux installations, there can be significant sizing and spacing differences between the Windows and Linux versions of the "generic" font types (serif, sans-serif, monospaced). This jar contains open source fonts which can be used instead, for font indexes 1 - 12. Each of the open source fonts was designed to be equivalent in sizing and spacing to the corresponding Windows font. The rtvfonts.jar should be used in the following situation: 1) RTView displays were created on Windows, but are deployed in the thin client from a display server running on Linux. 2) In the thin client, there are visible problems with text alignment and sizing that are not seen when the same display is open in the builder/viewer on Windows. If this situation occurs, then the display server should be configured as follows: 1) Add rtvfonts.jar to the display server's classpath, for example: > set RTV_USERPATH=$RTV_HOME/lib/rtvfonts.jar 2) Add rtv_fonts.xml as a global file (rtv_fonts.xml is contained in rtvfonts.jar). For example, add this line to the display server's OPTIONS.ini file: global rtv_fonts.xml The open source fonts contained in rtvfonts.jar are: Arimo (sans-serif, equivalent to Arial) Cousine (monospace, equivalent to Courier) Tinos (serif, equivalent to Times New Roman) Each font is provided in regular (plain), bold, italic, and bold italic in .ttf format (for the display server) and .woff format(for the thin client) for a total of 24 font files. The .ttf files for each font were downloaded from https://www.google.com/fonts. Each is licensed by the Apache 2 license. The font files in this jar contain only the Latin character set, to reduce their size. This means that CJK (Asian) characters will appear as boxes in text strings that are rendered by the display server (e.g. a label object with webLabelFlag = false). In text strings rendered by the browser, the expected characters will appear in a fallback font, so the style and size may not match the Latin characters in the font.
Data Historian
21455: New mechanism to 'throttle' historian deletions.
A command line argument has been provided to enable throttling of historian deletions by separating large deletions into smaller groupings. This option will help in scenarios where users see the following errors in the log: SQLException: The transaction log for database <DB Name> is full. ERROR: java.sql.SQLException: The transaction log for database <DB Name> is full. retention doing delete in SQL: [delete from <DB Table Name> where "timestamp" < 'YYYY-MM-DD HH:MM:SS'] failed. To enable multi-chunk retention start the historian with the -retentionChunkSize argument. Example of deleting in 2 day chunks: -retentionChunkSize:2d Example of deleting in 1 week chunks: -retentionChunkSize:1w This argument does not support time segments of multiple units, such as "1h 30m"
Data Sources
Cache Data Source
21428: Fix bug preventing removal of rows from current_condensed table
A bug in the cache data source has been fixed that prevented rows in current_condensed tables from being removed by the row expiration feature. (The current_condensed table exists on caches that have the row condense feature enabled. It has one row for the most recent condense result computed for each unique index value). The properties that remove rows from the current table are rowExpirationMode, rowsToDeleteTable, and maxNumberOfCurrentRows.
JMX Data Source
21151: Provide mechanism to connect to secure Tomcat instances via JMX
A mechanism has been added to connect to secure Tomcat instances via JMX. A secure connection requires the use of the following two parameters: javax.net.ssl.trustStore javax.net.ssl.trustStorePassword Please see the User's Guide for more information.
21421: Unexpected JMX Mbean objects no longer cause exception
Unexpected JMX object types could cause a NullPointerException. This has been fixed.
Splunk
21313: SSL Protocol field added to Splunk Connection
The Splunk data adapter has been enhanced to allow explicit management of the SSL Protocol used when communicating to the Splunk server. A new field "SSL Protocol" has been added to the Add Splunk Connection dialog. This allows you to explicitly select the SSL Protocol used when communicating to the Splunk server, by means of a drop down. The SSL protocols available are SSLv3, TLSv1, TLSv1.1 (TLSv1_1) and TLSv1.2 (TLSv1_2). TLSv1 is selected by default as "TLSv1 is available by default in every modern version of Java" SSL protocols are configured on the Splunk server using the "sslVersions" property as described in http://docs.splunk.com/Documentation/Splunk/latest/Security/SetyourSSLversion The client (Splunk data adapter) connection will, obviously, have to use a compatible SSL protocol connect. Use of explicit SLL protocol requires use of com.splunk.SSLSecurityProtocol found in the Splunk Java SDK jar (splunk-sdk-java-1.5.0.jar). A modified version of this .jar is provided with RTView. It has been modified to remove dependency on the existence of a ".splunkrc" file in the users home directory, which a client system may not have. Protocol Limitations ----------------------------- Different versions of Java have added and removed support for different SSL protocols, so users will need to choose an SSL protocol that is supported by your Java runtime. TLSv1 is used as default by RTView as "TLSv1 is available by default in every modern version of Java" SSLv3 is provided for backwards compatibility, but its use is discouraged due to the "POODLE" vulnerability as described here: http://www.splunk.com/view/SP-CAAANKE SSLv3 is disabled in recent versions of Java (1.7 + 1.8+) for this reason, and will fail with an error message of the form "java.lang.RuntimeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)" TLSv1.1 and TLSv1.2 are not available in Java 1.6 and will fail with an error message of the form java.lang.IllegalArgumentException: TLSv1.1 or java.lang.IllegalArgumentException: TLSv1.2
TIBCO Hawk Data Source
21273: RTView now attempts to re-subscribe to failed subscriptions
A bug was introduce in version 6.0.2 that caused RTView not to attempt to re-subscribe to failed subscriptions. This has been fixed.
21299: Improved hawk error handling
The TIBCO Hawk data source error handling has been enhanced as follows: 1. Improved logging for onErrorExceptionEvent and onWarningExceptionEvent. These events occur when there is a problem with one of the connected TIBCO Hawk Transports. Also, RTView will now try reconnecting to the transport if an onErrorExceptionEvent occurs. 2. Improved logging for subscription error events. Also, RTView will cancel all subscriptions for a MicroAgent if an onTermination event occurs and attempt to recreate them.
21392: New reconnect option added to Hawk DS
The TIBCO Hawk data source has been enhanced to attempt to reconnect when the initial connection to a transport fails. By default, it will attempt to reconnect once a minute for 60 attempts. You can set the max number of reconnect attempts by command line or property. command line: -hawkmaxreconnect:3 property: sl.rtview.hawk.hawkmaxreconnect=3 Every time a reconnect is attempted, you will see this in the console: 016-03-07 13:00:50.282 re-attempt connection to transport <test_ems>: 1 of 60 016-03-07 13:00:52.911 re-attempt connection to transport <test_ems>: succeeded/failed To disable reconnection attempts, set the max reconnect to 0.
21393: New connection table added to Hawk DS
The TIBCO Hawk Data Source has been enhanced with a new method, getConnectionTable, in the RTViewDs microagent. This table shows one row for each defined connection with the following columns: - Name - the connection name - Connected - true if we are connected, false otherwise This table updates with all rows regardless of the Disable Data Caching setting.
21437: Corrected slow Hawk Agent discovery by Hawk Datasource
A change was introduced in RTView 6.4 that caused the Hawk Agent discovery to slow down in cases where the Hawk Agents were slow in servicing requests for MicroAgent Descriptors. This has been fixed.
Demos
Energy Management Demo
20890: Corrected mismatch in column names in the data attachment
Some column names in the eSphere demo were not corrected when the database was changed to use HSQLDB. This has been corrected.
Display Server
21435: Mouse wheel scrolling for tables when using Firefox 42 or newer
In prior releases, the thin client did not support scrolling of table objects using the mouse wheel, if webGridFlag = false, in Firefox version 42 or newer. This is fixed.
21436: Fixed crash with -clearsubs:true command line option
A bug has been fixed which caused the display server to throw a StackOverflowError at startup if the command-line option "-clearsubs:true" was specified. This bug was introduced in RTView 6.4. (Note: The default value of the clearsubs option is true, so there is no need to specify -clearsubs:true).
Functions
21262: Dataserver no longer turns inactive (zombie process) after an "Unlock Error"
A problem in the function data source has been fixed that could cause an IllegalMonitorStateException to be thrown while updating a function.
General
18198: New option to change default fonts or use additional fonts
The Extended Font feature, new in this release, allows users to extend the list of fonts available on RTView displays beyond the 12 standard fonts. Extended fonts can be used in the Builder/Viewer, or in the thin client, or in both deployments. The configuration and use of this feature requires a basic understanding of font technology and terms, described below. Two example configurations are provided in the RTV_HOME/custom/fonts directory BACKGROUND The following terms apply to font usage in RTView. - System fonts: System or platform fonts are provided by the local operating system. A web browser can make use of the system fonts from the local (client) machine. The system fonts vary between different operating systems, and between versions of the same operating system. This presents a challenge to web developers, since a font available to a browser on one system (e.g. Tahoma on Windows) may not be available to a browser running on other systems, although similar fonts (e.g. Helvetica on Mac OS) may be available. The solution is to (a) use only web-safe fonts, (b) use font families or font stacks, or (c) use web (downloaded) fonts. These are described below. - Web-safe fonts: The serif, sans-serif, and monospace fonts are known as "web-safe" or standard fonts because they are available in all browsers on all platforms. They are also available in Java on all platforms. - Font-family: A font-family is a comma separated list of font names, used in the CSS style applied to text elements on a web page. The browser will attempt to use the fonts in the order they are listed until it finds one that is available. This browser also applies this process on a per-character basis if the text element contains a character not defined in the specified font. The last font in the list should be a web-safe font. This technique is also known as a "font stack" or "fallback fonts". For example: font-family: Helvetica, Lucida Sans, Arial, sans-serif - Web fonts: A web page can identify a specific font to be downloaded from a web server, rather than using a stack of system fonts. A specific font downloaded from the web server is known as a "web font". - Font files: A file that defines a font. A common format is TrueType (.ttf). In a java application, additional fonts can be used by providing TrueType font (.ttf) files. On a web page, web fonts can be downloaded as ttf files. Other formats (.woff, .woff2) are also supported for web fonts. Font files are licensed. Many system fonts are licensed by the OS vendor (e.g. Microsoft). A large number of fonts are available under open source licenses (Apache 2.0, SIL). The Web Font example in the custom/fonts directory uses several open source fonts published on http://www.google.com/fonts. FONTS IN RTVIEW By default RTView uses only the web-safe font types: serif, sans-serif, and monospace. For each web-safe font type RTView provides a plain, bold, italic, and bold-italic style, for a total of 12 font choices. Each is assigned an index, as follows: 1: sans-serif, plain 2: monospace, bold 3: monospace, plain 4: serif, plain 5: monospace, italic 6: serif, bold 7: sans-serif, bold 8: sans-serif, italic 9: serif, bold italic 10: serif, italic 11: sans-serif, bold italic 12: monospace, bold italic The font indexes are used when configuring a font property (e.g. labelTextFont) on an object in the RTView display Builder. The Extended Font feature allows users to extend the list of fonts available on RTView displays, beyond the 12 standard fonts. Extended fonts can be used in the builder/viewer, or in the thin client, or in both deployments. For use in Java (builder/viewer, display server) an extended font must be available from a local .ttf or .otf file. In the thin client, either the font-family (stack) or the web font (downloaded) technique can be used. The font stack technique provides better performance and requires no additional font files or licensing since it uses system fonts already available on the local system. However, since different physical fonts are used, a text element that uses a font stack may have a different appearance and size when viewed in a browser on (say) Windows, vs iOS, vs Android. The web font technique provides a consistent appearance and size in all browsers regardless of the local platform, but requires additional time to download the web fonts the first time the page is opened. Fonts that contain non-latin characters (Cyrillic, Arabic, and especially CJK) can be large. Also, web fonts should be properly licensed. For use in a browser as a web font, the font must be downloadable as a .ttf, .woff, .woff2, or .otf file. Internet Explorer will complain if a .ttf file is not embeddable (most Microsoft-provided .ttf files are not embeddable). EXTENDED FONTS CONFIGURATION AND USE The extended fonts are specified in a table created by the user, with one row per font. The table has these columns: - Index (int): the font's index, an integer value between 13 and 255 (see Note 1 below) - Name (string): the name of the font as it should appear in the Builder property sheet and font selection list - Bold (Boolean): if true, a bold style font is created - Italic (Boolean): if true, an italic font style is created - CSS Font Family (string): for use by the RTView thin client (see Note 2) - URL (string): for the thin client, when using web fonts (see Note 3) - TTF Path (string): a local path to the fonts .ttf file, for use by RTView builder/viewer and display server (see Note 4) The required columns are Index, Name, Bold, and Italic. The other columns are optional depending on the deployment(s) of interest, and the type of fonts used. *** The extended font table must be made available to RTView by creating a global function named RtvExtFontTable. *** The RtvExtFontTable function must return a table that contains the required column names and types listed above. Typically, the RtvExtFontTable function would be a global Reference function with its Table argument attached to a static XML or SQL table. - Note 1: The examples in the custom/fonts directory use index values of 100 and above, as a convention. Index values of 1 - 12 can also be specified, but that will override the default RTView font assignments and is not recommended. - Note 2: The CSS Font Family string is used by the thin client to assign the CSS font style to a client-side object that uses the corresponding font. If the thin client should use a system font, then the string should specify the font family or "font stack" to be used, as a comma-separated list of fallback font names, ending with a web-safe font. For example: Trebuchet MS, Helvetica, sans-serif If instead the thin client should download a web font, then the string in the CSS Font Family column can contain a single name, for example: Roboto - Note 3: The URL column can be omitted or left blank if the thin client should use a system font. If the thin client should download a web font then the value in this column should specify the URL for the thin client to use to download the font file. For example: fonts/Roboto-Regular.ttf The above example assumes that the user has created a subdirectory named "fonts" beneath the rtvdisplay servlet's webapp directory, and it contains the indicated ttf file. The URL can also specify an address on a different web server (e.g. http://somewhere.com/fonts/xyz.woff), provided that server supports CORS (cross-domain) requests. Internet Explorer will complain if a .ttf file is not embeddable (most Microsoft-provided .ttf files are not embeddable). CHARACTER SETS The web-safe fonts support all Unicode characters. Other fonts may not. (In particular, open source fonts may not support CJK characters). If a text string contains a character that is not found in the specified font, the effect is as follows: In a browser, if a text element contains a character that is not found in the specified font, the browser will try the fonts listed in the font-family, and finally its default web-safe font, until it finds a font that supports the character. This means the thin client always displays all of the characters in a text string, but when using an extended font non-Latin characters may be displayed using a fallback or system font. In a Java application, if a text string contains a character that is not defined in the specified font, the character may appear as a "tofu" character (a box or a ?) or it may not be drawn. This means that the builder/viewer will display tofu or empty characters for non-Latin characters that are not found in an extended font. This is also the case for the thin client, for text objects that are rendered in the display server and not in the browser. The google Noto Sans CJK fonts are in .OTF format with Postscript Type 1 glyphs (.OTF w/PS Type1) which is not recognized by Java. EXAMPLES Two example configurations are provided in the RTV_HOME/custom/fonts directory. See the README.txt file in that directory for more information. The beginning of the README file contains the same sections that appear above in this note, but see the EXAMPLES section in the README for a description of each example.
21177: Update-able single value properties now update when the property is removed
In previous releases, the following update-able properties did not reset to the default value if they were removed. This has been fixed. sl.rtview.customWindowTitle sl.rtvapm.mx.mxtrace sl.rtvapm.km.kmtrace sl.rtview.sql.sqltime sl.rtview.jmx.jmx_metrics_period sl.rtview.alert.notifiertimetrace sl.rtview.alert.notifierdebug sl.rtview.hawk.hawkdstraceagentstatus
21301: New stop_hsqldb script
New "stop_hsqldb" scripts for cleanly shutting down an HSQLDB instance are now available. The stop_hsqldb script requires a server.rc file in the directory you run it from that is a counterpart to your server.properties file. Example server.properties: server.port=9099 server.database.0=file:../../DATA/alertdefs server.dbname.0=alertdefs server.database.1=file:../../DATA/rtvhistory server.dbname.1=rtvhistory Example corresponding server.rc: urlid alertdefs url jdbc:hsqldb:hsql://localhost:9099/alertdefs username SA password urlid rtvhistory url jdbc:hsqldb:hsql://localhost:9099/rtvhistory username SA password All demos with HSQLDB instances have been updated to include a server.rc file.
21302: Support for enabling/disabling individual db properties
The properties database has been enhanced to support a new column, PROP_ENABLED. This column is used to enable/disable the use of the property. This allows you to temporarily disable the use of a database property without having to remove it from the database. If your application reads properties from a database and you are using the properties database from a previous release, run the following alter table command on your database table to add the new column: ALTER TABLE PROP_TABLE ADD PROP_ENABLED INTEGER DEFAULT 1
Logging
19451: Viewer and builder now print copyright to log4j output
Previously the Display Viewer and Builder did not show the copyright banner in log files created using Log4j. This has been corrected.
Platform Support
21076: Windows 10 and Edge Browser support
Windows 10 and the Edge Browser are now supported by RTView products.
RTView Display Panel
21508: Support subtitutions in display value in panel config
The rtvDisplayPanel tag in a PANELS.ini file now supports using an application level substitution or login substitution for the display value as long as the substitution name starts with a $. For example: <?xml version="1.0" ?> <panels xmlns="www.sl.com" version="1.0"> <rtvLayout title="Example"> <rtvDisplayPanel region="north" name="title" display="$my_title"/> <rtvDisplayPanel region="center" name="main" display="$my_main"/> </rtvLayout> </panels>
TIBCO EMS Manager
21275: EMS Manager retired
The TIBCO EMS Manager application is no longer supported and has been removed from RTView Core. It has been replaced by the RTView TIBCO EMS Monitor application. TIBCO EMS Manager users should contact SL about moving over to RTView TIBCO EMS Monitor.
Transaction Message Monitor
21514: Transaction monitor end-of-life delayed
In RTView 6.5, the Transaction Monitor was updated with a warning regarding the end of life of that product. The retirement of the Transaction Monitor has been postponed and the warning has been removed.
Viewer - Applet
21366: Applet support dropped
Due to dropped support for applet technology from browsers and Oracle, RTView has discontinued support of deploying using java applets. All applet demo examples have been removed from the product
Version 6.7.0 Release Notes
18875: Support added for property groups for database properties
The properties database has been enhanced to support a new column, PROP_GROUP. This column is used as an additional optional index when the database properties are processed. Specify the property group for an application using the -propgroup:xx command line option (where xx corresponds to a value in the PROP_GROUP column of your database). If no -propgroup command line option is used, it will query for rows where PROP_GROUP is an empty string. Properties queried from the database are ordered as follows: 1. Order by PROP_GROUP according to the order of the -propgroup command line options. 2. Within each PROP_GROUP, order by PROP_FILE according to the order of the -properties command line options. 3. Within each PROP_FILE, order by PROP_FILTER according to the order of the -propfilter command line options. Note that rows with blank PROP_FILTER that match the PROP_GROUP and PROP_FILE filters are always included. If your application reads properties from a database and you are using the properties database from a previous release, run the following alter table command on your database table to add the new column: ALTER TABLE PROP_TABLE ADD PROP_GROUP VARCHAR DEFAULT ''
21152: Additional destination (topics/queues) metrics included from EMS Server
The following columns have been added to the EMS Topics cache: prefetch expiryOverride store The following columns have been added to the EMS queues cache: prefetch expiryOverride store deliveredMessageCount
Alerts
18023: Alert ds no longer crashes if if indexTypes syntax is incorrect
In previous releases, the alert data source threw a NullPointerException if there was a syntax error in the indexTypes property. This has been fixed.
19820: Alert notifications no longer fail if invalid global file is specified in properties
In previous releases, if an invalid global file was specified in your properties file, alert notifications failed to execute. This has been fixed.
Builder - Editing
20933: Object selection in builder no longer broken after closing edit dialogs
In the previous release, the Builder would occasionally exhibit problems with object selection and keyboard focus after the user closed an editing dialog opened from the property sheet. These problems are fixed.
21221: Tab Control object no longer crashes the Builder if valueTable cannot be resolved
A bug in the tab control object (obj_c1tabs) has been fixed that caused the Builder to throw a NullPointerException, or to perform an unexpected drilldown, if a tab control's actionCommand was configured to perform a drilldown but the control's valueTable property was attached to a nonexistent data table.
Builder - Palette Handling
21046: Graph palette no longer sometimes shows only one object per row
A problem has been fixed in the Builder which sometimes caused the Graphs tab of the Obejct Palette to display just one graph object per row, with extra spacing on all sides, rather than packing as many objects per row as can fit.
Data Server
20910: RTVquery no longer hangs when the target data server re-boots
In previous releases, the rtvquery servlet would occasionally fail to respond to queries after its target data server was restarted. This problem is fixed
20911: REST servlet enhanced for history queries
The URL applied to the rtvquery servlet now supports a parameter named "arr". If the value of the arr parameter is 1 then, if fmt = json or jsonp, the javascript array format will be used for data rows in the response. This is intended for use with fmt=jsonp, to reduce the response size. Also, server-side paging and sorting are now applied properly to queries on cache history tables. In prior releases, the sorting and paging was applied incorrectly which could give confusing results.
Data Sources
Cache Data Source
20895: Time range no longer ignored in cache history attachment if multi-column filter value = *
The following bug in the cache data source has been fixed: If an attachment to a cache history table specifies a time range, and also specifies a filter on multiple columns but the filter value for each of those columns is * then the time range is ignored and all rows from the history table are returned.
IBMMQ - IBM WebSphere MQ
20871: New Expiry field added to connection definition
A new field, Expiry, has been added to the definition of IBM MQ connections.
JMS Admin Data Source (for TIBCO EMS only)
20867: Improved performance of ConsumerDetails queries
The process of getting detail info on EMS Consumers has been optimized; customers who have previously found it necessary to disable collection of this data may find this is no longer necessary.
20967: ConsumerCount and ProducerCount added to the ServerInfo table
Two columns have been added to the jmsadm ServerInfo table: ProducerCount and ConsumerCount. These are the total counts before any filtering is applied.
20977: New destination filter for Consumers and Producers metric data attachments
The TIBCO EMS Data Adapter has been enhanced to include pattern filters in the collection of Producer and Consumer data. In the Attach To Data Dialog the Pattern field now becomes visible when the metric is Producers or Consumers (as for Topics and Queues). These patterns will be used via the Admin API to select the destinations for which Producer and Consumer data will be fetched when the data attachment is updated. This will make the operations faster and more efficient, by virtue of being more specific.
21146: Queries no longer made against inactive EMS servers configured with JSON
In version 8.1 of TIBCO EMS a change was made such that inactive EMS servers configured with JSON could no longer be queried via the admin interface. The TIBCO EMS data adapter has been enhanced to detect this condition and avoid making the queries.
Splunk
19866: Splunk data adapter no longer generates NullPointerException message.
In previous versions under certain circumstances, the Splunk data adapter would generate a NullPointerException message. This is no longer the case.
TIBCO Rendezvous Data Source
20975: Enhanced to work with rvtrace version 8.2.0+.
The TIBCO Rendezvous data source has been enhanced to work with rvtrace version 8.2.0+. In 8.2.0, TIBCO modified the rvtrace output to add the SCid and R columns to the Multicast Packet Statistics source rows and to add the SCid column to the Multicast Subject Staticstics source rows. The TIBCO Rendezvous data source has added the SCid and R columns to the RTViewDs.MulticastPacketsSource table and the SCid column to the RTViewDs.MulticastSubjectsSource table. The rvmonitor demo has been updated to show these new columns. Note that versions of rvtrace older than 8.2.0 are no longer supported in the TIBCO Rendezvous data source.
Demos
19855: Demo applets updated to use signed jars
The RTView Core demo applets provided in the demo Apache Tomcat server (servers\apache-tomcat-6.0.18-sl\webapps\ROOT) have been updated to use .jar files signed with SL's certificate. At this time, SL's certificate is valid until May 2018.
Display Server
20929: New logout properly in multi-panel layout
In the thin client, clicking the Log Off item in the context menu will navigate back to the login screen, after logging off the user.
21178: Copy Cell Value menu item supported in Chrome & Firefox
The thin client now supports the "Copy Cell Value" context menu item on the table object, in Chrome (version 43 or newer) and Firefox (version 41 or newer). This menu item allows the user to copy a table cell's text contents to the clipboard. Previously this menu item was only available in Internet Explorer.
Functions
20846: New function: Execute Java Method
Introduction The Execute Java Method function allows the user to write code for a Java method that will be executed when the function is updated. The method can take zero or more arguments of type String, Integer, Double, or GmsTabularData, and it can return an object of any of those same types. The Java code is saved with the display (.rtv) file that contains the function. On the first update, the function compiles the given java code. Then, on all updates, the function applies the given arguments to the compiled method and executes it. The Execute Java Method function is intended for implementing a 'one-of-a-kind' java method that is useful on a single RTView display, in cases where the Evaluate Expression functions are not adequate or perform poorly, and the reusability of a custom function implementation is not required or is inconvenient. Requirements - The Java Development Kit (JDK) must be installed on systems which will be used to configure or run the Execute Java Method function. The Java Runtime Kit (JRE) is not sufficient since it does not include the java compiler tools. - The person configuring the Execute Java Method function must be familiar with Java. - The person configuring the Execute Java Method function should be familiar with the com.sl.gmsjrt.GmsTabularData class, as described in the RTView customization document, if the function will deal with tabular data. - The Code argument of the function must be a valid code string for a Java method named eval with this signature: public Object eval() - The method can take zero or more arguments of type String, Integer, Double, or GmsTabularData. - The method's return type must be Object, and the returned Object must be a String, Integer, Double, or GmsTabularData instance. - The heap usage of the RTView application increases by about 6 to 10 MB to support the compiler. Recommended usage: The Execute Java Method function is a useful feature but it should be use when appropriate, to avoid maintenance and performance problems. - The Execute Java Method function is intended for implementing a 'one-of-a-kind' java method that is useful on a single RTView display, since its result can only be used on the same display (.rtv file) in which it is defined. If a method is needed on multiple RTView displays then it should be implemented in an RTView custom function handler class, instead. - The display containing the Execute Java Method function must only be deployed on systems with the JDK installed, otherwise the function's java code will not be compiled. Configuration: The internal name of the function is EVALJ. Its external name is "Execute Java Method". It appears just after "Evaluate Expression as String" in the dropdown list in the Builder's Edit Function dialog. The function takes one predefined string argument named Code, plus any number of user-defined arguments as described later. The Code string must be a java method named eval with this signature: public Object eval(args) For each new instance of the function, the Edit Function dialog will set the Code string to a "skeleton" implementation of the eval method as shown below: public Object eval() { return ""; } The eval method can take zero or more arguments of type String, Integer, Double, or GmsTabularData. The method's return type must be declared as Object, but it can return a String, Integer, Double, or GmsTabularData object. The arguments declared for the eval() method become arguments to the rtview function instance, just like the %x, %y tokens in an Evaluate Expression function. For example, here is a simple eval method that concatenates two String args named s1 and s2: public Object eval(String s1, String s2) { return s1 + ":" + s2; } In the Edit Function dialog, s1 and s2 will appear as argument fields so their values can be assigned to constants or attached to data: Here is a more complex example that takes a GmsTabularData argument. The input table is assumed to have an integer column named Value, and the function returns a copy of the input table with all rows removed where the Value column item is < 25 or > 75. The method makes use of utility methods named cloneInputTable and printErrorMessage, which are defined in the base class named com.sl.gmsjrtview.GmsJavaCodeExecutor: public Object eval(GmsTabularData t) { if (t == null) return t; int valCol = t.getColumnIndex("Value"); if (valCol < 0) { printErrorMessage("no Value column in table"); return t; } ArrayList<Integer> rowsToRemove = new ArrayList<Integer>(); for (int row = 0; row < t.getNumRows(); ++row) { int val = t.getIntCellValue(row, valCol); if (val < 25 || val > 75) { rowsToRemove.add(row); } } if (rowsToRemove.size() > 0) { // don't modify input table, clone it t = cloneInputTable(t); t.removeRows(rowsToRemove); } return t; } For documentation on the GmsTabularData and GmsJavaCodeExecutor classes, refer to the javadoc pages in the customization section of the RTView documentation. Compilation: The java code entered as the value of the Code argument for a function named F101 is used to generate the source code for a subclass of com.sl.gmsjrtview.GmsJavaCodeExecutor, as follows: package rtvfuncs; import com.sl.gmsjrt.GmsTabularData; import com.sl.gmsjrtview.*; import java.util.*; public class F101_Cnn extends com.sl.gmsjrtview.GmsJavaCodeExecutor { // begin user-defined code public Object eval() { return ""; } // end user-defined code } The suffix _Cnn on the generated class name is not significant and will vary. The source code for the class will be generated and compiled the first time the function is updated after the .rtv file is loaded. In the Builder, source code for the class will also be generated and compiled each time the user changes the code for the eval method and clicks OK or Apply. The compiler will use the same classpath as the RTView application. No external .java or .class files are produced for an Execute Java Method function. All source generation, compilation, and class loader operations are performed using memory buffers. The user-defined java code for the eval method is saved with the function in the .rtv file. As shown above, the generated source code imports com.sl.gmsjrtview.*, com.sl.gmsjrt.GmsTabularData, and java.util.*. If additional imports are needed they can be defined on lines above the eval() method in the Code argument, or globally with a property named sl.rtview.function.compiler_import. For example, these lines could be added to an rtview .properties file to import java.sql.* and java.math.* for all function instances: sl.rtview.function.compiler_import=java.sql.*; sl.rtview.function.compiler_import=java.math.*; Compiler errors are logged to the console. The complete generated source code, as described above, is shown before the compiler error so that the user can make sense of the line numbers in the error message. Examples: The following eval() implementation returns a table with 2 columns, "Name" and "Value", where the Name column contains "this is row N" and the Value column contains a random integer between 0 and 100. The number of rows in the table is determined by the numRows argument. The "trigger" argument could be attached to the result of a "Date Now" function, to trigger the function periodically. Otherwise it will only update once. public Object eval(int numRows, String trigger) { GmsTabularData t = new GmsTabularData(); t.addColumn("Name", GmsTabularData.STRING); t.addColumn("Value", GmsTabularData.INTEGER); for (int row = 0; row < numRows; ++ row) { String name = "this is row " + row; int val = (int) (Math.random() * 100); t.addRow(""); t.setCellValue(name, row, 0); t.setCellValue(val, row, 1); } return t; } This eval method takes a table as an argument. The input table is assumed to have an integer column named Value (e.g. the table returned from the previous example), and the function returns a copy of the input table with all rows removed where the Value column item is < 25 or > 75: public Object eval(GmsTabularData t) { if (t == null) return t; int valCol = t.getColumnIndex("Value"); if (valCol < 0) return t; ArrayList<Integer> rowsToRemove = new ArrayList<Integer>(); for (int row = 0; row < t.getNumRows(); ++row) { int val = t.getIntCellValue(row, valCol); if (val < 25 || val > 75) { rowsToRemove.add(row); } } if (rowsToRemove.size() > 0) { // don't modify input table, clone it t = cloneInputTable(t); t.removeRows(rowsToRemove); } return t; } This eval method implements a simple counter function. It declares an integer member variable named "count" and increments it on each update and returns the new count. The "trigger" argument could be attached to the result of a "Date Now" function, to trigger the function periodically. Otherwise it will only update once. private int count = 0; public Object eval(String trigger) { return ++count; } This eval method implements a counter function, similar to the previous example, but it demonstrates the use of the skipUpdate() method to prevent updating the function result in certain cases: private int count = 0; public Object eval(String trigger) { ++count; if (count % 5 == 0) { // don't update result for multiples of 5 System.out.println("skip counter update: " + count); skipUpdate(); } return count; } This eval method takes a table as an argument. The input table is assumed to have an string column named Status (e.g. production_table in update.xml produced by the RTView xml data simulator). The function returns a copy of the input table with the string in the Status column truncated to the length specified by the second argument, numCharsForStatusCol: public Object eval(GmsTabularData prodTable, int numCharsForStatusCol) { if (prodTable == null || prodTable.getNumRows() < 1) return prodTable; prodTable = cloneInputTable(prodTable); int statusCol = prodTable.getColumnIndex("Status"); if (statusCol < 0) { printErrorMessage("no Status column"); return prodTable; } for (int row = 0; row < prodTable.getNumRows(); ++row) { String sts = prodTable.getCellValue(row, statusCol); if (sts != null && sts.length() > numCharsForStatusCol) { sts = sts.substring(0, numCharsForStatusCol); prodTable.setCellValue(sts, row, statusCol); } } return prodTable; }
General
20179: Support custom schedules for SQL queries
BACKGROUND: A new Update Mode named "Run Query On Schedule" is now available in the Attach to SQL Data dialog. When that mode is selected, a dropdown list labelled "Schedule Name" appears, allowing the user to select the name of a schedule. This new mode is intended to give users more control over when specific queries are run. A schedule is defined by one or more rules. A rule specifies the days of the week, hours of the day, and frequency during those hours that a query should be run. A rule can also specify days of the week or specific dates on which a query should not be run. SCHEDULE AND RULE TABLE FORMATS: The query schedules are defined in a table with these columns: # Name : the unique name for the schedule # Rules : the name(s) of the rules (see below) that define the schedule, separated by commas # Enabled : set Enabled = false to disable all queries that use the schedule # Description : a description of the schedule Schedule names should contain only letters, digits, space, underscore and dash. They should not contain newlines, or tabs, or punctuation characters such as colon, semicolon, or comma. The $ character should also not be used in a schedule name to avoid conflicts with substitutions. Each schedule is defined by one or more rules. The rules are defined in a table with these columns: # Name: the unique name for the rule # Days: a list of days of the week (e.g Mon, Wed, Fri) or specific dates (dd-MMM-yyyy) that this rule is in effect. # Start Time: the time of day that this rule goes into effect, in 24 hour HH::mm:ss format. If empty, 00:00:00 is used. # End Time: the time of day that this rule is no longer effect, in 24 hour HH:mm:ss format. If empty, 23:59:59 is used. # Exception: If false, then when this rule is in effect the query is run at the indicated interval. If true, then when this rule is in effect the query is NOT run. # Interval: the time interval between queries when this rule is in effect (e.g. 1m, 30m, 1h, etc). # Enabled : if false the rule is never in effect. # Time Zone: the name of the time zone for the rule (e.g. US/Central). A blank string indicates the local time zone. Rule names should follow the same restrictions as schedule names, described earlier. All of the column types in the rule and schedule tables are strings, except for the Enabled and Exception columns, which are boolean. EXAMPLES: Here is a Rule Table with a few Rule examples: Name Exception Days Start Time End Time Interval Time Zone Enabled Description workdays_30m false Mon,Tue,Wed,Thu,Fri 09:00:00 17:00:00 30m true weekdays 9 - 5 every 30 min weekends_9_12_15 false Sat,Sun 09:00:00 17:00:00 3h true weekends at 9am, noon, 3pm lunch_hour_ex true Mon,Tue,Wed,Thu,Fri 12:00:00 12:59:59 true no queries during lunch holidays_2016_ex true 1-Jan-2016,4-Jul-2016,25-Dec-2016 true no queries during holidays workdays30m_central false Mon,Tue,Wed,Thu,Fri 09:00:00 17:00:00 30m US/Central true weekdays 9 - 5 every 30 min in US/Central timezone The "workdays_30m" rule will run a query every 30 minutes between 9 am and 5 pm, Mon - Fri. The "weekends_9_12_15" rule will run a query on weekends at 9am, noon, and 3pm. The "lunch_hour_ex" rule is an exception rule and prevents a query from being run between 12:00 and 12:59 on weekdays. The "holidays_2016_ex" rule is an exception rule and prevents a query from being run on 3 specific dates in 2016. (Note that this rule does not specify a Start Time or End Time, so it is in effect for the entire day). The "workdays30m_central" rule is the same as the "workdays_30m" rule, except that it uses the US/Central timezone when checking the time of day against the Start/End Time. Here is a Schedule Table using some of the above rules: Name Rules Enabled Description Weekday30 9to5 workdays_30m, lunch_hour_ex, holidays_ex true weekdays @30 minutes from 9 - 5, except lunchtime & holidays AllWeek workdays_30m, weekends_9_12_15 true weekdays @30 minutes from 9 - 5, weekends @ 9 & noon & 3pm test_timezone workdays30m_central true weekdays 9 - 5, in central timezone CREATING SCHEDULES AND RULES: RTView does not provide any predefined rules or schedules nor does it provide a UI for creating rules and schedules. Instead, the user can create a rule table and schedule table in a database, an XML file, or any other table that can be retrieved using an RTView data source. The tables must contain the columns specified above. The user must make the schedule table available to RTView by creating a global function named RtvScheduleTable, using Function Type = Reference, and attaching the function's Table argument to the XML file, or SQL query, or other rtview data attachment that retrieves the schedule table. The attachment can specify a remote Data Server if necessary. Similarly, the user makes the schedule available to RTView by creating a global function named RtvScheduleRuleTable, using Function Type = Reference, and attaching the function's Table argument to the rtview data attachment that retrieves the rule table. If schedules and rules are added or modified at runtime, then the next update of the data attachment used as the input to the RtvScheduleTable and RtvScheduleRuleTable will apply those changes to all SQL queries using those schedules and rules. SCHEDULE SELECTION: Typically, when configuring a scheduled query in the Attach to SQL Data dialog, the user selects the name of a schedule from the Schedule Name dropdown list. But there are two other possibilities: (1) The user can enter a substitution string, e.g. $mySchedule or (2) the user can enter a list of rule names separated by commas, e.g. rule1,rule2,rule3. The 2nd option creates an "anonymous schedule" and is useful in the case where no schedule is defined with the desired set of rules. DIAGNOSTICS: Two columns named Schedule and Next Query Time have been added to the RTViewDS.Keys meta-table of the SQL data source. For each SQL query in the table, the Schedule column shows the name of the Schedule, if any, configured for the query. The Next Query Time shows the next time the query will be run according to its schedule or, if the query doesn't have a schedule, the next time it will be run according to its configured query interval. For Static and On Demand queries, the Next Query Time will show 1/1/1970 GMT. If the -sqltime option is specified, the console log will contain an additional message for scheduled queries, indicating the next time the query will be run: query for <schedule name>,<rule name> next due at <time>: <query string or query ID> For example: query for Weekday30 9to5,workdays_30m next due at 2015-Oct-05 16:30:00: select * from "plants" The SQL data source checks for scheduled queries that should be run on each update cycle. The default update cycle is 2 seconds. This means that a query will typically be run within a second or two of its scheduled time. For example, if the Next Query Time for a query is 16:30:00 the query may actually run between 16:30:00 and 16:30:02. OPTIONS: The accepted formats for days of the week, specific dates, and time zones in the Rule table will be printed to the console if the option -scheduler.dumpFormats:true is specified on the command line. For time zone, names that don't specify daylight savings, such as "US/Eastern", should be used. To add additional formats for specifying dates in rules, use the property sl.rtview.scheduler.dateFormat, for example: sl.rtview.scheduler.dateFormat=MMM dd, yyyy
20815: Fixed array index exception thrown when client receives bad table delta
A bug has been fixed that in certain conditions caused an ArrayIndexOutOfBoundsException to be thrown by a client when it received an update from a data server. This was most likely to occur if the update was for the current table of a cache which recently had multiple rows removed via its rowsToDeleteTable property.
Layouts
20966: New option to hide draggable divider on panel in thin client
In an RTView panels file with resizable dividers enabled, a panel can be configured to hide its divider in the thin client by setting nodivider="true". For example, in this panels file the divider that would normally appear below the north panel is hidden: <?xml version="1.0" ?> <panels xmlns="www.sl.com" version="1.0"> <rtvLayout title="My Panels" dividers="true"> <rtvDisplayPanel region="north" display="title.rtv" nodivider="true"/> <rtvAccordionPanel region="west" width="200" height="544" navdata="navtree.xml"/> <rtvDisplayPanel region="center" name="main" display="test1"/> </rtvLayout> </panels> The nodivider attribute is only supported in the thin client, it is ignored by the viewer. It is also ignored on the center panel.
Licensing
20926: Generic PIN no longer returned on Red Hat Linux 7
The license registration process will now correctly obtain a non-generic PIN from Redhat Linux 7 servers.
Object Library
20828: New bgClipTextFlag property added to obj_rect* label objects
The following objects support a new property named bgClipTextFlag: obj_rect_il obj_rect_ilv obj_rect_ilvs obj_rect_ilvx_da3 obj_rect_ilvx_ra4 obj_ind_discrete If the object's bgClipTextFlag is checked and its bgVisFlag is checked then its label and/or its valueString (whichever string is drawn within the background rectangle) will be clipped by the object's background rectangle. That is, the object's label will be clipped by the background rectangle if labelTextPosX is Inside Left, Center, or Inside Right AND labelTextPosY is Inside Top, Center, or Inside Bottom . The object's value or valueString (if any) will be clipped by the background rectangle if valueTextPosX is Inside Left, Center, or Inside Right AND valueTextPosY is Inside Top, Center, or Inside Bottom. In the Builder, the bgClipTextFlag property appears in the Background category on the property sheet. By default, bgClipTextFlag is unchecked. The property is not visible if bgVisFlag is unchecked. Only the visible text can be copied to the clipboard, in the thin client.
21219: bgClipTextFlag property now hidden for unsupported background styles
In the Builder the bgClipTextFlag property is hidden for the indicator objects obj_ind_multi, obj_ind_limits, and obj_ind_discrete if the bgStyle is set to Circle or Diamond, since the flag is only supported for rectangular background styles. In prior releases the bgClipTextFlag property was always visible but did not work in those 2 cases.
Bar Charts
21006: New property rowSeriesTraceMode added to the bargraph object.
A property named rowSeriesTraceMode has been added to the bargraph object. This allows row-series behavior to be enabled or disabled on the traces independently of the row-series setting for the bars. The default value of rowSeriesTraceMode is "Use rowSeriesFlag". With this value, the row-series behavior is enabled or disabled on the bars and the traces by the rowSeriesFlag property, as in previous releases. To enable row-series behavior on the bars but not the traces, check the rowSeriesFlag property and set traceRowSeriesMode = Off. To enable row-series behavior on the traces but not the bars, uncheck the rowSeriesFlag property and set traceRowSeriesMode = On.
Composite Object
20985: Fixes to objects with webLabelFlag enabled
Two problems involving the webLabelFlag property have been fixed. 1. If a composite object has a command or drilldown defined, and the subdisplay within the composite contains an label object with webLabelFlag = 1, then a click on that label object does not trigger the composite's command or drilldown. 2. Link lines drawn between objects with webLabelFlag = 1 may be mispositioned. Both problems are fixed.
Control Objects
20877: New property selectedValueColumnName to enhanced tree node selection
A property named selectedValueColumnName has been added to the tree/accordion controls. The property can be used to specify the name of the column in the valueTable to which the selectedValue should be compared, for selecting a node in the tree/accordion. This can be useful in cases where the value from one column (specified by valueColumnName) in the valueTable should be used to set the $value substitution when a tree node is clicked by the user, but a value in a different column (specified by selectedValueColumnName) should be used to highlight a tree node via the selectedValue property, If the selectedValueColumnName property is not set, then the existing valueColumnName property value will be used instead as in prior versions when highlighting the tree node that matches selectedValue.
20921: Tree/accordion L&F enhancements
Several properties have been added to the tree (obj_c1tree) and accordion (obj_c1accordion) controls. In all cases, the default value of the new property matches the default behavior of the control in previous releases. bgBorderFlag : This property appears in the Background category in the Builder's property sheet, for the tree and the accordion. If bgBorderFlag is checked then a 1 pixel dark border is drawn around the control, otherwise no border is drawn. By default the flag is checked and the border is visible, as it was in all prior releases. [Note that the border color and width are not configurable, only the visibility]. accordionCollapseFlag : This property appears in the Interaction category in the Builder's property sheet, for the accordion only. If accordionCollapseFlag is checked, only one branch of the accordion is open at a time. If the user clicks a node to open another branch, then the previously open branch is automatically closed. If accordionCollapseFlag is unchecked, opening another branch has no affect on other open branches. By default the flag is checked, to match the behavior in all previous releases. nodeClosedImage/nodeOpenImage : These two properties appear in the Node category in the Builder's property sheet, for the tree only. Use these properties to specify the names of the images to be shown to the left of a closed/open parent (non-leaf) tree node, respectively. By default these properties are blank, indicating that the default closed/open images should be used, as in all previous releases. nodeSelectColor/nodeSelectTextColor : These two properties appear in the Node category in the Builder's property sheet, for the tree only. Use these properties to set the background and text colors for the selected tree node. If set to "Default", then the platform or browser default selection colors are used. In addition, two thin client problems have been fixed: (1) A problem specific to IE9 has been fixed in which a drilldown triggered from an accordion control would sometimes fail and leave the target panel in the "Loading..." state. (2) A problem that caused the navigation panel containing a tree/accordion control or occasionally other panels to have the incorrect initial size has been fixed.
20922: Padding and hovering enhancements for the tab control
Several properties have been added to the tab control(obj_c1tabs). In all cases, the default value of the new property matches the default behavior of the control in previous releases. 1. paddingVertical : Extra padding, in pixels, to add above and below the label of each tab. This can be used to make the tabs taller without increasing the font size. 2. paddingHorizontal : Extra padding, in pixels, to add to the left and right of the label of each tab. This can be used to make the tabs wider, without increasing the font size. The default value is zero. 3. webHoverTabColor: The background color for an unselected tab when the cursor is over it. The default value is the same as the normal tab background color. This property only affects the thin client, it is ignored in the builder/viewer. 4. webHoverTextColor: The text color for an unselected tab when the cursor is over it. The default value is the same as the normal tab text color. This property only affects the thin client, it is ignored in the builder/viewer.
20965: New properties to set selected tab bg and text color
The tab control (obj_c1tabs) supports new properties named selectBgColor and selectTextColor to set the background and text color of the selected tab. The default value for both is Default, meaning that the background color of the selected tab will be a brighter shade of the unselected tabs in the thin client, and a darker shade in the viewer, and the text color of the selected tab is the same as the unselected tabs.
Tables
20996: Enable copy to clipboard on multiselect Kendo grid
The text in selected row or rows of the web (kendo) grid can now be copied to the clipboard by pressing Ctrl+c when the grid has keyboard focus. Only text cells are copied. If a cell contains an image, its value is not copied to the clipboard. The grid must have keyboard focus for the Ctrl+c keystroke to have effect.
Trend Charts
20625: Text properties handling in html5 chart improved
The following problems have been fixed in the thin client for trend chart objects with webChartFlag enabled: 1). For obj_trendgraph02, the labelTextColor property now sets the color of the axes labels and lines, as expected. Previously in the thin client the axes lines and labels were always black. 2) For obj_trendgraph02, the labelTextFont and labelTextHeight property now set the font used for the chart's title as expected. Previously they were ignored. 3) On mouseover, the text color of legend items no longer changes to black.
Platform Support
20734: Deprecate Windows installers & Bundled Docs
The Windows Installers for RTView Core have been deprecated. Windows users should now use the cross-platform .zip archive. Please see the documentation for more instructions on how to install RTView. Also, the User Guide is now available as a separate downloadable PDF, rather than bundled in the product installation.
Security
21179: Check column names in servlet URL for code injection attacks
The rtvquery servlet will now encode any < or > characters that appear in the "cols" parameter as < and > in the response, to avoid possible XSS hacks.
Version 6.6.0 Release Notes
20643: New option to restrict number of characters in alert comments in the alert ds
The Alert data source has been enhanced with a new Maximum Characters Allowed in Comments Field property to limit the number of characters it will store in the Comments field. In previous releases, new comments were appended to the existing contents of the Comments field with no limit on the amount of text. This caused problems for alert persistence and alert history if the Comment field became longer than corresponding database field could handle. For this enhancement, the order of the comments has been reversed so that new comments are added before existing contents in the Comments field. If the Maximum Characters Allowed in Comments Field is greater than 0 and a new comment is added to an alert, the content of the Comments field will be trimmed by removing characters from the end of the contents if necessary to stay under the limit. By default, this feature is disabled and the Comments field will grow unbounded as new comments are added. To enable the limit, set the Maximum Characters Allowed in Comments Field in the Alerts tab of the Application Options dialog to a value greater than 0. You can set it using the following property: sl.rtview.alert.commentlimit This comment limit is be available via a data attachment to alert-commentlimit to facilitate building a UI that will prevent users to enter comments longer than this limit. Note that the UI text entry limit should be set to 100 characters less than the comment limit in order to account for the time stamp, user name and hard returns between comments. Persisted alerts with comments from a previous versions will have mixed order on the Comments contents. It will be oldest->newest for persisted comments, then newest->oldest for new comments added in this and later releases. Persisted comments from previous versions that have been persisted and are longer than the specified Maximum Characters Allowed in Comments Field will be trimmed on startup.
Alerts
20664: New option to exit if alert persistence is enabled but database table is unavailable
The Alert data source has been enhanced with a new property: sl.rtview.alert.exitOnPersistInitFailed This property controls what happens when alert persistence is enabled but cannot be initialized due to a database problem or configuration issue. When exitOnPersistInitFailed is set to false (default), RTView will initialize the alerts with persistence disabled. This is the behavior in previous releases. When exitOnPersistInitFailed is set to true, RTView will exit after the persistence initialization has failed without initializing the alerts.
Builder
20330: Support aligning and distributing objects against objects from include files
The Builder has been enhanced to support Aligning and Distributing objects in the local .rtv file against objects in an included .rtv file. When the selection contains both objects in the local file and objects in an include file, ony the objects in the local file will move. Objects in include files can still only be edited directly in the include file.
20693: Builder no longer fails on Mac with JDK 1.7 or greater
The RTView Builder no longer fails on Mac with JDK 1.7 or greater.
Builder - Editing
20091: Display Data option enabled for read-only data attachments
The Builder has been enhanced so that the Display Data option is now available for read-only data attachments.
Commands
17078: Data attachments in multi-commands now work in thin client
In prior releases, data attachments used in commands within a multiple command did not work in a display server deployment. This is fixed.
19854: Email command no longer garbles Japanese chars in name of attached file
The Send Email command no longer garbles Japanese and other non-ascii characters in the names of files attached to an email.
Data Historian
20159: Sync up data from the history cache when historian starts
The Historian supports a new option named persistInitTimeRange which affects the cache persistence feature. Normally, when the cache persistence feature is enabled in the historian, the historian begins collecting cache history data starting at the time when each data server connects. This is adequate in most situations. The persistInitTimeRange option can be used to specify a time range, in seconds, back from the current time that the historian should get cache history data from the data server. This can be useful if the historian is started sometime after the data server, so the data server has collected cache history that hasn't been sent to the historian. For example, if the data server was started an hour before the historian, then the historian could be started as follows, so that it will request an hour of cache history from the data server: run_historian -persistCaches:true -persistInitTimeRange:3600
20637: New option to limit length of strings from cache table stored in db
The historian has been enhanced to support a limit on the length of a string from a cache table column that it will store in the database. If a string is longer than the specified limit, it will be truncated to the limit before it is stored in the database table. This can avoid SQL exceptions encountered when the length of a string exceeds the capacity of the column's data type (for example, 4000 characters in an VARCHAR2 column in Oracle). The limit is specified by a new property named stringColMaxLen. This can be specified in HISTORY.ini as follows: stringColMaxLen 3500 It can also be specified on the command line or a properties file. By default the property has no value, so no limit is enforced.
Compaction
19992: New Smooth Compaction configuration options
New arguments have been added to customize how compaction smoothing is performed. -smoothingonly Run smoothing only without data being provided -smoothcompaction:table1,table2 Restrict the tables being smoothed to those specified
20019: Compaction smoothing no longer sets incorrect "run after" date
Previously, the smooth compaction option caused an an incorrect "run after" date to be set for further compaction. This could result in a small portion of data not being compacted. This has been fixed.
20067: Data retention (purging) now correctly performed after compaction/smoothing
Previously, database retention logic was incorrectly postponed after smoothing/compaction had taken place on a table. This could result in the retention of more data than specified in historian configuration. This has been fixed.
20187: Option to perform compaction for a time range prior to "now"
An option was added to the Historian to allow for the smoothing process to only go back as far as a specified range in the form: -smoothCompactionRecent:NN Where NN is '1d' or '1w'
20254: Retention-only compaction now executed correctly
Previously the historian would fail to run compaction if the Compaction Rules consisted of a single rule that only specified a duration of Raw data (-). This has been fixed.
Data Server
20138: add ProcessName, PID columns to ClientData attrib of data server mbean
The data server's Manager mbean has a tabular attribute named ClientData which contains one row for each client connected to the data server. In this release the ClientData table has two new columns named PID and Process Name. These are intended to help administrators identify the process that corresponds to each client connection. The value that appears in the Process Name column depends on the type of client. If the client is an RTView application, then the Process Name shows the value of the PROCESS_NAME property when the app was started. If the client process was started with a standard RTView script (e.g. run_viewer, run_displayserver, etc) then the Process Name will be viewer, builder, dataserver, displayserver, or historian. For a server, a "d" at the end of the process name indicates it was started with the -daemon option. If the PROCESS_NAME property was undefined when the client process was started, then the Process Name will be RTView (the viewer), RTView Display Builder, Display Server, Data Server, or Historian, or the OEM names assigned to those applications. If the client is the viewer applet, then "applet" is appended to the name. If the client is the rtvdata or rtvquery servlet, the Process Name will be RTVDataServlet and rtvquery, respectively, or the custom servlet name that has been configured for the deployed servlet instance. The PID column shows the PID (process ID) of the client process. Typically the PID column value will appear as nnnn@hostname, where nnnn is the PID from the client's host system (as reported by jps, top, or tasklist) and hostname is the name of the client's host. If the client is the rtvdata or rtvquery servlet, then the PID will correspond to the app server (e.g. tomcat) process on the client host. The PID column may be blank if the client is unable to obtain its PID from the local operating system. The @hostname portion may be omitted if it cannot be obtained from the local operating system. The PID and Process Name columns will both be blank if the client process is running an older version of RTView that does not have this enhancement.
20231: Cache extend-by-sql option now supported in REST api
The REST (rtvquery) servlet now supports the "Extend with SQL" option on queries of cache history tables. This is enabled by setting the parameter named sqlex to true in a query URL. For example, the following URL is a query of the history table of a cache named Apps for the past 24 hours with the Extend with SQL option set: http://host/rtvquery/cache/Apps/history?fmt=text&tr=86400&sqlex=true Note that the new option only applies to a history table query, and only in the case where the time range (tr), begin time (tb), or end time (te) parameter is also specified. Use this option with caution as it may generate a large result.
20596: Fixed duplication in connection error messages
A bug has been fixed which caused duplication of log messages when a client lost its connection to a data server.
Data Sources
Cache Data Source
18403: Fixed cache bug with maxNumberOfCurrentRows and blank timestampColumnName
The cache data source no longer throws a NullPointerException if a cache has maxNumberOfCurrentRows > 0 and a blank timestampColumnName.
20191: Prevent data with timestamp < historyTimeSpan from going to history
In prior releases, a row with a timestamp older than a cache's historyTimeSpan could be added to the cache's history table and would not be removed until the next update. In this release this has been fixed so that such a row is not added to the history table in the first place.
JMS Data Source
20767: xml parser no longer throws exception if token >= 8192 chars
In previous releases, the JMS and XML data sources would throw an ArrayIndexOutOfBoundsException if an XML string token contained 8192 or more characters and none of those characters was a space. This is fixed.
JMX Data Source
19993: JMX handler now provides context information for operations
The API "public String getTarget()" was added to GmsRtViewJmxDataObject for use by JMX custom data handlers.
RRD Data Source
19986: RRD data adapter fixed for Linux
In previous versions the the RRD data adapter was not correctly executing rrdtool on linux systems. This has been fixed.
20589: Improved timezone support
The Round Robin Database (RRD) data source now handles variations of start/stop times in different time zones.
SQL Data Source
19563: -sqltryodbc:false is now the default RTView behavior
By default, the SQL data source will no longer attempt to make an ODBC connection to XYZ if an sql query or command is executed that references a database XYZ but there is no definition of XYZ in OPTIONS.ini. Instead the following error message will appear in the console: Undefined SQL database XYZ To force the SQL data source to attempt an ODBC connection when an undefined database is referenced as in prior releases, specify the following command-line options: -sqltryodbc:true The option can also be specified in OPTIONS.ini: sqltryodbc true or in a properties file: sl.rtview.sql.sqltryodbc=true Note that RTView will still make an ODBC connection to database XYZ if it appears in OPTIONS.ini with the odbc driver specified, regardless of the -sqltrodbc option. However, note that the ODBC driver is not supported in Java 1.8 or newer. If an ODBC connection is attempted in java 1.8 or newer, the following error messages will appear in the console: ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver (ODBC driver is not available in Java 1.8 or newer) Unable to connect to database <XYZ>: No suitable driver found for jdbc:odbc:XYZ
19928: ODBC option removed from Builder and Historian GUI
The checkbox labeled "Use ODBC Driver" has been removed from the SQL Add Database dialog in the Builder and also from the Database Options panel of the Historian UI. This change was made because the JdbcOdbc driver is no longer supported by Oracle beginning in Java 1.8 and in earlier releases it was not intended for production use. If an existing OPTIONS.ini or HISTORY.ini file contains a database connection that was saved with the "Use ODBC Driver" box checked, those connections will still work in this release if run with java < 1.8. In the new UI, such entries will now show: JDBC Driver Class Name : sun.jdbc.odbc.JdbcOdbcDriver JDBC Database URL : jdbc:odbc:<dbname> ... rather than showing the checked "Use ODBC Driver" box. But, if run with java 1.8 or newer, the following error will appear in the console for each database that is configured to use ODBC: ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver (ODBC driver is not available in Java 1.8 or newer)
20692: Fixed bogus timeout of sql query
A problem has been fixed in the SQL datasource which would sometimes cause a query to fail with a bogus timeout error showing a very large and incorrect timeout value.
Demos
19927: ODBC connections in demos replaced with JDBC connections
The use of ODBC for the dstutorial and esphere demos has been deprecated. These demos now use JDBC HSQLDB databases.
20130: Windows start menu simplified
The Windows Installer now creates a much smaller set of Start Menu shortcuts. The remaining shortcuts are: About Documentation Registration RTView Command Prompt System Requirements Uninstaller
20644: Restricted the number of characters for alert comment in self service alerts
Set Owner and Comments dialog in the Self Service Alerts demo has been enhanced to respect the new Maximum Characters Allowed in Comments Field property on the Alert data source. If the Maximum Characters Allowed in Comments Field has been set, the field for entering comments enforces a limit of 100 characters less that the Maximum Characters Allowed in Comments Field. This is to allow for the timestamp and user name to be added to the comment. If the character limit is exceeded, an error message is displayed and the Add Comment button is disabled.
Display Server
18024: Fixed ArrayIndexOutOfBounds on Grid containing more than 1 icon type
In prior releases, the display server threw an ArrayIndexOutOfBounds exception if a display was opened containing an object grid configured with more than one icon per item, and the display was not rendered in the thin client. This is fixed.
19512: Support audio and threshold command in thin client
The thin client now supports the Play Audio File command and threshold commands. In addition, a new property named valueCommandResetTrigger has been added to the display objects that support threshold commands. ------------------- Play Audio File command: The thin client now supports the Play Audio File command. The support for audio file formats varies by platform, as follows. - The Play Audio File command is not supported in Internet Explorer version 8 and older. - In a desktop browser (Internet Explorer 9 or newer, Firefox, Chrome) .wav and .mp3 files are supported. However, Internet Explorer uses the Windows Media Player to play .wav files, which may require user confirmation or may fail due to security settings. - In mobile browsers (e.g. Safari on iOS) only .mp3 files are supported, and the user must click on the "Enable Audio" button that appears in a display the first time an audio command is executed. - The "Beep" command is still not supported in the thin client. Note that in the builder/viewer, only .wav files are supported by the Play Audio File command. This has always been the case and has not changed in this release. --------------------- Threshold command: There are four objects that support threshold commands: obj_circ2d_ilvx_ra4, obj_rect_ilvx_ra4, obj_circ2d_ilvx_da3, and obj_rect_ilvx_da3. A threshold command can be defined using any of the properties named value*Command on those objects. In this release, if the webChartFlag property is checked on an object with a threshold command, the threshold command will be executed in a thin client deployment when appropriate. In prior releases, threshold commands were ignored in a thin client deployment. If the threshold command is a supported client-side command it will be executed in the browser. The client-side commands are: Play Audio File, Drilldown/Set substitution, Execute Custom Command (if the custom command has a javascript implementation), Open Browser. All other commands are executed by the display server or (for a data source command) in the data server. A new property named valueCommandResetTrigger was added to the objects that support threshold commands. Typically, once a threshold command has been executed by one of those objects because the value exceeds or equals a limit, the command will not execute again until the value exceeds another limit. But now, if the value of valueCommandResetTrigger property is changed, then the object's threshold command will be executed again even if the value property has not changed. Changing the value of valueCommandResetTrigger when the object's value is not at or above a limit has no effect.
19979: Added Sessions table to display server mbean
The Display Server's JMX Manager mbean supports a new tabular attribute named Sessions. The Sessions table contains one row for each active client session. Typically, there will be one client session for each browser instance that is currently viewing a thin client display. The Sessions table contains the following columns. - Session ID: unique ID for client session - Client Address: the IP address of the client. - Duration: elapsed time since this client session was created. - Last Reference Time: elapsed time since this client opened or refreshed a display. - User: the login user name - Role: the login user role Notes on each column: The Session ID is also a column in the mbean's DisplayData table, which contains one row for each display that is currently open in a thin client. The Session ID is a unique string assigned to a session by RTView and is not the same value as the session identifier assigned by the webapp mananger (tomcat). The Client Address will be in IPv4 (e.g. x.x.x.x) or IPv6 (x:x:x:x:x:x:x:x) notation, depending on which protocol the client browser used to connect to the rtvdisplay servlet. For example, if the client is on localhost then the client address could be shown as 127.0.0.1 for IPv4, or 0:0:0:0:0:0:0:1 for IPv6. The Duration column and the Last Reference Time column show elapsed time as "d hh:mm:ss" where d = days, hh = hours, mm = minutes, and ss = seconds. By default, a session expires and is removed from the table after about 10 or 11 minutes of inactivity (that is, when the elapsed time shown in the Last Ref Time column is "0 00:11:00" or more). If the display server's display_timeout property has been set, then the session expiration is 10 times the display_timeout value. (The default display_timeout is 60 seconds). The User and Role columns will be blank if the login feature of the rtvdisplay servlet is disabled.
20185: Kendo grid now supported
The "web grid" is a new HTML implementation of the RTView table object (obj_table02) that provides enhanced filtering, sorting, and other interactive features. The web grid is available in the thin client only. 1. Enabling the Web Grid: A new property has been added to obj_table02, named webGridFlag. To enable the web grid in the thin client for a specific obj_table02 instance, check the object's webGridFlag property in the Builder property sheet. Alternatively, the web grid can be enabled on all obj_table02 instances by adding the following rule to an rtview stylesheet (.rts) file loaded by the display server: obj_table02 { webGridFlag : 1 } The default value of webGridFlag is false, which indicates that the "classic" html grid should be used in the thin client. 2. Requirements: If webGridFlag = true then the web grid will appear in the thin client in any modern version of a supported browser. No plugin is required. For Internet Explorer users, version 9 or newer is required and version 11 is recommended for best performance. In IE8 or older, the web grid is not supported so the classic grid will be used regardless of the webGridFlag setting. In this release the web grid is not supported on iPad but may be supported in the future. 3. New Features: The web grid supports a number of new, interactive features: sorting on multiple columns, filtering on multiple columns, column resizing, column reordering, and hiding columns. In addition the user can "unsort" a previously selected sort column, returning it to its original unsorted order. In a grid with rowHeaderEnabledFlag = true, additional columns can be locked into the row header so they remain visible regardless of the horizontal scroll position. Many of these features are accessed from the column menu opened by clicking on the menu icon that appears near the right edge of each column's header. The user can save all of the aforementioned column settings/options permanently, in the browser's local. The saved settings are automatically restored when the user later reopens the display, with the same username and role. Also, for improved performance and usability, if a data table contains more than 200 rows the web grid will display it in pages of 200 rows, using a page control that appears at the bottom of the grid. Each new feature is described below: 3a. Column Sorting: The user can click on a column header to sort the table by that column. On the first click, the column is sorted in ascending order (smallest value at the top), on the 2nd click the sort is in descending order, and on the 3rd click the column is returned to its original unsorted state. A sort on a string column is case-insensitive. The user can select multiple sort columns. In that case, the sorting is performed in the order that the column headers were clicked. Multiple column sorting is a very useful feature, but can also cause confusion if the user intends to sort on a single column, but forgets to "unsort" any previously selected sort columns first. Users should check for the up/down sort icon in other column headers if a sort gives unexpected results. Column sorting is reflected in an export to html/excel. 3b. Column Visibility: The user can hide or show columns in the table by clicking on any column's menu icon, and picking Columns from the menu. This will open a submenu with a checkbox for each column that toggles the visibility of the column. All columns in the data table will appear in the Columns menu, even those that are initially hidden by the obj_table02 property columnsToHide. If the grid has the rowHeaderEnabledFlag property checked then the leftmost column (the row header column) cannot be hidden. Column visibility changes are NOT reflected in an export to html/excel. 3c. Column Filtering: The user can create a filter on any column. If filters are created on multiple columns, then only the rows that pass all of the filters are displayed. That is, if there are multiple filters they are logically ANDed together to produce the final result. The background of a column's menu icon changes to white to indicate that a filter is defined on that column. This is intended to remind the user which columns are filtered. The user can configure a filter on any column by clicking on the column's menu icon and picking Filter from the menu. This will open the column filter dialog, which varies according to the data type of the selected column: - For a string column, the user can enter a filter string such as "abc" and, from the dropdown list, select the operator (equal to, not equal to, starts with, contains, etc) to be used when comparing the filter string to each string in the column. All of the filter comparisons on strings are case-insensitive. The user can optionally enter a second filter string (e.g. "xyz") and specify if an AND or OR combination should be used to combine the first and second filter results on the column. - For a numeric column, the user enters numeric filter values and selects arithmetic comparison operators, (=, !=, >, >=, <, <=). The user can optionally enter a second filter value and comparison operator, and specify if an AND or OR combination should be used to combine the first and second filter results. - For a date column, the user can select a date and time and choose whether matching items should have a timestamp that is the same as, before, or after the filter time. The date is selected by clicking on the calendar icon and picking a date from a calendar dialog. The time is selected by clicking on the time icon and picking a time from a dropdown list. Alternatively, a date and time can be typed into the edit box. (See the limitations section for a note on time filtering when the client and server are located in different time zones). - For a boolean column, the user simply selects whether matching items should be true or false. Data updates to the grid are suspended while the filter menu is opened. The updates are applied when the menu is closed. Column filtering is reflected in an export to html/excel. 3d. Column Locking: This feature is available only if the obj_table02 instance has the row header feature enabled (rowHeaderEnabledFlag is checked). If so, the leftmost column is "locked" in position, meaning that it will not scroll horizontally with the other columns in the table. If the row header is enabled, then two items labelled Lock and Unlock will appear in the column menu. These can be used to add or remove additional columns from the non-scrolling row header area. If the row header is enabled, at least one column must remain locked. 3e. Column Reordering: The user can reorder the grid columns by dragging and dropping a column's header into another position. If the grid has rowHeaderEnabledFlag checked, then dragging a column into or out of the row header area (the leftmost columns) is equivalent to locking or unlocking the column. Column reordering is NOT reflected in an export to html/excel. 3f. Paging: If the data table contains more than one page of rows, the page controls are displayed at the bottom of the grid. The default page size is 200 but can be set on each obj_table02 instance via the new property named webGridRowsPerPage. The default value of that property is zero, which indicates that the default size (200) should be used. If the height of the grid is less than about 64 pixels, there is insufficient space to display the page controls so only the rows on the first page will be viewable. 3g. Row mouseover: A new property named webGridHoverColor is available on obj_table02. It is visible only if webGridFlag = true. The default value of webGridHoverColor is checked. If it is set to any other color index value, then that color will be used to highlight the row that is under the mouse cursor. But if the obj_table02 filterProperties feature is used to color rows, that color will take precedence, so the webGridHoverColor may not be useful in those cases. Also, if the row header is enabled, the row header column and the other columns are highlighted separately, according to which section of the grid the mouse is over. 3h. Saving settings: The user can permanently save all of the custom settings made to the grid, including filtering, sorting, column size (width), column order, column visibility, and column locking. This is done by opening any column menu, clicking Settings, and then clicking Save All. The grid's settings are written as an item in the browser's local storage. The item's value is the a string containing the grid's settings. The item uses a unique key comprised of the URL path name, the display name, and the obj_table02 instance's rtview object name. If the thin client's login feature is enabled, the key will also include the username and role, so different settings can be saved for each user and role for a grid on any given display, in the same browser and host. If the user saves the grid settings and navigates away from the display or closes the browser, then the next time the user returns to the display in the same browser the settings are retrieved from the browser's local storage and applied to the grid. The browser's local storage items are persistent, so the grid settings are preserved if the browser is closed and reopened or if the host system is restarted. If the obj_table02 has autoResizeFlag = true then the column widths will not be restored from the saved settings, and the values computed by the auto-resize feature will be used instead. This is by design. The user can delete the grid's item from local storage by clicking Settings -> Clear All in any column menu. This will permanently delete the saved settings for the grid and return the grid to the state defined in the display file. Note that each browser has its own local storage on each host. The local storage items are not shared between browsers on the same host or on different hosts. So, if a user logs in as Joe with role = admin, in Internet Explorer on host H1, and saves grid settings for display X, then those grid settings will be restored each time a user logs in as Joe, role admin, on host H1 and opens display X in Internet Explorer. But if all the same is true except that the browser is Chrome, then the settings saved in Internet Explorer will not be applied. Or if the user is Joe and role is admin and the browser is IE and the display is X, but the host system is H2 not H1, then the grid settings saved on H1 will not be applied. 4. Support for large tables: The web grid can support data tables with many rows and columns. However, for best performance the display server's cellsperpage property should be specified so that the server will send large tables to the client in pages, rather than sending all of the rows. In this server paging mode, large tables are also filtered and sorted in the display server, to improve performance and decrease data traffic. The cellsperpage option is not new or specific to the web grid, it has been available for several years. See the RTView documentation for a description of the cellsperpage property, and the related cellsperexport and cellsperreport properties. A typical value for cellsperpage is 20000. 5. Unsupported obj_table02 features: The following are existing features of obj_table02 that are not supported by the web grid -The rowHeaderEnabledFlag property is supported, but rowHeaderBgColor, rowHeaderTextColor, rowHeaderTextFont, rowHeaderTextSize are ignored. Instead the row header column is rendered like all other columns. - The columnResizeEnabledFlag is ignored if it is false, the web grid always allows column resizing. - The editDataEnabledFlag is ignored, the table editing feature using custom commands is currently not supported. 6. Other limitations, and differences between the new & classic grids: - Time zones: The strings shown in a date column are formatted by the display server using its time zone. But if a filter is specified on a date column, the date and time for the filter are computed using the client system's time zone. This can be confusing if the display server and client are in different time zones. - Selected rows: The grid's row selection is cleared if the sort is changed or if columns are resized or reordered. - Scrollbars: In general the grid will only display scrollbars when they are needed. However, the web grid and the classic grid use different algorithms for deciding when to show or hide scrollbars, and do not use identical row heights and column widths. So the web grid may sometimes display scrollbars when the classic grid does not, for a grid instance with a given width and height. - Keyboard traversal: In the classic grid, selecting a row and then using the up/down arrow keys will change the selection to the previous/next row. In the web grid, the arrow keys will move the keyboard focus to another row, as indicated by a highlight border around the focused table cell, but the user must press the space bar to select the row that contains the highlighted (focused) cell. - Column widths: On a web grid with no locked columns (rowHeaderEnabledFlag = false), columns will expand to fill any unused width in the table, even if autoResizeFlag = false. That is, if the total width of the columns is less than the grid width (ie. the columns don't use all of the available width) then each column is expanded proportionally to fill the table. In contrast, the classic and Swing (viewer) grids just leave unused space at the right edge of the grid. If the grid has locked columns (rowHeaderEnabledFlag = true), then the web grid behaves the same as the classic and Swing grids. - Export: The export to html and export to excel features are supported on the web grid, and behave much the same as on the classic grid. The exported table respects the grid's filter and sort settings but ignores any column reordering, sizing, or hiding changes made by the user. - Data updates to the grid are suspended while the filter menu is opened. The updates are applied when the menu is closed. 7. An implementation note, for custom web page developers only: The rtview thin client now uses 2 versions of the jQuery javascript library jQuery 1.3.2, to support the jQuery UI components used for panels, layout, and (some) navigation controls jQuery 1.9.1, to support the web grid Version 1.3.2 is bundled into the thin client js file named rtvNav1.js, while version 1.9.1 is loaded as a separate js file. To prevent conflicts between the two libraries, the jQuery $ alias is no longer used by rtview and is intentionally removed. Instead the jQuery 1.3.2 library is referenced by the alias rtv.jqNav as needed, and the jQuery 1.9.1 library is referenced by the alias rtv.jq as needed. This could affect existing custom javascript code that users have written. For example, the following is a snippet of javascript from a custom html page that uses jQuery UI tabs for navigation <script src="rtvNav1.js"></script> <script> $(document).ready(function () { var outerLayout = $('body').layout({ north__size:64, north__spacing_open: 0, }); $('#tabs').tabs(); ... The code above uses the jQuery $ alias, which it assumes is defined in the rtvNav1.js file. But that is no longer true, so the custom code should be rewritten to use the rtv.jqNav alias for jQuery in place of the $ alias, as follows: <script src="rtvNav1.js"></script> <script> rtv.jqNav(document).ready(function () { var outerLayout = rtv.jqNav('body').layout({ north__size:64, north__spacing_open: 0, }); rtv.jqNav('#tabs').tabs(); ...
20237: Touchscreen PCs no longer display thin client in tablet mode
In prior releases, if the thin client was opened in a browser on a PC with a touchscreen, items would be missing from in the right-click context menu. The missing items includied the Drill Down, Execute Command, and Export Table to Excel items, plus any custom menu items. This is fixed.
20582: Enable mouse cursor to change appearance when hovering over composites
If a composite object has its drilldownTarget set, then in the thin client the "hand" cursor will appear when the mouse is over the composite. This is consistent with the behavior of other objects that have a drilldownTarget.
20621: Fixed: obj_rect_il may not draw in comp grid if webLabelFlag=1
A bug in the thin client has been fixed that sometimes caused objects with the webLabelFlag property checked to not to be drawn if the objects were in a composite display inside an object grid instance.
20623: Table no longer fails to populate when cellsperpage is smaller than visible cells
A bug in the display server has been fixed which sometimes caused table cells in the thin client to always contain "..." if the cellsperpage property was set. Typically this occurred if the cellsperpage value was small (in the range of 1000 to 2000) and a table with many columns was opened. It was unlikely to occur with a typical cellsperpage value of 10000 or more. The problem is fixed for all cellsperpage values. As before, a value less than 1000 is ignored.
20679: Table row selection in AW grid no longer unreliable in IE >= 10
In previous releases, when using the thin client in IE 10 and 11, after performing a drilldown from a table object subsequent row clicks in the same table may be ignored. This is fixed.
Functions
19950: Fixed Group By Unique Values function error
Previously, when the restrict to value list option was enabled, all rows from the original table that were not found in the value list were incorrectly assigned to the first element of the value list. This has been fixed.
General
19466: Version info now available via RTView Manager MBean
The RTView Manager MBean has been enhanced to support a new method, VersionInfoDetails, which returns detailed version information about the RTView application. The table will contain one row for each RTView jar in the application and contains the following columns: ApplicationName - The name of the application. Ex.RTView Data Server. ApplicationConfiguration - The configuration string for the application. This string contains the main application version that corresponds to the version information that is printed to the console at startup. JarName - The name of the jar. JarConfiguration- The configuration string for the jar. JarVersionNumber - The version number for the jar. JarVersionDate - The version date for the jar. JarReleaseType - The release type for the jar. JarMicroVersion - The micro version for the jar. This table is useful when reporting problems to SL Technical Support as it contains very detailed information about the version of each jar used in an RTView application.
19901: Stylesheet processing bug fixed
When colors of objects are driven by both stylesheets and functions, the functions should take precedence. In the previous release, the stylesheet was being incorrectly applied to properties that were attached to data. In many cases this was not noticeable because an update to the data attachment would override the stylesheet setting. However, in some cases where the data attachment didn't update after the display was processed, the stylesheet value was used. This has been fixed so that stylesheet values are no longer applied to properties that are attached to data.
20326: New -version flag that prints version information without starting the app
Each of the RTView applications now supports a -version option on the command line which will cause the app to print the RTView version information and then exit immediately. For example: run_dataserver -version
Logging
19543: Alert notification script output error when using log4j
Alert notifications from an RTView now go to a log4j output as desired.
Object Library
Charts (General)
20790: New Google Map object
Introduction: ------------- A new display object for embedding a Google Map in an RTView display is now supported. The new object is named obj_gmap and is located on the Graphs tab in the Builder's object palette. In the builder, an obj_gmap instance appears as a gray "placeholder" rectangle which is used to set the size and position of the map on the display, and to allow configuration of the latitude, longitude, zoom level and other map properties via the Builder's property sheet. The Google Map is only rendered when the display is opened in the thin client. In the Builder and Viewer, and obj_gmap instance will always appear as an empty gray rectangle. Using the map properties and RTView data attachments, the map can be populated with marker objects at specific lat/long positions, and also links between the markers. RTView drilldown and command operations can be triggered by clicks on the map, or on the markers or links on the map. Double click and right click actions, and drillDownColumn subs are supported, as on other RTView table-driven objects. Map operations such as zoom, pan, and marker selection can be tied to rtview variables. Requirements: ------------- The thin client must have internet access in order to download the Google Maps javascript API and map data. The thin client supports Google Maps in Internet Explorer version 9 or newer, and any other RTView-supported browsers (Firefox, Chrome, iOS Safari). The Viewer does not support the map object. The thin client loads the Google Maps Javascript API to render and manipulate the map. In most cases a key or license must be obtained from Google for business use of the Google Maps Javascript API. See the "Licensing" section later in this document. Map Object Properties and Features: ----------------------------------- A Google Map is added to an RTView display by creating an instance of the obj_gmap display object, found on the Graphs tab of the Builder's object palette. In the builder, an obj_gmap instance appears as a gray "placeholder" rectangle which is used to set the size and position of the map on the display, and to allow configuration of the latitude, longitude, zoom level and other map properties via the Builder's property sheet. The Google Map is only rendered when the display is opened in the thin client. The following properties are supported by obj_gmap: ("Data" category): + valueTable: This property can be used to place markers (icons) on the map, at specific locations. The property should be attached to a table that contains one row for each marker, with the columns shown below. The column names are unimportant, but the column order and type must be as follows. The first 3 columns are required, the others are optional. column 1 (string): name column 2 (number): latitude column 3 (number): longitude column 4 (string): icon name/path column 5 (integer): icon height in pixels The marker name is used is drilldowns to indicate the selected (clicked) marker, and can also be used to select a marker, so it should be unique. If column 4 (icon name) is omitted or is empty, the default Google Maps marker will be used. If column 5 (icon height) exists and its value is > 0, the value is used to center the icon on the marker's lat/long position, otherwise the 0,0 pixel of the icon will be placed on the marker's lat/long position. + valueTableForLinks: This property can be used to draw links between markers on the map. The property should be attached to a table that contains one row for each link, with the columns shown below. The column names are unimportant, but the column order and type must be as follows. The first 2 columns are required, the others are optional. column 1 (string): name of marker at start of link column 2 (string): name of marker at end of link column 3 (string): link line color, as a css color name or #rrggbb hex value. column 4 (integer): link line width column 5 (integer): arrow mode The first two columns specify the names of the markers at the start and end of the link. These must correspond to the names of markers in the valueTable. If column 3 is omitted the link color is black. If column 4 is omitted the link width is 2 pixels. The arrow mode values are 1 (one arrow, pointing to start marker), 2 (one arrow, pointing to end marker) and 3 (two markers, at each end of link). If column 5 is omitted the default mode of 3 is used. ("Interaction" category): + command: the command to invoke when the user clicks on the map, a marker, or a link + drillDownColumnSubs: this property is treated the same as for other table-driven objects. If a marker is clicked, the drillDownColumnSubs are set using values from the valueTable row that corresponds to that marker. If a link is clicked, the drillDownColumnSubs are set using values from the valueTableForLinks row that corresponds to that link. In addition, the following predefined substitutions are also set when a drilldown is executed: $mapSelLat : the latitude of the map location or marker clicked $mapSelLng : the longitude of the map location or marker clicked $mapLat : the latitude of the map's current center location $mapLng : the longitude of the map's current center location $mapZoom : the current zoom level of the map, a value between 0 and 21 + drillDownSelectMode: This property can be set to the following values: Anywhere: a click anywhere on the map will trigger the object's command or drilldown. Markers: only a click on a marker will trigger the command or drilldown. Links: only a click on a link will trigger the command or drilldown. Markers & Links only a click on a marker or a link will trigger the command or drilldown. + menuItemGroup: As with other objects (table, heatmap, tree) this property is used to add custom items to the context menu, when a map marker is right-clicked. + label: The label string for the map placeholder object. This is visible only in the Builder. ("Map" category): + labelsZoomThreshold: If this property is set to a value > 0 a label balloon will appear next to each marker when the zoom level is greater than or equal to that value. The label text in the balloon is the name assigned to the marker, by the first column in the valueTable. A label can be closed by clicking its "x" button. The label will reappear if the display is closed and reopened or if the zoom threshold is crossed again later. The default value of labelsZoomThreshold is zero which disables the labels. + latitude: the latitude of the point on which the map is to be centered + longitude: the longitude of the point on which the map is to be centered * selectedMarker: the name of the marker to select + zoom: the zoom level of the map, between 0 and 21. The other properties supported by the map object but not listed here are common to all display objects, and have the same purpose and behavior as on the other display objects. Licensing: ---------- Business use of the Google Maps Javascript API typically requires a key or license from Google. For more information, see the following: https://developers.google.com/maps/licensing SL does not provide a key or license for the Google Maps Javascript API. However, the thin client can be configured to download the API using a custom URL that contains specific key or license information obtained from Google. The custom URL is defined by modifying the rtv_custom.js file contained in rtvdisplay.war. (Refer to the customization section of the RTView documentation for details on modifying rtvdisplay.war) To specify a custom URL to download the Google Maps Javascript API, add the following line to rtv_custom.js: rtv.customGoogleMapsApiBaseURL = 'url'; For example, to specify a URL containing a Google API key: rtv.customGoogleMapsApiBaseURL = "https://maps.googleapis.com/maps/api/js?key=YOUR_GOOGLE_API_KEY"; Or, to specify a "Google Maps API for Work" client ID and release version 3.20: rtv.customGoogleMapsApiBaseURL = "https://maps.googleapis.com/maps/api/js?client=YOUR_GOOGLE_CLIENT_ID&v=3.20"; If no rtv.customGoogleMapsApiBaseURL value is specified, the thin client will use the following public URL to download the latest "experimental" version of the API with no key or license information: https://maps.googleapis.com/maps/api/js
Control Objects
20142: Fixed minor usability problems with tree/accordion control
The following minor problems with the tree and accordion control object are fixed: 1 The initialExpandDepth property is now only applied to new branches. Previously, on a tree control with valueTableType = Row-node the initialExpandDepth was improperly reapplied on each update to the tree, reopening any existing branches that the user may have closed. 2. In the thin client, the labels on accordion buttons are now aligned properly: Parent (non-leaf) node labels are left aligned, and leaf node labels are center aligned. This is consistent with the accordion in the builder/viewer. Previously, parent node labels were center aligned in the thin client, which was incorrect. 3. On a tree control In the thin client, a click on the +/- icon now opens/closes the tree branch as expected but it no longer selects the node or triggers the tree control's command. This is now consistent with the tree control behavior in the viewer. 4. On an accordion control In the thin client in most browsers, a click on a left/down arrow icon now opens/closes the branch as expected but it no longer activates the accordion button or triggers the accordion control's command. However, in IE version 8 or older, and in the viewer, the accordion button is still activated and the control's command is executed.
20638: New property to limit text entered into text area control
The text area control (obj_c1textarea) has been enhanced to enforce an optional maximum character limit. (The text field control, obj_c1textedit, has supported this feature for several releases). maxCharacters - The maximum number of characters that will be submitted to the control's actionCommand. The default value is blank (no limit). The limit does not restrict the length of the text in the control, instead the limit is checked before the command is executed and if the limit is exceeded, the command is not executed. inputValidVarToSet - Attach to a local variable. This variable will be updated with a value of 1 if the maxCharacters limit is blank or the text is less than or equal to the maxCharacters limit, or updated with a value of 0 if the text length exceeds the maxCharacters limit. invalidInputMsgVarToSet - Attach to a local variable. This variable will be updated with an error message if the text length exceeds the maxCharacters limit, or updated with an empty string if the text length is less than or equal to the maxCharacters limit.
20710: Enhanced text controls to only execute actions if text changed
A new property named executeOnlyIfChangedFlag has been added to the text control objects (obj_c1text*). If executeOnlyIfChangedFlag is true, and if the text control's varToset and its valueString or value property are attached to the same local variable, then the control's command will be executed only if the text in the control is changed. By default executeOnlyIfChangedFlag is false, in which case the control's command is executed whenever the control loses focus (if executeOnFocusLostFlag = true or if the control is a text area) or whenever the user presses the Enter key in the control (if the control is not a text area), regardless of whether the text in the control was changed. This matches the text control behavior in all previous releases.
20771: New Tab Control object
A tab control object is now supported in RTView. The name of the object is obj_c1tabs. It appears on the Controls tab of the Builder's object palette. The tab control has two "fake" tabs labelled A and B when it is drawn on the palette, and also when the user places an instance on a display. The fake tabs are replaced with the actual tabs by attaching the tab control's valueTable property to a data table containing one row for each tab. The size given to the control in the Builder determines the space available for tabs. The tabs are drawn horizontally with the first tab at the left edge of the control. If the control is not wide enough to show all of the tabs, the tabs will wrap vertically. If the control is not tall enough to show all of the tabs, some of the tabs may be clipped or invisible. Changing the control's labelTextSize property will change the size of the tab label text, which will also affect the size of the tabs. The tab control is populated from a data table attached to its valueTable property, with one tab created for each row in the table. The following tab control properties are used to map the columns of the data table to each tab: labelColumnName - the value from this column is used as the tab label. If labelColumnName does not specify a column in the valueTable or if it contains an empty string, then the tab for row N in the valueTable will be labelled "Tab N". The labelColumnName property appears in the Label category. valueColumnName - the value from this column is assigned to the variable (if any) attached to the tab control's varToSet property when the corresponding tab is selected by the user. If valueColumnName does not specify a column in the valueTable, then the tab's index (0 through N - 1, for a table with N rows) is used as the tab value. The valueColumnName property appears in the Data category. imageColumnName - the value from this column is used to load an icon image, shown to the left of the tab's label . If imageColumnName does not specify a column in the valueTable, or if the column is empty, or if the image can't be found, the tab will not contain an icon. An icon will affect the size of the tab. The imageColumnName property appears in the Image category. mouseOverColumnName - the value from this column is used as the tooltip for each tab. If mouseOverColumnName does not specify a column in the valueTable, or if the column is empty, the tab will not display a tooltip. The mouseOverColumnName property appears in the Interaction category. The tab control supports the drillDownColumnSubs property, which can be useful in cases where the tab's command is a drilldown. As with other objects that support drillDownColumnSubs, it can be used to set the values for substitutions and local variables from columns in the row of the valueTable that corresponds to the selected tab. As usual, the control's visFlag property can be used to toggle the control's visibility. Unlike the other control objects, the tab control does not support the enabledFlag property so it is always enabled. As on other control objects, the predefined substitution named $value can be used in the control's command. The value of the selected tab will be substituted for $value when the command is executed. (See the valueColumnName property for a description of how a tab's value is determined). If a tab control has a command defined and the commandConfirm property is checked, the user will be asked to confirm the command when a tab is clicked, but the clicked tab will become the selected tab regardless of the user's response. Limitations / Differences: - In the thin client, the tab control is not supported in IE version 8 or older and will not appear in displays opened in those versions. - The tab sizes and appearance may differ somewhat when viewed in the Builder/Viewer vs. thin client. - In the thin client, the background color of the selected tab is brighter than the unselected tabs, while in the builder/viewer the selected tab is darker than the other tabs. (This difference is intentional, to conform with the standard appearance of tabs in Swing vs. a browser.)
Status History
19936: Added support for data quality to obj_statushistory
The status history chart (obj_statushistory) has been enhanced to indicate data quality. Two new properties have been added, named valueQualityColumnName and valueQualityBadValuesList. These properties can be used to set a color and pattern to be plotted when on a bar when the data quality is bad. The valueQualityColumnName property can be set to the name of the table column that contains a value indicating the data quality for each row. The column can contain string, integer, or boolean values. The valueQualityBadValuesList property can be set to a string containing value,label pairs with each pair separated by semicolons. This is used to assign a label to a numeric bad quality value, for example "-1,no data;0,stale data" The default value for valueQualityColumnName is blank, which means that the new feature is disabled. In this mode the color and pattern for each bar is determined by getting the value for that row from the column specified by valueColumnName, and looking up that value in the chart's barProperties. (This is the behavior in all prior releases). If valueQualityColumnName non-blank, then for each row R the row's value to be plotted is determined as follows: - let Q = value of quality column for row R, and V = value of value column for row R - if Q is blank, then the quality is considered good and V is used at the row value, as normal. - else if the valueQualityBadValuesList property is blank, then Q is used as the row value. - else if valueQualityBadValuesList contains an entry "Q,X" then X is used as the row value - else the quality is considered good (since no match was found in valueQualityBadValuesList) and V is used at the row value Then the row value is looked up in barProperties, as usual, to determine the color and fill pattern. That value is also shown in the mouseover text as usual. For example, consider the following data table: Plant Status Quality ----- ------ ------- A online 1 B offline 1 C online -1 D offline 0 ... where 1 = data OK, -1 = no data, and 0 = stale data. Next, consider a status history chart with these properties: indexColumnNames = Plant valueColumnName = Status valueQualityColumnName = Quality valueQualityBadValuesList = -1,no Data;0,stale data barProperties = online : green offline : blue no data : red stale data : orange Note that valueQualityBadValuesList has no entry for quality = 1, because that is the "good" quality value. With that configuration, when the data table shown above is applied to the chart, it will plot a segment for each Plant as follows: A green (since Status = online and Quality = 1 / OK) B blue (since Status = online and Quality = 1 / OK) C red (since Quality = -1 / no data) D orange (since Quality = 0 / stale data)
Tables
19989: Default format for date columns added to table objects
A property named columnFormatDate has been added to the table object (obj_table02). By default the property's value is blank. If the property is set to a valid time format, then that format will be used for all time/date columns in the table that do not have a format specified in the table's columnFormat property. For example if an obj_table02 instance contains a date column named X, then the format for column X is determined as follows: 1. If the table object's columnFormat property contains a valid date/time format for column X, then that format is applied to column X. 2. If the table object's columnFormatDate contains a valid date/time format, then that format is applied to column X. 3. Otherwise the default date/time format for the current locale, as returned by java.text.DateFormat.getDateTimeInstance(), is applied to column X. As with any object property, an rtview stylesheet entry can be used to set columnFormatDate globally on all obj_table02 instances, for example: obj_table02 { columnFormatDate: "yyyy-MMM-dd HH:mm:ss" }
Platform Support
19925: Support Java 1.8
Java 1.8 is now officially supported. NOTES: As noted in the release notes for 19927 and 19928, the JdbcOdbc driver is no longer supported by Oracle beginning in Java 1.8. Version v4.14.137 of IBM DB2's db2jcc.jar driver is required to work with Java 1.8
RtvCacheDoc
18909: rtvcachedoc no longer generates incorrect "Expired" column
In previous releases, rtvcachedoc incorrectly included the column specified in the rowExpiredColumnName property in the generated db schemas. This only happened for caches with a blank value for the historyColumnNames property. This has been fixed.
Security
20794: Fixed XSS Security Issue in Thin Client Deployment
A cross-site scripting (XSS) vulnerability in the thin client has been fixed.
Transaction Message Monitor
20672: Transaction monitor end of life announced
The Transaction Monitor application will be end of life in RTView version 6.7. A warning about this has been added to the console and the tmdisplays demo has been removed from the RTView demos directory. In previous releases, the Transaction Monitor threw an exception at startup. This has been fixed.
Version 6.5.0 Release Notes
Builder - Editing
19879: Fixed NPE when deleting local var with same name as global
A bug has been fixed in the Builder which caused a NullPointerException to be thrown if a local variable was deleted and the local variable had the same name as a global variable.
Data Historian
19469: Avoid removal of all batch data when some data is wrong.
The historian will no longer discard all rows in a batch if a SQL exception is thrown during an row insert. Instead it will catch the exception and continue with the other row inserts in the batch and commit all of the successful inserts at the end of the batch.
Compaction
19786: smoothCompaction no longer throws NPE when there are no compaction rules
Previously a NPE was thrown when -smoothcompaction was used with a cache with a compaction type of "aggregate" but with no compaction rules. Now this scenario fails silently.
19915: Simple retention now applied only to tables without compaction rules
If a cache history table that was persisted by the historian had no compaction rules, then the simple retention time limit was applied to ALL tables persisted by the historian. This was incorrect. The simple retention limit will now only be applied to tables without compaction rules.
19987: Compaction now recovers after a lost database connection is restored
Compaction now recovers correctly after a lost database connection is restored.
Data Sources
Cache Data Source
19960: Fixed bogus extend-by-SQL query if history has future timestamps
A bug in the cache data source has been fixed that triggered an unnecessary SQL query if an attachment to a cache history table had the Extend with SQL option checked, and the history table contained timestamps in the future as compared to the current time on the system hosting the cache data source.
20100: Cache extend-by-sql query now ignores row filters with value=*
A bug has been fixed in the cache data source which affected cache data attachments using the Extend with SQL option and which also use a row filter with multiple columns or multiple values, where * is used as one or more filter values. In those cases, the "where" clause in the SQL query generated by the cache data source was incorrect and returned no rows. This is fixed.
SQL Data Source
20072: Fixed concurrency exception when updating sql RTViewDs.Connections table
A bug has been fixed in the sql data source which, in rare cases, caused a ConcurrentModificationException to be thrown if a display was open with a data attachment to the sql RTViewDs.connections table.
TIBCO Hawk Data Source
19977: New onData Length column
The TIBCO Hawk data source has been enhanced to include a new onData Length column in the RTViewDs GetSubscriptionStatus method. This column contains the amount of time, in milliseconds, that the last onData call took to process the subscription data.
Display Server
19880: Fixed unstable dropdown list in FF & Chrome
In prior versions of the thin client, on each display refresh the dropdown list of the combo box control would scroll and the highlighted list item would change, even if the refresh did not change the items in the list. This behavior could make it difficult to use the dropdown list. This problem has been fixed. Note that this problem affected the thin client in Firefox and Chrome, but not Internet Explorer.
20009: Animated gif labels no longer mispositioned
In previous releases, the animated gif image on a label object would sometimes appear in the top left corner of the display, rather than positioned correctly on the label object. This is fixed.
20021: Images now found when rtv file loaded from subdirectory
In prior releases, the thin client would fail to load images for some objects if the images and the display containing the objects were in a subdirectory of the display server's working directory. This is fixed.
20097: “loading …” label no longer remains after loading finished
A problem has been fixed in the thin client that would sometimes cause the "loading..." message to remain on the display after the display had finished loading.
General
19933: rtvquery default time range for current table changed from 30s to ALL
The rtvquery servlet will no longer apply a default time range of 30 seconds to queries on the current table of a cache. Instead, it will apply a default time range of zero, which will return all rows from the current table regardless of their timestamp. A default of 30 seconds will still be applied to all queries on cache history tables. Note that the time range, in seconds, can be specified with the tr parameter in the URL. For example, this query will return the last 10 minutes of history data from a cache named Servers: http://host:port/rtvquery/cache/Servers/history?tr=600
20017: rtvquery servlet now uses "UTF-8" instead of "UTF8"
The rtvquery servlet will now specify UTF-8 character encoding for all responses. Previously, the servlet specified UTF8 which was not recognized by Internet Explorer versions 9 and older and caused an exception with the message "Could not complete the operation due to error c00ce56e"
Object Library
19861: Support HTML label object in the thin client
A number of simple RTView graphical objects have been enhanced to allow them to be rendered as HTML elements in a thin client deployment, rather than rendered in the image generated by the Display Server. This enhancement can improve system performance in some cases and also allows the user to copy text strings in the objects to the clipboard. Most of the objects affected by this enhancement are found on the General tab and Labels tab in the Builder's object palette. The enhanced objects are: obj_rect obj_rect_il obj_rect_ilv obj_rect_ilvs obj_rect_ilvx_da3 obj_rect_ilvx_ra4 obj_circ2d obj_circ2d_il obj_circ2d_ilv obj_circ2d_ilvs obj_circ2d_ilvx_da3 obj_circ2d_ilvx_ra4 obj_label05 obj_label05s obj_label11 obj_label11s obj_text01 obj_c1btn_chk These objects now support a new a new property named webLabelFlag. In a display server deployment, if webLabelFlag is true (checked) then the object will be rendered as HTML in the thin client, rather than rendered in the image by the display server. This allows the display server to update the individual object, if necessary, when the display is refreshed, rather than regenerating the entire display image. If all of the dynamic objects on a display can be rendered as HTML, this can improve the performance of the display server and thin client. The list of objects that can be rendered as HTML now includes all the objects listed above, all objects on the Controls tab in the object palette (obj_c1*), the table object (obj_table02), and the trend chart (obj_fxtrend). Another advantage of setting webLabelFlag on an object is that it allows the user to select the object's text and copy it to the clipboard. By default webLabelFlag is false (unchecked). The webLabelFlag property is listed in the "Label" category in the Builder's property sheet. The webLabelFlag can be set on all of the objects listed above via the following entry in an rtview stylesheet (.rts) file: rtv-all { webLabelFlag: 1; } In certain cases, an object included in the list above will still be rendered in the image by the display server even if webLabelFlag = true. These cases are: - the display is opened in Internet Explorer 8 or older. - the display server is run with the -nohtml5 option on the command-line. - an obj_text01 instance with rotated text (a nonzero value for rotationAngle). - an obj_rect* with labelTextPosY = Tab Top - an obj_rect* with labelTextPosY= Title Top and bgBorderFlag = true - an obj_label* with bgStyle = Round Rectangle - the object is inside an object grid, and is not inside a composite object in that grid - the object is an obj_rect* and there is a non-html object above it in Z-order which overlaps (for example, an obj_rect instance used as a background behind several meter objects) In other cases, an object may have a slightly different appearance in the thin client when it is rendered as HTML, as follows: - only vertical and horizontal gradients are supported on HTML objects in the thin client, so if an object has its bgGradientMode property set to "Diagonal Edge" or "Diagonal Center" it is treated as "Vertical Edge" instead. - the object's bgShadowFlag property is ignored Note that the webLabelFlag property has no effect in the builder or viewer (thick client). Also, as part of this enhancement the following bug was fixed which affected the thin client in Internet Explorer: If the javascript debugging feature was enabled (from IE's Internet Options dialog, Advanced tab) then after closing a window or tab in some cases an error dialog would appear with this message (or similar): "Line 269: Error: The object invoked has disconnected from its clients."
Charts (General)
20007: HTML5 - Color of the Navigator Trace now matches the trace it is representing
The navigator trace on the html5 chart will now use the same color as the trace assigned to the chart's webChartNavigatorTrace. In previous releases, the navigator trace was always blue.
Status History
19934: New property to limit size of label area
The status history object (obj_statushistory) supports a new property named barLabelMaxLengthPct. This can be used to specify the maximum length for each bar label as a percentage of the plot area width. The default is zero which means no limit is applied to the label length. If a positive value is specified for both the barLabelMaxLength and barLabelMaxLengthPct properties, then the smaller length limit of the two will be used.
19935: Newlines supported in Description field in mouse over
The status history chart (obj_statushistory) will now properly convert a backslash-n sequence into a newline when displaying the mouseover (tooltip) string. This string is acquired from the column specified by the chart's descriptionColumnName property.
20002: Right/Double-click features supported for status history chart
The status history chart (obj_statushistory) can now be configured to extend the right-click context menu and support double-click behavior, in the same manner as the heatmap, table, and grid objects. To support this feature properties named menuItemGroup and rightClickActionFlag have been added to the chart. See 17835 for more information on using these properties to extend the context menu and control the double-click behavior.
Trend Charts
19938: HTML5 obj_trendgraph02 no longer ignores data table with 1 column
A problem in the display server has been fixed which prevented an obj_trendgraph02 instance with webChartFlag = 1 from plotting any data points on trace N if traceNValue was attached to a table containing a single numeric column.
Reporting
19939: obj_trendgraph02 using HTML 5 can now be exported to PDF
A problem has been fixed which prevented an obj_trendgraph02 instance with webChartFlag = 1 from being included in the output of the thin client's "Export to PDF" option.
Version 6.4.0 Release Notes
Alerts
19141: alertExpireMode added to event alerts
Event Alerts have been enhanced with a new property, alertExpireMode. This property supports 2 options: - Initial Time - if selected and the alertExpireTime is greater than 0, the alert will clear if the alertExpireTime has passed since the alert was generated. - Last Update Time - if selected and the alertExpireTime is greater than 0, the alert will clear if the alertExpireTime has passed since the alert received a data update Note that only indexed event alerts can receive data updates, so the Last Update Time option will not work for unindexed event alerts.
19291: Cleared event alerts no longer regenerated in ssa
In previous releases, event alerts that did not have a mapping for Cleared in the valueTableMap were erroneously regenerated after being cleared when running with Self Service Alerts enabled. This has been fixed.
19292: Unindexed event alerts can now be disabled in ssa
In previous alerts, unindexed event alerts could not be disabled using Self Service Alerts. This has been fixed.
19714: Sybase schemas corrected
Errors have been corrected in two sql scripts: RTV\dbconfig\alert_persist\createtables_sqlserver.sql demos\selfservicealerts\dbconfig\createtables_sybase.sql
Commands
18643: japanese chars no longer garbled by "Send Email" command
The email command will now properly encode Japanese and other Asian characters contained in the text of the email. In prior release, such characters were garbled.
Data Historian
16720: Table creation for Sybase now declares NULL for non-index columns
Two problems in the Historian have been fixed related to Sybase: 1) The following exception was sometimes thrown when the historian was storing or compacting data: SQLException: The column <abc> in table <xyz> does not allow null values. 2) The following exception was sometimes thrown when the historian was compacting data: SybSQLException: The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the <xyz> database. Both problems are fixed.
Compaction
19312: Sybase integer conversion error fixed
A problem has been fixed that caused the Historian to throw an exception when compaction of an integer column by averaging produced a floating point result, when used with Sybase. The exception was reported as "Scale error during implicit conversion of NUMERIC value". This has been fixed by setting "arithabort numeric_truncation off" in the active session between the Historian and the Sybase database.
Data Server
19365: REST output generation breaks with special characters
In previous releases, the output of the rtvquery (REST) servlet was truncated if a query result contained a non-ascii character. This is fixed
19420: Exception in data server if attachment has bogus column name
A problem has been fixed that could cause the data server to become unresponsive. The problem occurres if a client makes a cache data attachment with no row filter and a column filter that specifies one or more nonexistent columns. In those conditions, the data server would occasionally throw the following exception: Exception in thread "GmsTimer-DataServer" java.lang.ArrayIndexOutOfBoundsException at com.sl.gmsjrt.GmsTabularData.gg$1(SourceFile:5925) at com.sl.gmsjrt.GmsTabularData.writeObject(SourceFile:5849) at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) ... at com.sl.gmsjrtvhistorian.GmsRtViewDataServerDs.sendDataToClients(SourceFile:860) at com.sl.gmsjrtvhistorian.GmsRtViewDataServerDs.gmsTimerFired(SourceFile:899) at com.sl.gmsjrt.GmsTimer.run(SourceFile:106)
19477: Data Server NPE when DS is busy and pushing data to a disconnecting client
A problem has been fixed that in rare circumstances caused the data server to throw a NullPointerException and become unresponsive after a client disconnected.
Data Sources
Cache Data Source
18738: Data type handling improvements for Extend by SQL option
Three problems affecting the Extend By SQL option in cache data source attachments have been fixed. The first problem caused the following SQL error in some conditions when a cache attachment was configured with the Extend By SQL option and a filter on a string column, and the database in use was Sybase: "Implicit conversion from datatype 'VARCHAR' to 'INT' is not allowed. Use the CONVERT function to run this query." The second problem caused SQL errors when a cache attachment was configured with the Extend By SQL option and a filter on a Boolean column, and the database in use was Sybase, Oracle, DB2, or MySQL. The third problem caused the Extend By SQL query result to use integer columns for columns that were Boolean in the cache, if the database was Oracle or DB2. All three problems are fixed.
19164: Cache data source now reports missing config file
The cache data source will now generate an error message if a cache definition file cannot be loaded. For example, if a cache definition file named MyCaches,rtv is specified in CACHEOPTIONS.ini but the file does not exist then the following error message will be printed to the console: ERROR: can't load cache definition file MyCaches.rtv, file not found. In previous releases, no message was printed if a cache file could not be loaded.
19216: Added per-index row limit to cache history table
To allow more control over the number of rows stored in a cache history table, a new property named maxNumberOfRowsPerIndex has been added to the cache table object (obj_cachetable). In the Builder's property sheet, the new maxNumberOfRowsPerIndex property appears in the Cache History Table category. The property is visible only if the cache's maxNumberOfHistoryRows value is greater than zero. (Otherwise the cache does not have a history table). If a positive number N is assigned to maxNumberOfRowsPerIndex, then the cache's history table will contain at most N rows for each unique combination of the cache's index column values. For example if a cache has one index column named Server and maxNumberOfRowsPerIndex is 500, then the cache's history table will contain no more than 500 rows for each unique name in the cache's Server column. If the cache's condenseRowsFlag is set, then the maxNumberOfRowsPerIndex limit is applied to the cache's history_condensed table. If the cache's condenseRowsCombineHistoryFlag is also set, then the maxNumberOfRowsPerIndex limit is also applied to the cache's history_combo table. To reduce overhead, a cache's maxNumberOfRowsPerIndex is checked only once per minute or, in the case of the history_condensed table, at the condense interval, whichever is less frequent. This means that the maxNumberOfRowsPerIndex may be exceeded until the next time the limit is checked. By default the value of maxNumberOfRowsPerIndex is blank, meaning that no per-index limit is applied to the cache's history tables. With the addition of the maxNumberOfRowsPerIndex property the cache history table size is now controlled by 3 properties: 1. If the historyTimeSpan property is set, the cache trims its history table by removing rows with timestamps that are older than the limit, 2. Next, if the cache's history table exceeds the maxNumberOfHistoryRows limit (which must be > 0 for the cache to store any history), then the oldest rows are removed from the history table to satisfy the limit. 3. Next, if the cache's maxNumberOfRowsPerIndex limit is set then it is applied as described above.
19363: Fixed memory leak for cache attachment with column filter
A memory leak has been fixed in the cache data source. The leak occurs if there is a data attachment to the current table of a cache, and the data attachment specifies a column filter but no row filter, and rows are never or only very rarely removed from the cache. If there is such a data attachment the data server will leak memory each time the cache is updated. The size of the leak depends on the number of columns specified in the filter. The leak was introduced by changes in RTView version 6.2.
JMX Data Source
18767: JMX connection logic more robust
A typo in a JMX connection line (jmxconn) will no longer crash RTView.
19204: Improved support for mbeans that serialize (Tabular/Composite)DataSupport
The JMX adapter was updated to handle mbeans that serialize TabularDataSupport and CompositeDataSupport objects, as used in some Tibco BusinessEvent mbeans. The previous adapter would return a text blob for BE methods that returned these types. Now, these objects are properly deserialized into an RTView table.
Splunk
19379: Splunk data adapter updated
The Splunk data adapter has been updated to make it compatible with recent versions of Splunk (6.0+). The Splunk data adapter uses the recent splunk java SDK so is compatible with compatible with recent versions of Splunk (6.0+). This version of the SDK requires java SE version 6 or higher (for both the splunk server and the data adapter client). If you are using Windows, make sure the JAVA_HOME system variable is set to the directory where the JDK is installed. The required jars are included in the delivery and added to the classpath by the GmsLauncher; The user does not need to use RTV_USERPATH as in previous versions. Splunk Connections are now defined using explicit Host and Port values rather than a single URL as previously. The Splunk options now contains a search job wait time field (in ms). This is used to control the wait time when polling for search job completion; the user will typically not need to modify this value. The Attach To Splunk Data dialog has some new fields compared with previous versions. The new fields are as follows. Earliest Time: Filters the (splunk search) returned objects by their timestamp. Only objects that have a timestamp that is >= earliest_time will be returned. The time format is always ISO-8601 formatted. Ex:2008-01-29T11:40:58-0800. If omitted, then no earliest time bound is used. Latest Time: Filters the (splunk search) returned objects by their timestamp. Only objects that have a timestamp that is < latest_time will be returned. The time format is always ISO-8601 formatted. Ex:2008-01-29T11:40:58-0800. If omitted, then no latest time bound is used. Example Times are 2014-06-05T00:00:00-0800 2014-06-06T00:00:00-0800 ISO-8601 format is described on the web http://en.wikipedia.org/wiki/ISO_8601 http://www.iso.org/iso/home/standards/iso8601.htm http://www.w3.org/TR/NOTE-datetime Offset: The starting offset (0-based) of the first object to return in the (search result) list. Can be used together with Max Results: to "cursor" through a large result set, a small "chunk" at a time. (not the effect on the internal "_serial" splunk data column) Divide Data Column: When Selected, this check box makes additional fields visible for use in dividing up data in a returned column ,by means of a Java regular expression, into numbered columns in the returned data. Typically this is used to extract data that has an implicit token or field based positional location in the raw data returned by splunk. Examples of use would be to break up raw log line / HHTP request into fields / columns. The additional Divide Column Data fields are as follows Divide Column Name: The name of the column to divide (split) into individual values - typically this will be the raw data column returned from splunk "_raw" Column Data Regexp: The Java Regular Expression (Regexp) specification used to split the data in the named column into individual numbered columns that contain matched occurrences of the regular expression, where the new column name is the number of the occurrence (e.g. "1", "2", "3", etc) The Column Data Regexp field contains a drop down with a number of predefined regular expression literals, or you can enter your own. Note: Normally Splunk will recognize and extract fields and make them available for searching on, but sometimes you need to split up the raw data to extract meaningful information.
TIBCO Hawk Data Source
19818: Hawk 5.1 support
The TIBCO Hawk data source has been enhanced to support running against Hawk 5.1. Support for running against Hawk 5.0 has been removed. This means that the system where you are running RTView must have the HAWK_ROOT environment variable pointing to a Hawk 4.x or Hawk 5.1+ installation. The TIBCO Hawk data source can still connect to agents that are running version 5.0, the limitations is only that cannot run on a system where HAWK_ROOT is set to a Hawk 5.0 installation. If RTView is run on a system where HAWK_ROOT is set to a Hawk 5.0 installation, it will crash with the following exception: Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class COM.TIBCO.hawk.console.hawkeye.AgentMonitor, but interface was expected at com.sl.gmsjhawkds.GmsHawkConsole4x.initAgentMonitor(GmsHawkConsole4x.java:160) at com.sl.gmsjhawkds.GmsTibConsole.initHawk(GmsTibConsole.java:513) at com.sl.gmsjhawkds.GmsRtViewHawkDs.initHawk(GmsRtViewHawkDs.java:1192) at com.sl.gmsjhawkds.GmsRtViewHawkDs.initializeData(GmsRtViewHawkDs.java:1296) at com.sl.gmsjrtview.GmsRtViewAppManager.initializeData(GmsRtViewAppManager.java:4099)
Display Server
19813: Fixed javascript error thrown by obj_datechooser in IE
A bug in the thin client has been fixed which caused an "unterminated string constant" error message to appear in Internet Explorer's javascript console when the date chooser control was clicked.
Distribution
19692: Core version removed from derivative releases
Due to changes in the build procedures for Enterprise Monitor, BW Monitor, EMS Monitor, and OC Monitor, there is no longer a separate Core version number. The console and About dialogs have been updated to reflect this change. A Build Number has been added to the configuration information in order to identify the build from which a release was generated. The RTView Info function has been modified to reflect this change. Previously, the RTView Version Info argument returned a table with EM version information and the Product Version Info argument returned a table with Core version information. Since there is now only one version, both arguments now return the same thing which is the table previously returned by the Product Version Info argument.
Functions
19150: Warning if subst string arg to SetSub function contains spaces
An error message will now be logged if the Substitution String argument to the Set Substitution function contains spaces. Spaces are not permitted in substitution strings and will likely cause parsing problems elsewhere in RTView, particularly in the thin client. If a function named F has its Substitution String argument set to "$A B" the following error message will be generated: ERROR: function <F>, substitution string $A B contains space To avoid breaking existing configurations that may already define substitution strings with spaces and are working in spite of the potential parsing problems, the function will still define the substitution including any space characters, but will generate the error message. Note that spaces are allowed in the Value argument of the Set Substitution function. That has always been the case and is not affected by this task.
19331: Pivot on Unique Values function upgraded to accept multiple index columns
The Pivot On Unique Values function has been enhanced so that it accepts multiple column names as the Key Column parameter. When multiple column names are used, separated by semicolon, it groups the results by unique occurrences of the combined values of all columns. When only one column is specified, the behavior is the same as before.
19557: Ensure Columns now allows a single value with semi-colons if only one column
The Ensure Columns function has been enhanced to support semi-colons as literals in the Value(s) argument under the following circumstances: 1. There is only one value in the Column(s) argument. 2. The Value(s) argument is enclosed in single quotes. If those conditions are not met, the semi-colon is assumed to be a delimiter for multiple values.
Logging
19256: Log4J on Linux platforms
Log4J functionality was restored on Linux platforms.
Object Library
Composite Object
19503: Fixed builder crash on save when display contains composite with tabular local vars
A problem has been fixed that caused the Builder to throw a ClassCastException if a display contains a composite whose subdisplay creates a tabular local variable.
Control Objects
15035: Image property added to Button Control
The button control (ob_c1button) now supports an Image property. A button can display an image, a label, or both. If both the image and label are set, the image will be to the left of the label. (This order is not configurable). This feature is supported in the viewer and thin client. However the appearance can vary slightly between the viewer and the various supported browsers. When displayed in the viewer and different browsers, you may notice differences in the following: 1. Alignment of the image inside the button: The image may be somewhat closer to the top or bottom edge of the button 2. Vertical alignment of the image with the button's label, if any: The center of the image may be somewhat lower or higher than the center of the label 3. Appearance of the image and label if they don't fit inside the button: In some cases the label may be clipped with a "..." replacing the clipped text, or the label may be clipped with no indication, or the label may wrap and may extend below the button. It is best to leave several pixels of padding between the image and/or label of a button to avoid wrapping or clipping of text in all browsers. Also, check the button appearance in all browsers you intend to support. In Firefox, a button with an image will not depress when it is clicked. However the button's command will still be invoked. In iOS Safari, if the image property is set on a small button (32 pixels or less in width) the button will have square corners rather than rounded corners.
18873: Corrected behavior of listValues property of a ComboBox or a ListBox
A problem has been fixed that prevented the items listed in a combo box or list box control from updating when a new string was assigned to the control's listValues property.
19504: listbox selection no longer clears when list changes
A problem has been fixed in the viewer which caused the selected item in a list box control (obj_c1tlb) to be deselected when the control's listValues property was updated.
19511: Listbox validation bug fixed
A problem in the listbox control (obj_c1tlb) has been fixed which caused it to ignore changes to the listValues property in some cases.
Fx Trend Chart
18167: FX Graphs traceNVisFlag now work even if there is no data
Previously there was a bug with FX Graphs where un-checking the traceNVisFlag did not have an affect unless it was attached to data. This has been fixed.
Tables
19796: Table Rows containing larger images no longer clip
A problem in the display server has been fixed which could cause the heights of table rows containing images to be too small to display the entire image. This problem only occurred if multiple instances of the rtvdisplay servlet were connected to the same display server instance.
Trend Charts
19454: HTML5 chart basic support
BASICS: The html5 trend chart is a pure HTML implementation of an RTView trend graph object. In the RTView thin client, the html5 trend chart provides an interactive, high performance trend chart without requiring the Flash player or other browser plugin. There is no html5 trend chart in the Builder palette. Instead, a new property named webChartFlag has been added to the flex (obj_fxtrend) and swing (obj_trendgraph02) trend graphs. To enable the html5 trend chart the user simply sets the webChartFlag property to true (checked) on a flex or swing trend graph instance. Then, when the display is opened in the thin client in an HTML5 compatible browser, the html5 trend chart will appear in place of the flex or swing trend graph. REQUIREMENTS: Firefox, iOS Safari, and Internet Explorer version 9 or newer support HTML5 and will display the html5 trend chart on displays where enabled. Internet Explorer version 8 and older do not support HTML5 so in those browsers the flex or swing trend chart will be used regardless of the value of the webChartFlag property. PROPERTIES: The html5 trend chart supports all of the major properties available in the flex and swing trend graphs. However several minor properties are not supported or have limited support in the html5 trend chart, as follows: - background styles: Not supported. Except for the bgColor property, none of the background style properties are supported. This includes the properties whose names begin with bg, traceBg, and border. - gradients: Gradient fill is not supported, so none of the properties named *GradientStyle, *GradientMode, or *GradientFlag are supported. - markDefaultSize, markScale: Not supported. These default to 6 and No Scale. The markers for each trace can be configured with the traceNMarkStyle/Color properties. - traceNMarkStyle: The markers for trace N can be enabled by setting traceNMarkStyle > 0 but the shape of the markers (circle, square, triangle, etc) is selected automatically. - traceNType: Supported types are Line and Bar. Event type is not supported. - legendWidthPercent, legendValueMinSpace: Not supported. The legend (if visible) is sized automatically. - scrollbarMode/Size, zoomEnabledFlag: Not configurable. The scroll and zoom features are always enabled and the scrollbar size is fixed. - traceFillStyle: Supported values are None and Transparent. All other values (Solid, Gradient, Transparent Gradient) are converted to Transparent - x/yAxisMajor/MinorDivisions: Not supported. The number of ticks on the x & y axis are selected automatically according to the size of the chart. - yAxisPostion: Not configurable. The y axis position is always outer-left. - yAxisAutoScaleVisTracesOnlyFlag: Not configurable, always true. - x/yAxisFlag, x/yAxisThickness: Not configurable. The x and y axes are always visible with a thickness of 1 and 2 pixels, resp. - traceGroupNBandedFlag: Not supported. Trace groups are supported but banding within groups is not. - alert properties (valueHighAlarm*, valueLowAlarm*, valueHighWarning*, valueLowWarning*): The html5 chart supports one alert threshold per chart. If more than one alert threshold is enabled, the html5 chart will not be used. Also, the alert TraceColor is used only if the traceFillStyle is None. For any other traceFillStlye the alert TraceColor is ignored. The alert TraceStyle, Mark, and MarkColor are ignored. The alarmGlowFlag is not supported. The properties marked as Not supported or Not configurable in the list above will not appear in the Builder's property sheet when a trendgraph object is selected and webChartFlag is checked. In some cases if the properties listed above have been configured on a flex or swing trendgraph instance, then the webChartFlag property will be automatically set to false and hidden in the property sheet, because the html5 trend chart does not support those features. This occurs if any traceGroupNBandedFlag is checked, if more than one alarm threshold is enabled, or if the alarmGlowFlag is checked. Are any new properties supported? The html5 trend chart supports two additional properties that are only visible in the property sheet if webChartFlag = true. - webChartNavigatorTrace: If this property is set to a trace number (a value between 1 and the traceCount value) the html5 chart will display a "time navigator" at the bottom of the chart, just below the x (time) axis. The navigator plots the data for the indicated trace, and highlights the time range that is currently visible in the chart. The highlighted section can be resized or dragged to perform a time zoom or scroll. The navigator is intended to show the user the entire data set and let the user zoom/pan to the time range of interest. By default webChartNavigatorTrace = 0 so the navigator is disabled. - yAxisAutoScaleVisDataOnlyFlag: If this property is checked the chart will compute the y axis scale according to the min & max y values of the visible data points only. This means that the y axis scale may change as the user changes the visible time range by scrolling or zooming. By default the property is unchecked and the y axis is scaled according to the y values of all of the data points, visible or not, which matches the behavior of the swing and flex trendgraphs. The Builder does not allow the webChartFlag property to be attached to data. This is by design, since the flag's value is expected to be constant. BEHAVIOR: In addition to the properties listed above, there are some behavioral differences between the html5 trend chart and the flex/swing trend graph as follows. - Legend: The legend does not show trace point data (y) values. Data values are only shown in the mouseover tooltips (if cursorFlag = 1). The cursor always snaps to the nearest data point, it does not show interpolated values between data points. Trace labels longer than 200 pixels are wrapped in the legend, and labels longer than 150 pixels are clipped in the tooltip. - Y axis autoscaling: Given the same y data values, the html5 trend chart may choose a different value range for the y axes in autoscale mode as compared to the other trendgraphs, because somewhat different algorithms are used. - Reset button: If the user changes the chart's visible time range, via the scrollbar or navigator or by dragging the cursor to perform a zoom, then a button labeled Reset will appear in the upper left corner of the plot area. A click on this button will reset the time axis to its original settings. The chart will also resume shifting to show the newest trace points, unless the timeRangeBegin/End properties are set. - Data point grouping: The html5 trend chart makes use of a feature known as data grouping to enhance performance when a trace has many data points. With data grouping, the chart plots a single point using the average y value in cases where otherwise multiple points would be plotted on the same x pixel coordinate. When data grouping is in effect, the chart's tooltip will display a start time and end time (rather than the usual single time value) to indicate the time range of the averaged data points, for example: 05-Mar 12:35:00 ~ 05-Mar 12:45:00 [Notes: The data point grouping feature is enabled automatically and is not configurable. Also data gropuing is performed independently of (and possibly in addition to) any data condensing or compaction that has already been applied by the RTVuew cache data source or the historian. Also the maxPointsPerTrace property (3200 in the test1 display) is applied to the raw data, before any data grouping is applied.} The legendTimeFormat is used to format the date/time strings in the tooltip. If that property is blank then the timeFormat property is used instead, but if the string contains a newline it is replaced with a space character to avoid making the tooltip overly tall. - timeShift: The html5 trend chart does not attempt to keep the tick marks on the time axis aligned on even multiples of the timeShift value, in the case where timeShift > 1. ENABLING / DISABLING: The html5 trend chart can be enabled for all obj_fxtrend (flex) instances by adding the following rule to an rtview stylesheet (.rts) file loaded by the display server: obj_fxtrend { webChartFlag : 1 } Similarly, the html5 trend chart can be enabled for all obj_trendgraph02 (Swing) instances by the following rule: obj_trendgraph02 { webChartFlag : 1 } See the documentation for more information on using RTView stylesheets. If a stylesheet is used note that the webChartFlag value can still be overridden and set to zero (false) on individual instances. Also, even if webCharFlag is set on all instances, the flex or Swing trendgraph will still be used if a display is opened in Internet Explorer 8 or older, or if certain properties not supported by the html5 chart (as listed above) are configured on a specific trendgraph. To disable the html5 trend chart globally, regardless of the webChartFlag value on individual objects, specify the -nohtml5 argument on the display server command line, or use the equivalent property. Alternatively, add the following line to the rtvdisplay.properties file then rebuild and deploy the rtvdisplay.war file: HTML5Enabled=false Finally, the html5 chart can be disabled in a specific browser window by appending nohtml5=true to the URL, for example: http://myserver/rtvdisplay/getdisplay.jsp?display=test1&nohtml5 http://myserver/rtvdisplay/panels.jsp?file=myapanels.xml&nohtml5 KNOWN ISSUES/LIMITATIONS: - After zooming or scrolling, the time axis labels may briefly be misaligned or overlap. They should be drawn correctly on the next refresh. - The chart's tooltip may overlap the Reset button making it difficult to click the button. Moving the mouse a bit will correct this problem. - Like the flex chart, the web chart will display all timestamps using the local time zone. This may cause user confusion if the display server is in a different time zone. - Performance is affected by the number of traces, trace points, use of trace line shadows, trace line thickness, trace markers, trace fill, and other properties. Performance is also affected by the browser and version, and the CPU speed of the client host system. - If any of the chart's graphical properties are changed while the chart is displayed (eg. the traceFillStyle is toggled via a checkbox control) the chart is rebuilt in the thin client, which in turn resets the chart's time range (as though the Reset button was clicked). - Scrolling: If the mouse is moved below the bottom of the chart while dragging the scrollbar, the scrolling will stop. This is unlike the behavior of other rtview objects, which will continue to scroll until the mouse button is released. - Drilldown from trace points: If traceFillStyle is not "None" (i.e. trace fill is enabled) and multiple traces share the same Y axis, then it is not possible to click on a point belonging to trace N if the fill area of a higher numbered trace is drawn over that point. - When yAxisLogFlag = 1 and the chart has multiple y axes and traces, some y axis labels may show ??? rather than numeric values. This is rare. - Since the html5 trend chart does not support legendWidthPercent, the width of each chart's legend will vary according to the trace labels. This makes it difficult to create multiple trend chart instances on the same display whose time axes are all the same length, even if the charts all have the same width. (A single chart in stripchart mode may be more appropriate in those cases). - On a touch interface, a swipe will scroll the chart left or right. To move the cursor without scrolling, tap the location to which you want the cursor to move. - On a touch interface, a pinch-open gesture in the plot area, scrollbar, or navigator will zoom the chart's range in to the pinched range. A pinch-close gesture will zoom out to the pinched range. The pinch-close operation may be difficult to use. A tap on the Reset button gives a better zoom-out experience. MISC: Here is a complete list of the obj_fxtrend properties that are hidden if webChartFlag is checked: legendBgGradientFlag legendWidthPercent markDefaultSize traceBgColor traceBgGradientFlag traceGroupNBandedFlag (for each trace N) yAxisAutoScaleVisTracesOnlyFlag yAxisThickness yAxisPosition yAxisFlag xAxisFlag yAxisMajor/MinorDivisions xAxisMajor/MinorDivisions xAxisThickness Here is complete list of the obj_trendgraph02 properties that are hidden if webChartFlag is checked: borderPixels labelMinTabWidth legendWidthPercent legendBgGradientMode legendBgGradientColor2 legendValueMinSpace markDefaultSize markScaleMode outlineColor scrollbarMode scrollbarSize zoomEnabledFlag timeRangeOfHistory traceBgColor traceBgGradientMode traceBgGradientColor2 traceBgImage yAxisAutoScaleVisTracesOnlyFlag yAxisFormat yAxisFlag yAxisPosition yAxisValueLabels yAxisMajor/MinorDivisions xAxisFlag xAxisMajorDivisions For each trace N: traceNValueAlarmStatus traceNValueAlarmStatusTable traceNValueHistoryFlag traceGroupNBandedFlag traceNYAxisGridVisFlag traceNYAxisMinLabelWidth traceNYAxisValueLabels traceNYAxisVisFlag traceNYAxisAutoScaleMode traceNYAxisValueMin traceNYAxisValueMax
Platform Support
15870: Improved management of Windows file permissions
The RTView Windows installers have been changed in the following ways: - The "Registration" start menu launcher now runs as administrator - During installation, the following directories are given write permissions for all Authorized Users: demos servlets servers custom
19592: Support Chrome as a broswer for the thin client
The thin client is now supported in Chrome, on Windows. The version tested was Chrome 35.0. Chrome was not tested on iOS or Android.
RtvCacheDoc
19327: Sybase schemas updated to conform to Sybase requirements
All historian database schemas for Sybase have been updated with the following syntax changes: - All non-index columns now set the "NULL" parameter - The use of the BIT type for boolean columns has been changed to SMALLINT, to allow the use of boolean columns in indexes. If you have existing database tables for storing historical data, you should not need to make any changes to them, unless you have seen errors EM server logs that suggest that one of the above changes would resolve the problem..
Viewer - Applet
19308: Support applets in Java 1.7 with all permissions.
In previous releases, the Registration and Viewer Applets failed to run using Java 1.7 due to a security error. This has been fixed. The Registration and Viewer jars have been enhanced to include the Application-Name and Permissions parameters in their meta-data in order to pass the Applet security check. Note that the Viewer applet Permissions parameter is set to all-permissions. The Registration applet Permissions parameter is set to sandbox.
Version 6.3.1 Release Notes
Data Sources
JMS Admin Data Source (for TIBCO EMS only)
19297: ConsumerInfo.Details metrics made optional (now disabled by default)
Task 19257 added 12 new columns with information from the com.tibco.tibjms.admin.ConsumerInfo.Details class methods to the TIBCO EMS Administration data source Consumer table.The query for this data can be slow, and so by default these columns have been removed from the table. To include these columns in the Consumer table, use the following command line argument: -queryCIDetails Or the following property: sl.rtview.jmsadm.queryCIDetails=true Note that enabling this option will slow down the EMS metrics queries on servers with a large number of consumers.
Version 6.3.0 Release Notes
Alerts
18805: Bug loading alert definitions after multiple HA failovers fixed
In previous releases, a bug with HA caused some alerts not to load in the backup server in the case where the primary server in the pair had failed multiple times without the backup server rebooting and the servers were configured with multiple alert definition files. This has been fixed.
19032: Fixed synch bug in alert ds for new data only listeners
In previous releases, a synchronization bug caused some updates from alert commands not to be applied to the new data only listeners in the case where several command updates were executed at the same time. This has been fixed.
19175: Fixed memory leak when no "new data only" alert table listeners
In previous releases, the Alert data source leaked memory if there were no data attachments to the AlertTable with either the New Data Only option selected or a row filter. This has been fixed.
Builder
18377: New mechanism to specify template for new displays
The builder supports a new property named displayTemplate. It allows the user to specify an rtv file that should be used as the template for all new displays. The user can make any changes (e.g. add objects) to the template, and the builder will prompt for a new file name when the user attempts to save the changes, so the template remains unchanged. Command-line example: run_builder -displayTemplate:MyTemplate.rtv Property file example: sl.rtview.displayTemplate=MyTemplate.rtv
Customization
18658: Support customization of user/role manager classnames
In previous releases the java class names for the custom user manager and role manager were hard-coded to MyUserManager and MyRoleManager, respectively. In this release, MyUserManager and MyRoleManager are still the default class names but they can be overridden on the command line via two new options, as shown in the following example: run_viewer -customUserManagerClassName:com.xyz.UserMgr -customRoleManagerClassName:com.xyz.RoleMgr The custom classnames can also be specified in a properties file, as follows: sl.rtview.customUserManagerClassName=com.xyz.UserMgr sl.rtview.customRoleManagerClassName=com.xyz.RoleMgr
18700: Role substitutions now queried on login
The display server will now call GmsRoleManager.getSubstitutions(roleName) every time a user logs in or changes roles. This will allow a custom role manager to change the substitutions returned for a specific role without requiring a restart of the display server. In prior releases, the method was only called once for each unique role name.
Data Historian
18791: New property to set the character limit of text index columns
The historian supports a new property named charlimitindex to specify the length of each text (VARCHAR) column that is an also index column in the corresponding cache. For example, if -charlimitindex:70 is specified on the command line when starting the historian, then for each text column that is an index column in a cache, the historian will add a VARCHAR(70) column to the database table it creates to persist the cache. If the charlimitindex property is not specified then all text columns, including index text columns, will use the size specified by the charlimit property. If the charlimit property is not specified, then all text columns will be created as VARCHAR(50). For example, if the following properties are specified on the historian command line then all index text columns will be created as VARCHAR(70) and all non-index text columns will be created as VARCHAR(200): run_historian -charlimit:200 -charlimitindex:70 The charlimitindex property is useful in cases where the database limits the total width (in characters or bytes) that can be used in an index. This includes DB2, Sybase, and Oracle.
18854: New property to skip check for history/history_s
The following property can now be specified to prevent the Historian from attempting to create or modify the HISTORY and HISTORY_S tables sl.rtview.historian.historyTableName=__none (Note that the value __none begins with two underscores). By default the Historian will create the HISTORY and HISTORY_S tables and, depending on other properties, may periodically attempt to delete old rows from those two tables. Since neither table is used in EM, it is convenient to prevent the historian from attempting to create or modify those tables.
19131: Data Historian Backlog property
The historian now supports a property named local_backlog. This property can be used to help avoid loss of data during busy periods when the historian is receiving data from a data server at a higher rate than it can be stored in the database. If the local_backlog property is set, the historian will use its local heap space to keep the backlog of data rows to be stored in the database. If the local_backlog property is not set then the row backlog is kept in the data server, where it may be discarded after a relatively brief time if the historian is unable to process it. By default the local_backlog property is not set. The property can be set as follows on the command line: run_historian -local_backlog or in a properties file: sl.rtview.historian.local_backlog=true The local backlog will keep a minimum of 50,000 rows of data. If the Oracle server jvm is used, the backlog will grow as large as the available heap space allows. The following message appear in the historian log each time the backlog is increased by 1000 rows: backlog: increased to N rows or decreased by 1000 rows: backlog: decreased to N rows where N is the current number of rows in the backlog. If the incoming rate of data exceeds the rate at which data can be stored in the database for an extended period of time, the backlog may need to be trimmed in order to avoid an OutOfMemory exception in the historian. If that occurs, the following message appear in the historian log: backlog: discarded N rows If this message is seen frequently, then it may be necessary to adjust the data server, historian, and/or database configuration to reduce the incoming data volume or increase database throughput. (That topic is beyond the scope of this note).
Compaction
18655: Historian smoothing and compaction on non-US date strings
Historian smoothing and compaction no longer fail on non-US date strings in non_US timezones.
19100: Extraneous debug message removed from Advanced Compaction
A leftover debug message was in the Historian code at the highest -compactionverbose:2 level. This message was benign and has been removed.
19101: Improved multi-thread support for Advanced Compaction
A better method for multi-thread support for Advanced Compaction was implemented. Messages like ?database connection busy, skip? should not appear.
Data Sources
Cache Data Source
18670: Gaps in extend-by-sql cache data attachment fixed
A bug has been fixed that caused time gaps to appear in data supplied a cache attachment configured as follows: Cache : MyCache Table : history, or history_combo Time Range : <any value larger than the time range of data available in the cache table above> Extend with SQL : on Begin Time: <blank> End Time: <blank> Update Once: off (if Table = history) Update : On Condense or Always (if Table = history_combo) A cache attachment with that configuration will periodically update its listeners, as new data is added to the cache history table. In prior releases, a time gap would eventually appear between the most recent data retrieved by the Extend with SQL query and the oldest data in the cache history table. This is fixed.
18707: Enhance rowExpiredIndexColumns behavior in Mark+Delete mode
The row expiration feature of the cache data source has been enhanced to allow the rowExpiredIndexColumns and the rowExpirationTimeForDelete properties to be used in combination. If a cache is configured as follows ... rowExpirationMode = 3 (Mark + Delete) rowExpirationTime = -1 rowExpirationTimeForDelete = any value > 0 rowExpiredIndexColumns = any subset of the cache's index columns ... then if a row X exists in the cache's current table and that row's values in the columns specified by the rowExpiredIndexColumns are not matched in the data table applied to the cache's valueTable property, the row will be marked as Expired. Subsequently, if row X is not updated again before the time specified by the rowExpirationTimeForDelete property has elapsed then row X will be deleted from the cache's current table.
18737: Corrected extra rows in history_condensed table
In prior releases the history_condensed and history_combo tables of a cache with the condenseRowsFlag = true would contain 2 rows per condense interval per index, instead of 1 row as expected, if the cache's condenseRowsRawDataTimeSpan < condenseRowsInterval * 3. This is fixed.
JMS Admin Data Source (for TIBCO EMS only)
19257: Gather Consumer Details information
The TIBCO EMS Administration data source Consumers table has been enhanced to include 12 new columns with information from the com.tibco.tibjms.admin.ConsumerInfo.Details class methods: curMsgSentCount (long) - getCurrentMsgCountSentByServer() or -1 if unavailable totalMsgSentCount (long) - getTotalMsgCountSentByServer() or -1 if unavailable curMsgSentSize (long) - getCurrentMsgSizeSentByServer() or -1 if unavailable destinationPrefetch (int) - getDestinationPrefetch() or -1 if unavailable prefetchDeliveredCount (int) - getPrefetchDelivered() or -1 if unavailable elapsedSinceLastAck (long) - getElapsedSinceLastAcknowledged() or -1 if unavailable elapsedSinceLastSent (long) - getElapsedSinceLastSent() or -1 if unavailable routeName (String) - getRouteName() or blank if unavailable sessionAckMode (String) - getSessionAcknowledgeMode() or Unknown if unavailable ** totalMsgAckCount(long) - getTotalAcknowledgedCount() or -1 if unavailable isActive (Boolean) - isActive() or false if unavailable isSystem (Boolean) - isSystem() or false if unavailable ** The sessionAckMode column contains a String created from the value returned by getSessionAcknowledgeMode() as follows: TibjmsAdmin.SESSION_UNKNOWN_ACKNOWLEDGE: "Unknown Ack" TibjmsAdmin.SESSION_XA: "XA" TibjmsAdmin.SESSION_TRANSACTED: "Transacted" TibjmsAdmin.SESSION_NO_ACKNOWLEDGE: "No Ack" TibjmsAdmin.SESSION_AUTO_ACKNOWLEDGE: "Auto Ack" TibjmsAdmin.SESSION_DUPS_OK_ACKNOWLEDGE: "Dups OK Ack" TibjmsAdmin.SESSION_CLIENT_ACKNOWLEDGE: "Client Ack" If getSessionAcknowledgedMode() returns a value not listed here, the sessionAckMode will be "Unrecognized Type(x)" where x is the value returned by getSessionAcknowledgedMode().
19263: New option to disable FT discovery
The TIBCO EMS Administration data source has been enhanced with a new command line option: -disableFTDiscovery This option is not used by default. When this option is NOT used, for each server that is defined in the servers.xml or discovered using Hawk or Routes, RTView queries the EMS Server for its fault tolerant URL. The URL returned by the EMS Server is the value used in the ft_active setting in the EMS Server configuration. If RTView does not already have this URL in the ServerTable, it will be added and a connection to it will be made. This can cause duplicate entries in the ServerTable in the case where the server was specified in servers.xml using a different URL than was used in the ft_active field. For example, the URL in ft_active uses a host name but the servers.xml entry for the same server uses an IP address. Or, the servers.xml uses a DNS alias, but the ft_active uses a host name or ip address. When this option IS used, RTView will not query each EMS Server for its fault tolerant URL. Instead, it expects that all fault tolerant EMS Server pairs are added to servers.xml as compound urls (ex. tcp://myhost:7222,tcp://myhost2:7224). For each server in the compound url, the fault tolerant url will be set to the other server in the compound url. No error checking is done to confirm that the 2 urls listed are actually a fault tolerant pair. It is up to the user to be sure that the servers.xml information is correct. In addition to the command line option, you can also use the following property to enable this feature: sl.rtview.jmsadm.disableFTDiscovery=true
JMS Data Source
19176: Synchronization bug fixed
In previous releases, the JMS data source had a synchronization bug that could cause occasional data updates to be missed. This would only happen in the case where multiple updates for the same listener came in almost simultaneously. This bug has been fixed.
JMX Data Source
18747: Support for connecting to multiple security enabled WAS servers
It is now possible to connect to more than one Secure WAS Server via JMX.
TIBCO Hawk Data Source
18796: Support Hawk 5.0
The Hawk data source has been enhanced to support Hawk 5.0. In order to use Hawk 5.0, you must run with java 1.7+. If Hawk 5.0 is configured for log4j logging, you will need to add your log4j jar to the RTV_USERPATH. RTView does not support AS (DataGrid) transports. Only RVD and EMS transports are supported for Hawk 5.0. The Hawkspot sample microagent application does not work with Hawk 5.0.
18820: Hawk DS now requesting for retransmitted alerts properly
In previous releases, there was a bug with requesting existing alerts after an agent expired and then came back. This has been fixed.
19130: Hawk data synchronization improvement
In previous releases, a synchronization bug in the hawk data source occasionally resulted in some data being missed. This has been fixed.
TIBCO Rendezvous Data Source
19177: Synchronization bug fixed
In previous releases, the RV data source had a synchronization bug that could cause occasional data updates to be missed. This would only happen in the case where multiple updates for the same listener came in almost simultaneously. This bug has been fixed.
Display Server
18663: Thin client now supported in in cross-domain iframe
In prior releases, if a web page in domain xyz.com contains an iframe that loads the thin client via getdisplay.jsp in a URL for domain abc.com, security exceptions occur and disable the thin client. This is fixed.
18689: Support updates to drillDownColumnSubs on table
The drillDownColumnSubs property of the table object (obj_table02) can be attached to data. However, in previous releases the thin client only read that property when the display was opened and ignored subsequent updates from the data attachment. This has been fixed.
18694: Tooltips now accomodate quote and bracket characters
In prior releases, if an object's mouseOverText property was assigned to a string containing a ', ", <, or > character, the thin client would not render the tooltips properly and sometime extraneous text characters would appear on the display. This is fixed.
18825: Display server memory leak fixed
A memory leak has been fixed in the display server that caused memory to grow at a small rate for each new session.
18893: Global subs set in login no longer reset after navigation
The following problem in the thin client has been fixed: If a global variable $x is initialized to a value of (say) 100 via a login sub defined in users.xml or roles.xml, and then $x is set to a value of 200 by user interaction with a display, the value of $x will incorrectly revert to 100 when the user later navigates to a new display.
Functions
19143: GroupBy result now correct when possible index combos > 2 ^ 31
A bug in the GroupByTimeAndUniqueValues function has been fixed which caused rows to be missing from the result in the case where the input table has multiple index columns and the union of all possible combinations of the index values present in the table exceeds 2^31
Object Library
18713: Support animated GIFs in some objects in thin client
The thin client has been enhanced to support animated gif images on obj_rect_il (simple label object), obj_ind_limits (indicator object with 4 analog alert limits) and obj_ind_multi (indicator object with multiple discrete alert values). In prior releases, only the first frame of an animated gif would appear on these objects. A new property named imageAnimatedFlag has been added to each of these objects. This property must be checked (set to true) in order for the animation to occur in the thin client. To avoid excessive CPU usage in the display server, the frame delay in all animated gif images should be 50 msec or larger. If the object's label string overlaps with the image, then in the thin client the string will be obscured by the image. To avoid this limitation, set the labelTextPosY property to Outside Top/Bottom or set the labelTextPosX property to Left or Right. For obj_ind_limits and obj_ind_multi, if the value string overlaps with the image then in the thin client the string will be obscured by the image. To avoid this limitation, set the valueTextPosY property to Outside Top/Bottom or set the valueTextPosX property to Left or Right. This feature is only supported in the thin client. In the builder/viewer, the animation will only update once every two seconds or after a mouse event.
Tables
18712: Support animated GIFs in table cells in thin client
An animated gif image will work properly in the thin client if used in a cell value in obj_table02. In previous releases, only the first frame of an animated gif was displayed. To avoid excessive CPU usage in the display server, the frame delay in all animated gif images should be 50 msec or larger. Note that animated gifs are still not supported in the builder/viewer, where the animation is only updated every two seconds or after a mouse click. This is a known limitation that is not addressed by this task.
Platform Support
18746: Table index names shortened for Oracle and Sybase
The historian will now keep index names to 30 characters or less on Oracle and Sybase to avoid "identifier is too long" errors from those databases.
RTView Display Panel
18722: Panel can now be minimized by default in thin client
The rtvDisplayPanel tag in a PANELS.ini file now supports an attribute named minimized. If this attribute is set to true, as in the north panel in the following example, then the panel will initially be hidden in the thin client: <?xml version="1.0" ?> <panels xmlns="www.sl.com" version="1.0"> <rtvLayout title="Panel Example" dividers="true"> <rtvDisplayPanel region="north" minimized="true" display="title.rtv"/> <rtvDisplayPanel region="center" name="main" display="test1.rtv"/> </rtvLayout> </panels> The minimized attribute is only effective if dividers="true" is specified in the rtvLayout tag, as in the above example. The minimized attribute only works in the thin client, it is ignored in the Viewer. A minimized panel can be made visible by clicking in the dark area in the center of its divider bar.
Reporting
19178: Report generator now available for EM
In previous releases, the report generator could not be used in EM. This has been fixed.
Viewer
18428: Support tabbing into composites in Viewer
The Viewer now supports an option -tabcomposites:true which allows the keyboard focus to be moved to controls inside obj_composite instances, via the Tab key. If the option is not specified, the Tab key traversal does not include controls inside composites, which was the behavior of the Viewer in all previous releases. The thin client is not affected by this option, since it has always supported keyboard traversal into composites.
Version 6.2.1 Release Notes
Alerts
18671: alertTableValid correct after multiple HA failovers
In EM 1.2, a bug was introduced with HA that caused the alert table to stop receiving updates from backup servers in the case where the primary server in the pair had failed multiple times without the backup server rebooting. This has been fixed.
Data Sources
Cache Data Source
18563: improve perf when incoming data not in time order
The performance of the cache data source has been improved in the case where a cache is configured to keep a history table and the cache's timestamp column is contained in the data tables that are applied to the cache (rather than being added by the cache itself) but the values in that timestamp column are not always in ascending time order in the incoming data tables. The performance improvement is most noticeable when the history table is large, the cache's allowDuplicatesInHistoryFlag property is set to false, and new data is applied to the cache frequently.
JMX Data Source
18616: synchronization bug when multi-threading is enabled
In the previous release, if the JMX option to Use Multile Threads for Commands and Polled Queries was enabled, a synchronization problem caused data attachments to multiple connections to miss some updates and duplicate others. This has been fixed.
SNMP Data Source
18551: Improvements for table index handling and data types
The SNMP data adapter was unable to return SNMP tables with non-integer indexes. The SNMP data adapter now treats table indexes as arbitrary strings and assigns an integer index value to each unique index string. Previously all SNMP variables were returned as strings. Now each variable is returned with a reasonable java type (eg, 32 bit counters are mapped to longs). Note that the new adapter requires more concise OID specifications.
Display Server
18660: thin client resize breaks scrolling in table
Beginning with version 6.0.2 in the thin client, if the user resizes the browser window, a table object may have unused space below the bottom row even though there are more data rows that could be displayed, and may incorrectly display empty cells in columns at the right edge of the table. This problem is fixed.
Functions
18569: enhance Set Subs By Lookup to add $ to column names
The Set Substitutions by Lookup function has been enhanced with a new argument, Add Dollar To Column Names. By default, the value is 0 and the function behaves as it did before. If Add Dollar To Column Names is set to 1, each column after the Key column is used to set a substitution regardless of whether or not it starts with $. For columns that do not start with $, a $ is added to the beginning of the column name when it is used as a substitution name.
18589: Combine Multi-Server Tables now keep data after server restart
In previous releases, the table returned by the "Combine Multi-Server Tables" function was cleared when it received the first update from a reconnecting data server, so the table was missing the rows from all the other servers until each of those servers sent another update. This problem has been fixed.
18591: Last table rows function returns incorrect value, may deadlock
In 6.2.0 the Last Table Rows function returned an extra row if the Index Column Names argument was blank. If the function was used in certain cache configurations, it could also deadlock. Both problems are fixed.
18602: Mark Time Gaps func throws array bounds exception.
A bug in 6.2.0 has been fixed that caused the Mark Time Gaps function to throw an ArrayOutOfBoundsException if a time gap was found in an integer data column.
General
18581: cache history query not run if no cache props attached to data
A bug has been fixed that prevented the initial sql query from being run to fill cache history tables in some configurations. The problem occurred if a cache was configured with constant values for all of its properties and either the cache had no current data or the current data was provided indirectly by a Store Table in Cache function rather than a data attachment on the cache's valueTable property.
Object Library
Charts (General)
18609: Mouseover on graph objects in rich client fixed
The mouse over was broken for all graphs except the trendgraph in RTView 6.2. This has been fixed.
Tables
18545: New drilldown select mode to update ddColumnSubs at data update
The drillDownSelectMode property on obj_table02 now supports a new mode of 2 (Element Only + Auto Update) in addition to the existing modes of 0 (Anywhere) and 1 (Element Only). When drillDownSelectMode is set to 2 the table's command is performed automatically when the row selection changes after a data update. The new mode is available only if the table's command property is configured to perform a drilldown to the current display in the current window, and if the table's indexColumns property is set to a nonempty string. The new mode is useful in cases where the substitutions set by the table's drilldown command need to be updated if some of the selected rows in the table are removed by a subsequent data update.
18546: Support deselecting all rows in a table
The table object (obj_table02) now supports a property named clearSelection. When the property is set to a value of 1, all rows in the table are deselected. When the property is set to a value of 2, all rows are deselected and the table's action or its drillDownTarget are invoked. Typically, a table's clearSelection property would be attached to a local variable that is set by a control object on the same display. For example, say you want a to add a Clear Selection button to a display that contains a table that supports multiple row selection. This could be configured as follows: 1. Add a local variable named $clearSelection with an initial value of 0. 2. Create a button object, with these property values: label : "Clear Selection" valueToSet : 1 varToSet : <attached to the $clearSelection variable> 3. Set these table object's properties: clearSelection : <attached to the $clearSelection variable> 4. If the table object has a drilldown command, or a drillDownTarget, add this to its Drill Down Substitutions: $clearSelection : 0 The last step is required to reset value of the $clearSelection variable to zero when the user selects a row in the table.
18554: New option to not display newlines in row data
The table object (obj_table02) has been enhanced to support removing line breaks from the text displayed in the table cells. To enable this feature, turn on the removeLineBreaksFlag property in the Data Format category. This option will only remove line breaks from the table cell, not from the drill down values. For example, if you have your drillDownColumnSubs setup to set a substitution from a cell with a line break, the substitution value will contain the line break regardless of the removeLineBreaksFlag. This works correctly in the Viewer Application. In the Thin Client, the drill down substitution will not contain the line break if the removeLineBreaksFlag is set. See the PAL for 18582 for more information.
Version 6.2.0 Release Notes
Alerts
18553: Custom object properties and event attributes are now restored
In previous releases, persisted custom event attributes and alert object properties were not restored correctly. This has been fixed.
18577: Timing problem with persisting disabled state during terminate
After the addition of task 18308, the alert engine sometimes incorrectly persisted the alert engine state as disabled during terminate or fail-over. This has been fixed.
Builder
18513: Icon Properties dialog requires Apply or you lose data
A problem has been fixed in the Builder which required the user to click Apply before closing the Icon Properties dialog after configuring a object grid with Icon Class Name = obj_composite and changing the rtvName property value. If the user simply clicked OK in that case, the changes were lost.
18514: Cannot display data for attachment with blank data server sub
A bug has been fixed in the Builder which caused the Display Data dialog to show no data, when a data attachment was selected whose Data Server field was assigned to a substitution whose value was an empty string.
Customization
18344: New isDbConnected method in custom command handler
A new method has been added to the GmsRtViewCustomCommandHandler class to test the status of a SQL database connection in the local process: /** Returns true if the specified database connection is connected. Note that * this method has 2 limitations. First, it only works for databases accessed * via the sql ds in the local process (ie not in a separate data server). Second, it * returns the current status which is only updated when a query is run against * that connection. To keep the status current, add a data attachment to query * the first row in a table in each database you want to call this method on. * @param dbName The name of the database to test. * @return True if this process is connected to the database. False otherwise. */ public boolean isSqlDbConnected (String dbName)
Data Server
18018: Support active standby mode in backup data server
The data server supports a new property named group_standby_mode that affects the behavior of the backup data server in a redundant HA server group. The values for group_standby_mode are "passive" and "active". If no value is specified the default value is passive. In prior releases, only passive standby mode is supported If group_standby_mode is set to passive, the backup server does not activate the rtview global, cache, or alert data sources at startup. Instead it activates those data sources only if it leaves standby mode because the primary server fails or is unavailable. Later when the primary server is again available, the backup server returns to passive standby mode by deactivating the alert, cache, and global data sources.. If group_standby_mode is set to active, the backup server activates the global and cache data sources at startup, so it will immediately begin to collect data and store it in caches as configured in the global and cache definition files. The backup server does not activate the alert data source at startup, instead it activates alerts only when it leaves standby mode, because the primary server fails or is unavailable. Later when the primary server is again available, the backup server returns to active standby mode by deactivating the alert data source, but it leaves the global and cache data sources activated. The intention of active standby mode is to avoid missing data in caches that might otherwise occur during the failover of the primary server to the passive backup server, while the backup server is activating the global and cache data sources. Note that there is some cost associated with active standby mode, because both the primary and backup server will be collecting data and storing it in caches. For example if a cache definition file defines SQL queries to collect data, then if active standby mode is used both servers will always be performing those SQL queries, but if passive standby mode is used then only the primary server would perform the queries. Note that the alert data source is inactivate in the backup server in both active and passive standby mode, to avoid generation of duplicate alerts by the primary and the backup servers. The group_standby_mode property can be specified as follows, where X is either passive or active: On the command line: run_dataserver -group_standby_mode:X ... Or in DATASERVER.ini: group_standby_mode X Or in an rtview properties file: sl.rtview.dataserver.group_standby_mode=X If no value is specified for group_standby_mode, passive is the default.
Data Sources
Cache Data Source
17554: add schemaTableStrictFlag to apply schema always
By default, if a cache has a schemaTable with N columns and a data table with N columns is applied to the cache, but the schema table's column order is different than the data table's, the schema is not applied and the table's columns will be stored in the wrong columns of the cache. To address this problem, a property named schemaTableStrictFlag has been added to the cache definition object (obj_cache_table). If this property is checked for a cache which has a schemaTable, then the schemaTable will be applied to all incoming data tables before they are stored in the cache even in the case where the data table and the schema table have the same number of columns. If this flag is unchecked (the default), then the schema is applied only when the data table and schema table have different numbers of columns, as was the behavior in all previous releases. Note that applying the schema in all cases will incur additional cpu overhead when updating a cache, if incoming data tables have a large number of columns and a high update frequency. So the flag should only be checked if it is possible for a data table to have the expected number of columns but those columns may be in the wrong order.
18331: max rows not applied to 1st update if extending cache by sql
A bug has been fixed in the cache data source that prevented the Maximum Rows limit in a cache data attachment from being applied to the first data update if that attachment also had the Extend with SQL option checked.
JMX Data Source
18459: Make JMX datasource connections multiple threaded
The JMX data source has been enhanced to support using multiple threads for commands and polled queries. This enhances performance in the case where some JMX servers are slow. Without this feature, a single slow JMX server can delay the data updates from all of the JMX servers. By default, this option is disabled. To enable multiple threads, select the Use Multiple Threads for Commands and Polled Queries on the JMX Administration tab of the Application Options dialog. You can also enable or disable this feature with the following command line option: -jmx_use_multiple_threads:true/false When enabled, the thread that created the jmx connection will be used for all commands and polled queries on that connection. The polled queries will initiated based on the poll interval for the data attachment and each connection will update their listeners asynchronously when the data becomes available. Note that RTView will create one thread per connection, so this is not a practical option for cases where hundreds of connections are defined. When disabled, the commands and polled queries will behave as they did in previous releases. In this case, the polled queries are executed synchronously and the listener is not updated until the data from all connections in the data attachment has returned. For example, a data attachment for a table has * in the connection field and there are 5 defined jmx connections. If this multi-threading option is disabled, every update period or poll interval, RTView will synchronously query all 5 jmx connections and then update the listener once with a table containing the data for all 5 connections. If this multi-threading option is enabled, every update period or poll interval, RTView will asynchronously initiate queries on all 5 jmx connections. As each query returns data, the listener will be update with data for that connection. Therefore the table will be updated 5 times per update period or poll interval with each update only containing the data for one connection. Due to this difference in how the listeners are updated, users need to confirm that the listeners for their jmx data attachments to multiple connections can handle partial updates. - If you want to see all connections in a single table, you must cache the data. The indexColumnNames property on the cache must be configured correctly. - For existing caches attached to jmx data that want to use this feature, users should confirm that the indexColumnNames property is properly configured. Since the previous behavior wrote all of the jmx data on every update, a cache could have previously worked correctly even if the indexColumnNames property was not configured correctly. When using the multi-threading option, this will no longer be the case. - For existing functions attached to jmx, users must confirm that the function will operate as expected when receiving update containing only one connection at a time. For example, a Join function attached to jmx might assume that all connections are present in every update. If your function requires all of the connections in each update in order to operate correctly, first put the jmx data into a cache and then use the cache as input to the function.
SQL Data Source
18535: add option to not try ODBC connection for undefined database
In all prior releases, if an sql query or command is executed that references a database name XYZ and there is no definition of XYZ in OPTIONS.ini then RTView attempts to establish an ODBC connection to XYZ. In this release a new coomand-line option has been added to change this behavior: -sqltryodbc:false The option can also be specified in OPTIONS.ini: sqltryodbc false or in a properties file: sl.rtview.sql.sqltryodbc=false If this option is specified and an sql query or command is executed that uses database XYZ and there is no definition of XYZ in OPTIONS.ini, then no ODBC connection attempt will be made and instead the following error message will appear in the console: Undefined SQL database XYZ This option is useful in cases where ODBC connection attempts cause a JVM crash, which has been reported in some JVM versions. Note that RTView will still make an ODBC connection if a database has the "Use ODBC Driver" option checked in the SQL tab of the options dialog, even if the -sqltryodbc:false is specified.
Drill Down
18516: Cannot edit drilldowns with data attachments to functions/vars
A bug in the Builder's Drill Down Properties dialog has been fixed that prevented changes made to existing data attachments from being saved when the user clicked OK.
Functions
18408: add column merge option to Join Outer
The Join Outer function has been enhanced to support a "merge" option for the Column Include Mode argument, in addition to the existing "all", "left", and "right" options. Like the "left" option, the merge option uses the column names and values from the column(s) specified in the Left Column Name argument, but also the "merge" option will include the value from the column(s) specified in the Right Table Column Name in the case where there is no matching index in the left table, rather than null values. The merge option is intended for use with Outer Join Type = Full. The merge option is useful for ensuring that the full outer join result contains only one set of the join columns and that all of those columns contain valid values for all rows in the result.
18418: Join function result can have bad values and cause OutOfMemory.
The join and combine functions now function correctly when attached directly to cache tables that are updating at the same time the function is updating. The performance of both functions has been improved.
18540: Replace function should allow replace with empty string
The eval function replace function should allow an empty string as the second argument, to permit the removal of a character, but in fact this caused an error: Evaluating expression "replace(%str, " ", "")": One string argument and two character arguments are required. This has been corrected.
General
18552: Timeout added to stop_rtv and kill_dataserver scripts
In this release, if the kill_dataserver or stop_rtv script is used to stop the data server, display server, or historian process, the process will always shutdown within 60 seconds. In prior releases, the process would sometimes wait indefinitely for connections to close or stalled/deadlocked cleanup threads to complete. Now by default the server will not wait for more than 60 seconds, and at that point it will exit abruptly. A different timeout can be specified on the command line as follows: -shutdown_timeout:N where N is the timeout period in seconds. If N is zero or less then the process will wait indefinitely for all connections to close and cleanup threads to complete, as in prior releases. If -shutdown_timeout is not specified then a value of 60 seconds is assumed. Note that the process may shutdown more quickly than the shutdown_timeout period if the shutdown proceeds quickly and cleanly. The option may also be specified in DATASERVER.ini, DISPLAYSERVER.ini, or HISTORY.ini file, e.g. shutdown_timeout 30 Or in a properties file: sl.rtview.NAME.shutdown_timeout=120 where "NAME" is dataserver, displayserver, or historian as appropriate.
Object Library
Tables
18542: Enable deselection of a row in single select mode
In prior releases, in the thin client it was possible to deselect a row only if the table has multi-select enabled. In this release Ctrl + Click operation will deselect a row in single-select mode as well. This is useful because a selected row is highlighted in blue, which masks any colors set in the row via the table's filterProperties property. By deselecting the row the user can see the row colors if desired. (Note that deselecting the selected row will not trigger the table object's drilldown so any drilldown substitutions set by the table will remain set to the values for the last row selected. This is the intended behavior).
Security
18041: support command to change role after login
INTERNAL This feature is intended for use in EM configurations, with a panels file. A new custom command has been implemented that allows the user's role to be changed after login. The command is configured as follows in the command dialog: Command Type: Execute System Command Command Name: rtvapm_change_role Command Value: role=R;file=F where R is the desired role name and F is the panels file to be loaded. If the file=F is omitted, then PANELS.ini is assumed. Note the R and F can both be substitutions. If R is a role that is not permitted for the current user, then the role will not be changed by the command. A table of the roles permitted for the current user can be obtained by defining a function as follows: Function Name: getRolesForUser (for example) Function Type: RTView Info Item: Roles The table returned by the function will contain a single column named "role" and one row for each role defined for the user. A typical usage on a display would be as follows: 1. Create a function named getRolesForUser, as shown above. 2. Create a local variable named $rtvrole. Leave the Initial Value blank. (The value will be set automatically by rtview, since it corresponds to a predefined global substitution). 3. Add an obj_combobox instance to the display. 4. Attach the combo's listValues property to the getRolesForUser result. 5. Attach the combo's selectedValue and varToSet properties to the $rtvrole local variable. 6. Configure the combo;s actionCommand property to invoke the rtvapm_change_role command, as follows: Command Type: Execute System Command Command Name: rtvapm_change_role Command Value: role=$rtvrole
Version 6.1.5 Release Notes
Data Sources
JMS Data Source
18441: Queue browser fix when msgs have inconsistent props or fields
In previous releases, data attachments to the Queue Browser would throw an exception and fail to return data if all of the messages in the queue did not use the exact same properties and fields. This has been fixed.
Layouts
18409: Enhanced anchor property to support anchor objects
The anchor property has been enhanced to support anchoring to anchor objects and also to supporting floating within the extent of anchor objects. The anchor property is applied when the window containing the display is resized only if the Resize Mode is set to Layout. The Resize Mode is set in the Background Properties dialog. It is also applied to objects in the composite display when a composite is resized and its resizeMode is set to Layout. Otherwise, this property is ignored. By default, objects are not anchored and they float within the extent of the display. For example, if the display is 100 pixels wide and objX is 50, when you resize the display to be 200 pixels wide, the object's objX will move to 100. You can also select an anchor object to float inside. In this case, the object will float within the specified anchor object maintaining its relative position within the anchor object's extent. The object's center must be inside the anchor object's extent and the list of available anchor objects in the Float Inside list in the Anchor Property Dialog is limited to the anchor objects with extents that contain this object's center point. When an object is anchored, you may select an anchor for the top, bottom, left and right sides of the object. If you select Display, that side of the object will be anchored to the corresponding side of the display. When the display resizes, the number of pixels between the specified side of the object and that side of the display remain constant. If an object is anchored on opposite sides (ie. Top and Bottom or Left and Right), the object will be stretched to fill the available space. If you select an anchor object, that side of the object will be anchored to the center of the specified anchor object. When the display resizes, the number of pixels between the specified side of the object and the center of the anchor object remain constant. Only objects that support the objWidth and objHeight properties support anchoring on opposite sides. If an object has the dock property set, the anchor property is ignored. Circular anchor references are not allowed. An object cannot anchor to itself directly or indirectly. To make an object available for use as an anchor object, select the isAnchorObject property for that object. When Anchor Property Dialog is open, all of the available anchor objects in the display will show a tooltip displaying their name. Since an anchor object is referenced by name when anchoring to an object or floating inside an anchor object, you must not have multiple anchor objects with the same name. This could potentially happen when using include files. This can be avoided by assigning a unique value to the objName property of objects in an include file. For example, you might append "_Header" to the name of each object when building an include file named Header.rtv.
Version 6.1.3 Release Notes
Data Server
18366: Speed improvement for row delta calculation in data server
The performance of the Data Server and its clients has been improved when tracking and applying changes to large data tables.
Data Sources
Cache Data Source
18367: Property updateListenersImmedFlag added to cache object
A property named updateListenersImmedFlag has been added to the cache table object (obj_cache table). The property is in the Cache category and is checked by default. In very specific conditions, the property can be unchecked to improve the performance of the Data Server. If updateListenersImmedFlag is checked, then each time new data is stored in the cache the updated contents of the cache's tables are immediately applied to any listeners attached to those tables. This is the default behavior and is appropriate for most caches. If updateListenersImmedFlag is unchecked, the updated contents of the cache's tables are not applied to the listeners immediately after new data is stored in the cache. Instead the listeners are updated on the next RTView update cycle. (The default rtview update interval is 2 seconds). This is more efficient in the case where raw event-driven data is frequently stored in the cache (for example high-frequency event data from a JMS, RV, or RtvAgent data attachment) and the cache's current table or history table can grow large (more than 25k rows) and the cache is maintained in a data server.
18375: Improved row expiration performance
The performance of the cache data source and data server have been improved when rows with random timestamps expire and are removed from the current table of a cache.
Functions
18368: Buffer Rows function no longer loses rows
A bug in the Buffer Rows function has been fixed which made it possible for some rows in the buffer to be lost before the downstream function was updated with those rows.
Version 6.1.2 Release Notes
Data Server
18358: Fixed bug with RTVQuery Servlet HA functionality
The following problem with the rtvquery servlet has been fixed: If the rtvquery.properties file specifies a connection to a backup data server via the DataServerBackup property, then the servlet will be unable to connect to its primary data server specified by the DataServerHost property, unless the DataServerPort property is set to the default value of 3278. If any other value is used for DataServerPort the servlet will only connect to DataServerBackup.
Version 6.1.1 Release Notes
Alerts
18230: Custom event attributes are now restored
In previous releases, persisted custom event attributes were not restored correctly. This has been fixed.
18286: $alertText and custom prop subs now work in cleared command
In previous releases, the $alertText substitution and the custom property value substitutions were not processed correctly for the alertClearedCommand. This has been fixed.
18288: Fixed execution of invalid alertClearedCommand
In previous releases, a bug in the alert processing caused the alertClearedCommand to execute for certain alerts that were never generated. If an alert has the alertDelayTime set to a value greater than 0 (this is set from the Duration in the Self Service Alerts Administration page), an alert will not be generated until the value driving that alert has continuously the threshold for longer than the alertDelayTime. The bug happened for alerts configured with an alertDelayTime value greater than 0 if the value driving the alert exceeded the threshold, then was updated with a value less than the threshold before the alertDelayTime expired. In this case, the alertClearedCommand was executed even though no alert had been generated or cleared. This has been fixed.
18289: Persisted alerts should be applied before updates
In previous releases, if the data driving a persisted alert changed during failover, this data change was not always applied correctly if it changed the state of the alert. For example, an active alert has been persisted and the alert engine exits. While it is not running, the data changes to a value less than the threshold. When the alert engine restarts, the alert was cleared, but its severity was lost and the alert cleared command was not executed. This has been fixed. This fix has 2 side effects: 1. The Alert Variables Table now does not start populating until after the Initial Delay time has expired. Previously, it started populated as soon as any data was received. 2. Only the last data update received before the Initial Delay time expires will be processed. Previously, updates received before the Initial Delay time expired would be processed, but no alerts would be triggered. This will not cause any change in behavior for scalar alerts or for tabular alerts attached to cached data (or any data where all alert indexes are included in all updates). For alerts that are attached to data where only some indexes are included in each update (ex. JMS messages), all updates except the last one before the Initial Delay time expires will be lost. If this is a problem, put your data in a cache and attach the alert to the cache.
18293: Added AlertTableValid column to AlertingEnabled table
The AlertingEnabled table in the Alert data source has been enhanced with a new column, AlertTableValid. This column has a value of false at startup and returns true one update pass after the following conditions have been met: 1. The alert engine has finished initializing. - If self service is configured, alert initialization does not complete until the alert engine has attached to the self service alerts database. - If persistence is configured, alert initialization does not completed until after the alert engine has read the persisted alerts and added them to the alert table or the Persistence Connection Timeout has expired. 2. The Initial Delay time has expired (set on the Alert Definitions tab in Application Options). Displays built with previous versions of RTView that had scalar data attachments to the AlertingEnabled table without specifying a Column Name in the data attachment will break. This is because RTView updates scalar properties with the value of the first cell in a one column table, but does not support scalar properties attached to multi-column tables. In order to fix this, modify the data attachment to specify the AlertingEnabled column.
18308: Persist alert engine enabled state
The Alert data source persistence has been enhanced to include the Alerts Enabled state. This can be set in Application Options->Alert Definitions or via the Enable Alerts command. Previously, if the Enable Alerts command was used to set the enabled state to a different value than had been set in Application Options, this setting would be lost after failover or restart. It is now saved as part of alert persistence.
Customization
18151: Support standard RTView command calls from custom commands
Two new methods have been added to the GmsRtViewCustomCommandHandler class in order to support executing standard RTView system and data source commands from a custom command handler. /** Executes an RTView System or data source command and returns the * resulting command status. * @param command The command string. This must use the correct syntax * for the system or data source command. * @param dataServer The name of the dataServer connection to execute the * command on. If this is null or empty string, the command will be executed * in the local process. * */ public GmsRtViewCommandStatus executeRtvCommand (String command, String dataServer) /** Utility method to create a properly formatted sql command string. This will * return null if either the sqlStatement or the dbName is null or empty string. * @param sqlStatement The sql statement to execute. * @param dbName The name of the database connection to execute this command * on. * @return A string in correct format to pass into executeRtvCommand(). */ public String makeSqlCommandStr (String sqlStatement, String dbName)
18194: Allow subs for the poll rate in Custom DS dialog
Custom data sources and the following standard RTView data sources now support substitutions in the Poll Interval field of the Attach to Data dialog: IbmMq SNMP Splunk WMI
Data Historian
18097: Indexing on history table creation added
The historian supports a new option to create indexes on the database tables it creates to persist cache history tables. For large tables, this can improve the performance of SQL queries that RTView executes to retrieve cache history data from the database. The command line option is: -index_history_tables:true The option can also be specified in HISTORY.ini as follows: index_history_tables:true When this option set to true, the historian will create two indexes on each database table that it creates to persist cache history. One index will use the cache's timestamp column, the other index will use the cache's index columns plus its timestamp column. If the cache has no index columns defined, then only the first index is created.
18162: Smooth Compaction fails to smooth all tables
In previous releases, if the historian smoothCompaction option was specified and if multiple database tables existed, the historian did not always apply the compaction rules to the old data in all of the tables. This is fixed.
18163: smoothCompaction should not re-write rows for unchanged interval
The performance of the historian's smoothCompaction feature has been improved, by avoiding updates to the database table for intervals in which the data has already been compacted.
Data Server
18281: Run alert persist db updates in correct order on remote server
A bug in the data server has been fixed which sometimes caused the alert persistence feature to fail when configured to use a data server connection instead of a direct connection to the database, because the sql commands to delete and insert database rows were run out of sequence on the remote data server.
18285: Ping timeout no longer disables primary and backup server
A data server bug has been fixed that in rare cases could cause both the primary and backup servers in a redundant HA pair to become unresponsive to clients. The problem occurred when the backup server did not receive a ping from the primary server for two consecutive time intervals specified by the group_timeout property, causing the backup server to take over and the primary server to resign and go to standby mode. That is the designed behavior, but in the some cases the backup would incorrectly detect that the primary server was still running as primary and the backup would immediately return to standby mode. This sequence left both servers in standby mode and triggered continuous unsuccessful attempts by both to connect to the other as primary. The following changes have been made to fix this problem: The group_timeout property is no longer used to determine the interval at which ping messages are to be sent and to be expected between the primary and backup servers. Now the primary server will always send a ping to the backup every 5 seconds. A new property named group_ping_timeout has been added to determine how long the backup server will wait, in seconds, for a ping from the primary before deciding that the primary has been lost and taking over as primary. The default value of group_ping_timeout is 30 seconds and 30 is also the minimum nonzero value. A value of zero disables the ping timeout feature entirely. The group_timeout property is still valid and has a default value of 5 seconds, but now it is used only to determine the timeout on read & write operations on the socket connection between the primary and backup server. Note that the ping timeout feature is intended only to detect the rare case where the primary data server is still running and connected to the backup server but for some reason the primary server is stalled and unresponsive. If the primary data server terminates or the host on which it is running is shut down, the backup server will detect this immediately, regardless of the value of the group_ping_timeout or group_timeout, and take over as primary.
Data Sources
Cache Data Source
18309: Deadlock if cache's rowsToDeleteTable is attached to self
A bug in the cache data source has been fixed which could cause a deadlock in the case where a cache has rowExpirationMode enabled and also has its rowsToDeleteTable property attached to a function, and that function is attached to current table of the same cache.
JMX Data Source
18283: Passwords in JMX connection string can now be encrypted
It is now possible for users to encrypt JMX passwords passed in the additional properties section of a JMX connection line.
SQL Data Source
18166: ignore sqldb property with driver = __none
If an SQL database connection is defined with a JDBC driver name or URL of __none (two underscores before the 'n') then the SQL datasource will not attempt to connect to the database and will ignore any sql data attachments that specify that database. The RTViewDs.Connections meta-table will contain a row for the database but the Connected column and the Enabled column will always show false. If the -sqltrace option is used, you'll see this trace message once in the console: <dbname>: ignoring connection with driver/url=__none
Display Server
16983: hide navtree nodes based on user role in thin client
The thin client has been enhanced so that nodes in display navigation trees can be hidden according to the user's role. (This feature has been supported in the display viewer in prior releases). Access to displays can be determined by user roles. For example, the roles.xml file might be configured to permit a user with the admin role to access all displays but to deny a user with any other role access to any display named "admin*.rtv". In the viewer, if a navigation panel (rtvTreePanel, rtvAccordionPanel, rtvTabbedDisplayPanel) contains nodes or tabs whose display is excluded from the user's role, those nodes/tabs will not appear. However, in prior releases, those nodes/tabs would be visible in the thin client. In this release, the thin client will also hide the nodes/tabs for displays that are excluded from the user's role. No configuration changes are needed to take advantage of this feature if an rtvTreePanel, rtvAccordionPanel, rtvTabbedDisplayPanel is used. If a tree or accordion control (obj_c1tree, obj_c1accordion) is configured for display navigation, in this release the control can also be configured to hide nodes for displays that are excluded from the user's role. A new property named roleCheckColumnName has been added to support this feature. The property's value should be set to the name of the column in the data table (to which the control's valueTable property is attached) that contains the display names. The default value of roleCheckColumnName is "Display".
17059: size of dd windows uses the branch function display orig size
In prior releases, if a display object's drillDownTarget was configured to open a display in a new window, and to use a drilldown branch function to determine the display name, then in the thin client the browser popup window was not sized to fit the display in all cases. This is fixed. The fix does not address the case where the drilldown is configured to use a named window. In that case, the window will be sized for the first display that is opened in the named window. If another display of a different size is subsequently opened in the same named window, the window will not be resized in most browsers. This is due to security settings in modern browsers.
18204: ConcurrentModificationException possible when setting global var
A ConcurrentModificationException is no longer thrown if a global variable is set in a display in one panel while local variables are being created for a new display loading in another panel.
18239: Fixed NPE in drilldown branch function processing
A problem has been fixed that caused the display server to throw a NPE if multiple clients simultaneously performed drilldowns involving a branch function. When the problem occurred the thin client would display a "Null reply from display server" error message, and the display server log contained error messages and stack traces similar to the following: GmsRtViewLocalDs: addObject($x) object is already in table, not added. ... ERROR in process_client_subs : java.lang.NullPointerException at com.sl.gmsjrtview.GmsRtViewPanel.getLocalVarValue()
18241: Auto-failback to primary display server
Background: In a high availability configuration, the rtvdisplay servlet is configured to have a primary display server (via the DisplayServerHost and DisplayServerPort properties in rtvdisplay.properties) and a backup display server (viae the DisplayServerBackup property). The servlet will connect to its primary server if available otherwise it will connect to its backup display server. However, once the servlet connects to its backup display server it will not (re)connect to the primary later, unless the backup server is stopped or the app server (tomcat) is restarted. Enhancement: In this release, the rtvdisplay servlet can now be configured to periodically attempt to (re)connect to its primary display server while it is connected to its backup display server. If the connection to the primary server is made successfully, then the servlet will disconnect from the backup server and use the primary. It will attempt to connect to the primary approximately every 30 seconds. To enable this new behavior, the following entry must be added to rtvdisplay.properties: DisplayServerConnectionFailback=true Then rtvdisplay.war must be rebuilt and deployed. By default, DisplayServerConnectionFailback is set to false and in that case the behavior is as described above for previous releases.
18258: Support thin client in IE 10
The thin client is supported on IE10. An exception is the right-click feature in the tree control (obj_c1tree), which is not yet supported in IE10.
18272: URL is garbled if browseUrl command invoked via right click
A problem has fixed that caused the URL in an "Open Browser" (browseUrl) command to be garbled if it was invoked from a right-click on a row in a table object. The ":" characters in the URL were sometimes replaced by the name of the column in which the user had clicked.
18279: Dropdown list selection now cleared
A problem has been fixed in the thin client that prevented the previous selection in a combo box control (obj_c1combox) from being cleared when the local variable to which the control is attached was set to a value that did not appear in the control's dropdown list.
Functions
18108: enahnce Join functions with flag to not return duplicate columns
The Join and Outer Join functions have been enhanced to support a new argument, Column Include Mode: Column Include Mode - (Optional) Specify whether or not to include the columns specified in the Left Column Name and Right Column Name fields in the returned table. Specified as "none" (don't include any columns specified in Left Column Name or Right Column Name), "left" (don't include columns specified in Right Column Name), "right" (don't include columns from the Left Column Name, or "all" (include all columns specified in Left Column Name and Right Column Name) which may be abbreviated to their first letters. If this field is left blank all columns specified in Left Column Name and Right Column Name will be included.
18168: Buffer Table Rows function no longer throws ClassCastException
The Buffer Table Rows no longer throws a ClassCastException if the input table's schema is concurrently modified by the data source that produced it. In the case of BW Monitor this may cause a Server to stop updating and expire. In this case the dataserver log file will contain a ClassCastException message such as: [rtview] Exception in thread "GmsTimer-RtViewBody" java.lang.ClassCastException: [Ljava.lang.String; [rtview] at com.sl.gmsjrt.GmsTabularData.removeAllRows ...
General
17680: Table objects are drawn on top of the dashboards scrollbars
The following problem has been fixed: In the builder/viewer, tables and control objects are drawn on top of the display panel's scrollbars. This is most obvious when using crop mode and when the panel is resized to be smaller than the display so that the table or control objects overlap the bottom or right edge of the panel.
Object Library
Control Objects
18062: Allow right click menu items on tree control
The tree control (obj_c1tree) can now be configured to extend the right-click context menu and support double-click behavior, in the same manner as the heatmap, table, and grid objects. To support this feature properties named menuItemGroup, rightClickActionFlag, and drillDownTarget have been added to the tree control. See 17835 for more information on using these properties to extend the context menu and control the double-click behavior. Limitations: The new feature is not supported on iPad. The accordion control does not support the new feature. If the tree control has valueTableFormat = Row-Leaf then the new feature will apply to a right-click or a double-click on leaf nodes only. That is, a right-click on a non-leaf node will not add items to the menu and a double-click on a non-leaf node will simply expand or collapse the tree node, it will not invoke the double-click action. In Internet Explorer, if you double-click directly on a leaf node the node will be selected but the double-click action will NOT be invoked. The double-click action is invoked only if you click on the empty space in the tree to the left or the right of the leaf node, or in the small hollow square located to the left of the leaf node.
18232: Tree control selection doesn't clear when labels change
The tree control will now clear the selection when the tree is updated and any of the node labels in the path to the selected node are changed.
Tables
18237: Update that lowers row count no longer resets scrollbars
In prior releases a data update that reduces the number of rows in a table object in the thin client can reset the table's scrollbars to their left/top positions. This has been fixed, except for the specific case where the table's row count is >= 500 before an update and < 500 afterwards.
Trend Charts
18235: fxreplace respects yAxisAutoScale = Incl.min/max, on strip chart
If an obj_fxtrend instance with yAxisMultiRangeMode = "Strip Chart" also has yAxisAutoScaleMode = "On:Include min/max", that setting will be obeyed by the replacement trend graph when the -fxreplace option is used. In previous releases, yAxisAutoScaleMode was always forced to "On" in the replacement graph.
Version 6.1.0 Release Notes
17557: vis 0 fails on obj_c1button in obj grid of comps , displayserver
In previous releases, controls, tables, object grids and flex objects inside a composite in the thin client did not obey the compositie's visFlag setting. This has been fixed.
18059: Official Support for Java 1.7
RTView applications are now validated for use with Java 1.7
Alerts
18038: Added global notification properties to alert ds
A new Alert tab, Global Notifications, has been added to Application Options. This allows you to setup global values for alert notifications. The following options are available on this tab: Alert Command: This command will be used as the alertCommand for all alerts where the alertCommand property is empty. Renotification Command: This command will be used as the reNotificationCommand for all alerts where the reNotificationCommand property is empty. Renotification Mode: This will be used as the reNotificationMode for all alerts where the reNotificationMode property is set to Use Global Setting. Renotification Time. This will be used as the reNotificationTime for all alerts where the reNotificationTime property is set to a value less than 0. Renotify on Severity Change Mode: This will be used as the reNotificationOnSevChangeMode for all alerts where the reNotificationOnSevChangeMode property is set to Use Global Setting. Comment Command: This command will be used as the commentAddedCommand for all alerts where the commentAddedCommand property is empty. Cleared Command: This command will be used as the clearedCommand for all alerts where the clearedCommand property is empty. See the corresponding properties on the alert definitions for descriptions of each option. For all command fields, click on the ... button next to the command field you want to edit to define, copy, paste or clear a command. Once the command field contains a command, you can double-click on the field to edit it.
Commands
18025: Allow some system commands to be redirected to a data server
In prior releases, system commands were always executed in the client. In this release, the following system commands can be redirected to a data server: Execute Custom Command, Execute URL Run DOS Command or Unix Shell (run external process) Send Email Send SNMP Trap In the Define System Command dialog, if one of the above commands is selected then the "Data Server" dropdown list will appear at the bottom of the dialog. The default value for the Data Server field is <none> indicating that the command will be executed by the client (builder/viewer or display server). A value of <default> can be selected to execute the command in the default data server. The Data Server field can also be set to the name of a named data server, to execute the command on that data server. The Data Server field can also be set to a substitution, for example $server. If $server is set to an empty string or to "__none" the command will be executed in the client. If $server is set to "__default" the command will be executed in the default data server. If $server is set to the name of a named data server, the command will be executed in that data server. Note that if $server is set to "__default" or the name of a named data server and there is no connection defined for that data server, the command will not be executed. Note that "__none" and "__default' both start with two underscore characters. The following system commands cannot be redirected to a data server: Beep Drill Down or Set Sub Open Browser Play Audio File Close Window
18027: pass client credentials with commands from thin client
In prior releases, a null username was passed to some rtview commands executed by the data server, rather than the correct login username for the client (viewer or thin client) that invoked the command. This is fixed.
Common Server Support
18060: clients should reconnect to primary data server when it recovers
The primary/backup data server feature (see task 17598) has been improved so that clients that connected to the backup server when the primary server failed will now reconnect directly to the primary server, if possible, when it recovers. Previously, the clients would remain connected to the backup server which would act as a proxy between the clients and the primary server.
Data Server
18019: support client access lists to allow/deny data server connection
BACKGROUND: The data server now supports client access lists. This feature allows the user to specify which clients can connect to a data server. This is done by adding client hostnames or IP addresses to three lists supported by the data server: Blacklist : clients to be denied access to the data aserver Graylist : clients to be permitted access to the data server if they provide a trusted SSL certificate Whitelist : clients to be are permitted access to the data server, no SSL certificate required. To specify the client access lists, the data server supports three new options named client_blacklist, client_graylist, and client_whitelist. Each option can be specified multiple times. The format of the values for the these options is described later in this note. Note that any RTView application can be the client of a data server. That is, a client could a builder, viewer, display server , or another data server. PROCESSING CLIENT CONNECTION REQUESTS: By default all three of the client access lists are empty which means that any client can connect to the data server. If any of the three lists is not empty, then when the data server receives a connection request from a client with IP address X and hostname H it is processed as follows: 1. If the blacklist is not empty and X or H matches any entry in the blacklist, the server rejects the client connection. 2. Otherwise, if the graylist is not empty and X or H matches any entry in the graylist, the server performs an SSL handshake with the client. If the client presents a certificate that the server trusts and vice-versa, the handshake completes successfully and the connection is accepted. Otherwise the server rejects the connection. 3. Otherwise, if the whitelist is not empty and X or H matches any entry in the whitelist the server accepts the client connection. 4. Otherwise, neither X nor H is matched on any list. If the whitelist is empty, the connection is accepted. If the whitelist is not empty, the connection is rejected. Some details to note about the preceding steps: - The blacklist has the highest precedence, the whitelist has the lowest. If a client's address or hostname matches any entry on the blacklist its connection will be denied regardless of whether the client also has a match in the graylist or whitelist. In other words, if a client address or hostname has matches on multiple lists, the most restrictive entry will always be the one that is used. - If the the whitelist is not empty then any client that has no match in the whitelist or graylist is rejected. But if the whitelist is empty, then any client that is not blacklisted is accepted (with an SSL handshake if its graylisted, unconditionally otherwise). - The order in which the user specifies the client_*list options is unimportant. It does not affect the results of applying the lists to each connection request. - Using the hostname H in a list is effective only if the data server's host system is able to lookup that hostname via its address X, using a naming service. If a client's connection request to the data server is denied then that client will make no further attempts to connect to that data server, unless the client app is restated. This is by design so that a client whose connection request is denied does not continue to pester the server with connection requests. This is true even if the client has a failover connection specified for that data server. SPECIFYING CLIENT LISTS: Each of the client access list options can be specified multiple times. They can be specified as command line arguments of the data server, as options in DATASERVER.ini, or as entries in a properties file. The order in which the options are specified is unimportant. The value of each option is either (1) a client hostname or IP address which may contain * characters as wildcards, or (2) a range of IPv4 addresses in the format of n.n.n.n-n.n.n.n where each n is a number between 0 and 255. The * character cannot be used in an address range. If client lists are specified, the data server will check both incoming socket connections and http connections (via the rtvdata servlet) against those lists using the steps described above. Case is ignored when a client's hostname is compared to a list entry. For example a list entry of host1 will match HOST1, or Host1, or host1, etc. There may be a performance penalty involved in using hostnames in the client access lists rather than IPv4 addresses. To determine a client's hostname the data server must perform a lookup with the client's address, using a name service. There may be a delay associated with each lookup. So for best performance use only IPv4 addresses in the lists, if possible. EXAMPLES: 1. Example using command line arguments: run_dataserver -client_whitelist:192.168.1.* -client_whitelist:localhost This configuration will accept connections from all clients on localhost or with IPv4 addresses that begin with 192.168.1.Connections from any other clients are denied (because the whitelist is not empty). 2. Another example using command line arguments: run_dataserver -client_blacklist:DMZ This configuration denies connections from a client with hostname DMZ and accepts connections from all other clients. 3. Example configuration using DATASERVER.ini : client_whitelist localhost client_blacklist 192.168.1.44 client_blacklist DEV* client_whitelist 192.168.1.1-192.168.1.255 This configuration will accept connections from the localhost and any clients with IPv4 addresses in the range of 192.168.1.1 through 192.168.1.255 except for address 192.168.1.44 or any client whose hostname begins with DEV, dev, Dev, etc. Connections from any other clients are denied (because the whitelist is not empty). 4. Same example as previous, but using an rtview properties file: sl.rtview.dataserver.client_whitelist=localhost sl.rtview.dataserver.client_blacklist=192.168.1.44 sl.rtview.dataserver.client_blacklist=DEV* sl.rtview.dataserver.client_whitelist=192.168.1.1-192.168.1.255 GRAYLIST AND SSL CERTIFICATES: If a client matches an entry on the graylist, then an SSL handshake is performed between the client and the server, and each must provide a certificate that the other will accept. That is, the client must provide a certificate that the server trusts, and the server must provide a certificate that the client trusts. If the SSL handshake is successful the client connection will be accepted. All traffic between the client and server on that connection will be encrypted, typically using a 128 bit key. (This may impact CPU and network performance on connections that transmit high volumes of data). The following example shows how that can be accomplished with self-signed certificates using the keytool utility provided with the Java JDK. However, please note that a full discussion of SSL and certificates is beyond the scope of this document. Note that the keytool is not part of RTView it is part of the Java JDK. Run "keytool -help" for usage information. In the following example, the data server will run on host1 and the client will run on host2. Note that the filenames, passwords, aliases, etc used below are only for examples and are not required values. In particular, there is nothing significant about the use of "rtview" in the example strings. In an actual configuration all of these strings could be replaced with strings of your choice, provided of course that they are replaced consistently. Note: Some keytool commands may appear on multiple lines below for clarity, but must be entered as a single line. 1. Create a keystore filed named server_keystore.jks to store the server's private key and self-signed certificate, with a 10 year expiration > keytool -genkey -keystore server_keystore.jks -alias rtview_server -validity 3650 -keyalg RSA -storepass mypswd -keypass mypswd -dname cn=host1 2. View the certificate just created: > keytool -list -v -keystore server_keystore.jks -storepass mypswd The output should be similar to the following: Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry Alias name: rtview_server Creation date: Nov 15, 2012 Entry type: PrivateKeyEntry Owner: CN=host1 Issuer: CN=host1 Serial number: 50a567d2 Valid from: Thu Nov 15 17:08:18 EST 2012 until: Sun Nov 13 17:08:18 EST 2022 Certificate fingerprints: MD5: 96:89:2D:37:71:8E:7F:89:7A:08:71:9F:7F:C2:C1:50 SHA1: 63:1B:1B:ED:75:58:11:34:F0:80:56:45:9B:C9:74:02:CD:D4:C6:89 Signature algorithm name: SHA1withRSA Version: 3 3. Export the server's certificate to a file named server.cer: > keytool -export -alias rtview_server -keystore server_keystore.jks -storepass mypswd -file server.cer 4. Import the server certificate into a truststore file for the client: > keytool -importcert -alias rtview_server -file server.cer -v -noprompt -keystore client_truststore.jks -storepass mypswd 5. Create a keystore filed named client_keystore.jks to store the client's private key and self-signed certificate: > keytool -genkey -keystore client_keystore.jks -alias rtview_client -validity 3650 -keyalg RSA -storepass mypswd -keypass mypswd -dname cn=host2 6. Export the client's certificate to a file named client.cer: > keytool -export -alias rtview_client -keystore client_keystore.jks -storepass mypswd -file client.cer 7. Import the client certificate into a truststore file for the server: > keytool -importcert -alias rtview_client -file client.cer -v -noprompt -keystore server_truststore.jks -storepass mypswd 8. You should now have 4 files with a .jks extension: client_keystore.jks client_truststore.jks server_keystore.jks server_truststore.jks Copy server_keystore.jks and server_truststore.jks to the directory on host1 where the data server will run. Copy client_keystore.jks and client_truststore.jks to the directory on host2 where the client will run. If you copy the keystore (.jks) files between Windows an linux/unix hosts, be sure to copy them in binary mode. The client.cer and server.cer files are not needed and can be deleted. 9. On host1, run the data server as follows (Note: The "set RTV_JAVAOPTS" command is shown in Windows command syntax and should be entered on a single line): > set RTV_JAVAOPTS=-Djavax.net.ssl.keyStore=server_keystore.jks -Djavax.net.ssl.keyStorePassword=mypswd -Djavax.net.ssl.trustStore=server_truststore.jks -Djavax.net.ssl.trustStorePassword=mypswd > run_dataserver -daemon -verbose -client_graylist:host2 10. On host2, run a viewer client as follows > set RTV_JAVAOPTS=-Djavax.net.ssl.keyStore=client_keystore.jks -Djavax.net.ssl.keyStorePassword=mypswd -Djavax.net.ssl.trustStore=client_truststore.jks -Djavax.net.ssl.trustStorePassword=mypswd > run_viewer -dataserver:remote:host1 If all the steps were done correctly, the viewer's connection to the data server should be accepted. You should see output similar to the following on the data server console: GmsRtViewDataServer connect client 1, 192.168.1.200:55401 created SSL socket 192.168.1.200:55401 cipher=SSL_RSA_WITH_RC4_128_MD5 add Client: 1 (127.0.0.1/127.0.0.1) accept graylisted client 1 (127.0.0.1) Note the lines indicating creation of an SSL socket and the cipher used. If errors occur, refer to the troubleshooting section below. SSL ENCRYPTION WITHOUT CERTIFICATES: As in prior RTRView releases, the -ssl option can be specified when the data server is started. This instructs the data server to use an SSL socket for each socket connection to its clients but without performing an SSL handshake to authenticate the client. All data transmitted on the socket will be encrypted using an anonymous cipher. The -ssl option can be used in combination with client access lists. In that case, if a client is graylisted then an SSL handshake will be performed when it connects to the data server, as described above. If a client is whitelisted its connection will be accepted without an SSL handshake and an SSL socket with an anonymous cipher will be used. The data server's verbose output will indicate this with messages similar to the following: comparing client 192.168.1.200 to whitelist entry 192.168.1.*: MATCH created SSL socket 192.168.1.200:55812 cipher=SSL_DH_anon_WITH_RC4_128_MD5 add Client: 4 (host2/192.168.1.200) Note that encryption may impact CPU and network performance on connections that transmit high volumes of data. RECOMMENDATIONS: If any client_whitelist values are specified and the data server belongs to a redundant server group for failover, be sure to specify a client_whitelist entry for the address or hostname of the other group member. Otherwise the server will not be able to connect to its partner. If the client_whitelist values are specified and the rtvdata servlet is used data server belongs to a redundant server group for failover, be sure to specify a client_whitelist entry for the address or hostname of the other group member. Otherwise the server will not be able to connect to its partner. For best performance use only IPv4 addresses and not hostnames in the client access lists if possible. This avoids the need to lookup a client's hostname from its address which can cause a delay. Use graylisting only when necessary, to avoid certificate management issues, delays of SSL handshaking when connecting, and the overhead of data encryption. TROUBLESHOOTING: The data server also a new option named client_access_debug that will print messages to the data server console as each client connection request is compared to the client lists. This can be useful for determining which list entries match and do not match a client connection. This can be specified on the data server command line as follows: -client_access_debug or in DATASERVER.ini as follows: client_access_debug true or in a properties file as follows: sl.rtview.dataserver.client_access_debug=true For troubleshooting SSL handshaking and certificate issues, set the following in RTV_JAVAOPTS before running the data server or client set RTV_JAVAOPTS=-Djavax.net.debug=ssl,keymanager or in an rtview properties file: sl.rtview.jvm=-Djavax.net.debug=ssl,keymanager Note that this option may produce a great deal of output.
Data Sources
JMX Data Source
17959: Support the canonical name of javax.management.ObjectName
RTView now correctly displays the contents of arrays of javax.management.ObjectName as separate rows in a single column table and as a semi-colon separated list when more than one columns shows. If the array is empty, then a blank cell is displayed. If the array has one or more elements, the JMX Canonical Name of the object is shown.
Display Server
18049: add option to disable initial browser resize for layout
The rtvdisplay servlet now supports a boolean property named SizeBrowserForLayout. The property can be set to false in rtvdisplay.properties to prevent the thin client from resizing Internet Explorer to match the full size of the layout when it loads a panels file. For example: SizeBrowserForLayout=false If the SizeBrowserForLayout property is not specified in rtvdisplay.properties then its value defaults to true. However, in all browsers other than Internet Explorer, the thin client always behaves as if SizeBrowserForLayout = false. Also, in recent versions of Internet Explorer if more than one tab is open it will always behave as if SizeBrowserForLayout = false.
General
17563: datasource ini files with defaults now removed more consistently
In previous releases, data source initialization files that were reverted to default options were sometimes not removed when the options were saved. This has been fixed.
Java Version Dependencies
18114: Table columns with Java 1.7
A problem has been fixed in obj_table02 when using Java 1.7 that caused the column header text to be shifted slightly down and right, and obscured the bottom border of the column header.
Object Library
Bar Charts
18112: Fixed outline on bargraph legend if legendBgGradientMode = None
In releases 6.0.2 and 6.0.3, if the legendBgGradientMode property on obj_bargraph is set to None then no outline is drawn around the legend. This is fixed so that a 1 pixel outline is drawn around the legend using the color specified by outlineColor, as expected.
Control Objects
18132: defaultButtonFlag no longer broken in Viewer
The defaultButtonFlag property on obj_c1button does not work in the Viewer in releases 6.0.0 through 6.0.3. If the Enter key is pressed while a popup window is opened containing a display in which a button has defaultButtonFlag = true, the button's command should be executed. Instead the button just flickers and the command is not executed. This is fixed.
18157: Tree node status now updated if valueTable has column filter
In previous releases, if the tree control's valueTable property was attached to a local data table with a column filter, the status icons of the tree nodes were not always updated to reflect changes in the data table. This is fixed.
Version 6.0.3 Release Notes
Alerts
17921: Option to renotify when alert severity increases
RTView alerts have been enhanced with 2 new options for what happens when an alert's severity changes: 1. In the Alerts tab of the Application Options dialog, the Unacknowledge Alerts on First Severity Change option has been changed to Unacknowledge on Severity Change Mode. By default it is None. If set to First Severity Change, when an acknowledged alert's severity changes the first time, the alert will be unacknowledged. This is the same behavior that happened in the previous release if the Unacknowledge Alerts on First Severity Change checkbox was selected. When set to All Severity Increases, when an acknowledged alert's severity increases, the alert will be unacknowledged. When an alert is unacknowledged, the alert will start renotifying again if the reNotificationMode is configured to do so. It also means that if the condition meets the specified reNofifyOnSevChangeMode property on the alert, it will renotify once regardless of the reNotificationMode. This unacknowledge action is not tracked in the Alert Action Audit Table since it is not a user action. When running against application options set from an older version of RTView, the Unacknowledge Alerts on First Severity Change value will automatically be converted to the correct value for Unacknowledge on Severity Change Mode so that the application behavior will not change. 2. The limits, multi-state and event alerts reNotifyOnFirstSevChangeFlag property has been changed to reNotifyOnSevChangeMode. By default, it is set to None. If set to Renotify on First Sev Change, the alert will renotify when the severity of the alert changes the first time. If set to Renotify on All Sev Increases, the alert will renotify every time the severity of the alert increases. For both Renotify on First Sev Change and Renotify on All Sev Increases, the alert renotification will only occur if the alert has not been acknowledged or if the Unacknowledge Alerts on First Severity Change application option is enabled. The renotification will execute the reNotificationCommand if configured, otherwise it will execute the alertCommand. Note that the severity is only updated on acknowledged alerts if the Update Severity on Acknowledged Alerts application option is selected. When running alerts created with an older version of RTView, the reNotifyOnFirstSevChangeFlag will automatically be converted to the correct value for reNotifyOnSevChangeMode so the alert behavior will not change. When selected, when an acknowledged alert's severity changes the first time, the alert will be unacknowledged. This means that the alert will start renotifying again if the reNotificationMode is configured to do so. It also means that if the reNofifyOnFirstSevChangeFlag is selected for the alert, it will renotify once regardless of the reNoficationMode. This unacknowledge action is not tracked in the Alert Action Audit Table since it is not a user action.
Common Server Support
17996: Added troubleshooting mbean to servers
The data server, display server, and historian support a new MBean that provides status information that can be useful in detecting and troubleshooting an unresponsive server. The MBean name is RTView:name=Troubleshooting It defines the following attributes: - LastUpdateTime : The time at which the server's main update timer most recently fired. In a healthy server, this time will change on each update interval (default 2 seconds). If the time stops changing for an extended period, it indicates that the timer thread has stalled or terminated. - DeadlockCount: The count of deadlocked threads. In a healthy server the count is always zero. This attribute is only updated every 30 seconds, to reduce overhead. The jstack utility can be used to obtain more information about the deadlocked threads. - UncaughtExceptionCount : The count of uncaught exceptions thrown since server started. In a healthy server the count is always zero. An uncaught exception will terminate the thread that threw it. - UncaughtExceptions: A table of the server's uncaught exceptions listing the type, time, executing thread, and code location for each exception. (For each excpetion, a stack trace is also written in the server's log file)
Customization
17923: Typos in custom user manager and dbprops
A few minor errors in the docs for the custom user manager were corrected.
Data Historian
17582: Historian now attempts to reconnect to database in batch mode
If batch mode is enabled in the historian and the database connection is lost, the historian will now attempt to reconnect periodically.
Data Server
17581: rtvquery servlet accepts primary & backup data server
The rtvquery servlet now supports a backup data server connection. The backup data server connection is specified by editing %RTV_HOME%\servlets\rtvquery\rtvquery.properties and adding a line as follows: DataServerBackup=host:port where host:port are the hostname and port number of the backup data server. After editing the file, run the make_war script and redeploy the rtvquery.war file.
17587: persistCaches should support allowDuplicatesInHistoryFlag
If a cache is configured with allowDuplicatesInHistoryFlag = false, then the data server will not send duplicate rows from the cache's history table to a historian client that was run with the -persistCaches:true option. In prior releases, the allowDuplicatesInHistoryFlag was ignored by the data server when it sent cache history rows to the historian so duplicate rows could still be stored into the database table.
17838: GmsTimer thread stalls if data server connection is slow
In prior releases, function updates could be delayed by a slow data server connection. This is fixed.
17973: New option to prevent a deadlock due to stalled client
The data server supports a new option to prevent a deadlock condition that can occur in abnormal situations. The new option is: -client_write_timeout:N or in a properties file: sl.rtview.dataserver.client_write_timeout=N where N is an integer value in seconds. If the server attempts to push data to a client that is connected via socket, and the corresponding write operation on the client's socket stalls for more than N seconds, the server will close the client's socket. This timeout avoids the potential for deadlock with other threads in the server that may be trying to access the same data table that was locked while being pushed to the client. A typical value for N is 60 seconds. The default is zero, which means the write to a client socket will never timeout. The write to the client's socket may stall because of networking problems, or a deadlock or other error in the client that prevents it from reading its incoming data.
17974: New option to terminate server after OutOfMemory exception
An option has been added to force the data server, display server, or historian process to terminate when an OutOfMemoryException occurs. This is intended for use in a HA deployment where a backup server is available, since otherwise the process may continue to run in a crippled state after the OutOfMemoryException occurs, preventing the backup from taking over. For example, if the data server experiences an OutOfMemoryException it may still remain connected to its clients, preventing failover, but may stop pushing any data to the clients. Note that the server is not restarted automatically by this option. The server would need to be restarted manually. The option is specified on the command line as follows: -exit_on_out_of_memory or in a properties file (for the data server in this example): sl.rtview.dataserver.exit_on_out_of_memory=true If the option is not specified, the process will continue to run after an OutOfMemoryException occurs, as in prior releases.
17990: Removed possible deadlock when -log4j option is specified
A problem with the -log4j option has been fixed which sometimes caused a deadlock in RTView, if multiple threads tried to write log messages simultaneously.
Data Sources
Cache Data Source
17794: divide by zero exception if cache condenser is misconfigured
In prior releases, a divide-by-zero exception was thrown in the case where a cache was misconfigured with condenseRowsFlag = 1 and condenseRowsInterval = 0. This is fixed.
17845: Implement Once-only flag for Cache metdata attachments
The 'Update Once' option on cache data attachments to the RTViewDs meta tables is now supported. Previously the option could be set but it was ignored.
17847: extend-by-sql mishandles databaseName prop assigned to blank sub
The following problem has been fixed: If the databaseName property of a cache is set to a substitution whose value is set to '' in OPTIONS.ini or a properties file, and the cache's historyTableName property is non-blank, then in some cases an attachment to that cache's history table which has the Extend by SQL option checked never received any data. Now it behaves as though the databaseName is blank, in which case the default database name of RTVHISTORY is used in SQl queries to preload the cache's history table and for the Extend By SQL queries. In addition, if a cache's databaseName property is set to "__none", then the history preload and Extend By SQL queries are never performed for that cache, even if its historyTableName is non-blank. For consistency, the SQL data source will also ignore data attachments in which Database Name = "__none".
JMS Data Source
17398: New option to disable internal caching for jms messages
The JMS data source has been enhanced with a new Disable Data Caching option in the JMS Options tab of the Application Options dialog. The Disable Data Caching option allows you to disable the caching in the JMS data source so that listeners are only updated with the new rows instead of a combination of all rows for a topic. This option should be used when using JMS as the input to a cache file so that duplicate rows are not sent to the cache.
17807: New general jms options tab
The JMS data source has been enhanced to add a JMS Options tab to the Application Options dialog. This tab has 2 options: Maximum Message Count for Queue Browser: Enter the maximum number of messages that will be queried from a queue browser for any queue. Default is 100. Minimum Reconnect Time (seconds): Enter the minimum number of seconds that will elapse before attempting to reconnect to the server. Default is 30. These options are not new, but previously they were only settable from the command line.
Display Server
17698: 'Export table to html/excel' fails if column label has newline
A bug has been fixed which caused the "Export Table to HTML/Excel" feature to fail in the thin client if the table contained a column with a newline character in its label. The bug was introduced in 5.9.2.
17803: right-click-> drill down/command doesn't apply table subs in ff
In prior releases of Firefox, if the user right-clicked in a table cell and then clicked Drill Down in the popup menu, the table's drillDownColumnSubs were not set to the values in the clicked row, unless the user had left-clicked on the same row first . This is fixed.
17805: IE8 and older throw js error if invis control has tabIndex=1
In prior releases, if a display was opened in the thin client in Internet Explorer version 8 or older and an invisible control object had the lowest nonzero tabIndex in the display and therefore should have had the initial keyboard focus, a javascript error was thrown. This problem is fixed..
17922: Display server leaves imageio*.tmp files if pngcompress is used
The display server will no longer leave files named imageio*.tmp in the user's temp directory when the -pngcompress or -imagequality options are specified.
17971: rtvdisplay servlet throws NPE if string missing from properties
The rtvdisplay servlet no longer throws a NPE if the rtvdisplay_strings.properties files is missing any of its expected entries.
17982: Fixed bogus error "No display name specified" in popups
A problem has been fixed which sometimes caused a bogus message "Error: No display name specified" to appear in popup displays in the thin client, in Internet Explorer.
Drill Down
17757: execute left-click action on right-click before showing popup
The table object (obj_table02) has been enhanced with a new property, rightClickActionFlag. When this flag is selected, the action that is performed on left-click (drill down or execute command) will execute before the popup menu is shown. This is useful when you have command string configured to set substitutions in the current window and the drill down target to drill down using those substitutions. In that case, the command is executed when you left-click and when you right-click so the substitutions are guaranteed to be set before you select Drill Down from the popup menu. This option should not be used if the left click is configured to drill down to another display. Limitation: This property is ignored in the thin client on iOS Safari (iPad/iPhone).
17777: Selected item in nav panel shouldn't update after dd in popup
In a panel layout in the viewer, the highlighted node in a tree/accordion navigation panel will only be updated to reflect a drilldown to a different display in the main panel. In previous releases, the highlighted node was also updated after a drilldown in a popup panel, which was incorrect behavior.
Functions
17747: Setsub function no longer throws NPE if sub is used upstream
The following problem has been fixed. In a function chain, if a setsub function F1 modifies a substitution that is used in data attachments that are inputs to functions upstream of F1, a null pointer exception may be thrown when F1 is evaluated. This symptom was observed in the OCM viewer client, with the following stack trace; Exception in thread "GmsClientDispatcherThread" java.lang.NullPointerException at com.sl.gmsjrtview.GmsRtViewDataObject.applyDataToListeners(SourceFile:466) at com.sl.gmsjrtview.GmsRtViewXmlDs.applyData(SourceFile:1068) at com.sl.gmsjrtview.GmsRtViewXmlDs.onData(SourceFile:956) at com.sl.gmsjrtview.GmsRtViewXmlSource.applyDataSet(SourceFile:1244) at com.sl.gmsjrtview.GmsRtViewXmlSource.dataUpdate(SourceFile:896) at com.sl.gmsjcs.GmsClientFO.gg$1(SourceFile:199) at com.sl.gmsjcs.GmsClient.gg$1(SourceFile:685) at com.sl.gmsjcs.GmsClient.gg$1(SourceFile:24) at com.sl.gmsjcs.GmsClient$b.run(SourceFile:864)
17970: Improved EVALR performance for rows with same values
The performance of the EVALR (Evaluate Expression by Row) function has been improved in the case where consecutive rows in the input table have the same values in the columns used in the expression.
Logging
17979: New options to avoid overwriting old log files
The -logfile option has been available for several rtview releases. It can be used to send the console output of an rtview application to a file, for example: run_dataserver -logfile:dataserver.log By default, if the dataserver.log file already exists, its previous contents are overwritten and lost. To address this issue, two new features are supported in this release. 1. A new option named -logappend has been added. It is used as follows: run_dataserver -logfile:dataserver.log -logappend In this case if the dataserver.log file already exists, the output from the new process will be appended to the file's previous contents. So, the -logappend option will preserve the previous contents of the log file. Note that over time the file could grow quite large, so its advisable to periodically rotate the file. On Linux, the logrotate utility can be used to automate this. 2. The existing -logfile option has been enhanced. If the filename contains the string DDDD (for upper case D characters) it will be replaced with the local date and time using the format yyMMdd_HHmmss. For example this command: run_dataserver -logfile:dataserver_DDDD.log if executed at on Sep 27 2012 at 3:55:43 PM would produce a log file named dataserver_120927_155543.log. In most cases, this will be a unique filename so the previous log file, if any, would remain unchanged. Note that over time a large number of log files could accumulate so its advisable to periodically purge the old files. On Linux, the logrotate utility can be used to automate this.
Object Library
17857: Fixed mouse over on composites, graphs, grids when panel offset
In previous releases, the mouse over did not work correctly for the following objects when the panel containing those objects was using a panel layout such that there were panels to the left or top of it: composites object grid icons graphs This has been fixed.
Composite Object
17961: Improved performance of subs handling on composites
The substitution processing code has been enhanced to speed up loading of a display that contains many composites when many top-level substitutions are defined.
Control Objects
17451: change default checkbox label props to match general objects
Some of the default values for the check box properties have been changed to match the defaults used by the objects on the General tab of the Display Builder: labelTextHeight = 9.6 labelTextFont=San Serif Bold labelTextColor = 16 (dark gray) fgColor = 16 (dark gray) This has been changed both in the Display Builder palette and in the rtv_defaults.rts stylesheet.
17754: labelTextColor on tree control no longer ignored by thin client
In the previous release, the thin client ignored the labelTextColor property on obj_c1tree, so the text on tree nodes was always black. This is fixed.
17790: New accordion control object
An accordion control object is now supported. The new object is named obj_c1accordion and appears on the Controls tab in the builder's Object Palette. The accordion control is very similar to the tree control (obj_c1tree) introduced in the previous release. But unlike the tree control, the accordion control displays the tree nodes as pushbuttons and only one tree branch can expanded at a time. The accordion control and tree control have the same set of properties except as noted below. The following properties are defined only by the accordion control: accordionColor: The color of the accordion nodes (button) that are not selected. accordionSelectColor: The color of the accordion node that is selected. accordionSelectTextColor: The text color for the accordion node that is selected. (All nodes that are unselected use labelTextColor). accordionClosedImage: The icon that appears to the left of the label for a closed (collapsed) accordion node. The default is a small right arrow. accordionOpenImage: The icon that appears to the left of the label for an open (expanded) accordion node. The default is a small down arrow. accordionWidth: The width in pixels for each accordion button. If a value of zero (the default) is specified, the width of each node will be computed automatically and may be different for each node. Specify a nonzero value if you want all buttons to have the same size, for a more uniform appearance. The following tree control property are not supported by the accordion control: nodeTypeProperties, nodeTypeColumnName: These properties are not needed for the accordion control because the only accordion node types are closed, open, and leaf and those are indicated by the accordionClosedImage icon, the accordionOpen Image icon, and no icon, respectively. As in the tree control, nodeStatusProperties can be used to assign a status icon to each node in an accordion control. The icon will appear inside the node's button, either to the left or right of the button label, according to the value of the nodeStatusIconPos property.
17791: Tree/accordion control selection updated after dd in main panel
In a panel configuration using rtvLayout, if a tree or accordion control object (obj1_c1tree or obj_c1accordion) is used in an rtvDisplayPanel named "nav" and a drilldown is performed that changes the display in the center panel, the first node in the tree/accordion control whose value matches the name of the display will be selected. This is useful to keep the correct node in the tree/accordion selected when a drilldown to another display is performed by clicking on an object in the display itself, rather than by clicking on a node in the tree. The rtvDisplayPanel that contains the tree or accordion control must be named "nav" to enable this feature. For an example of a panel configuration using this feature, see PANELS_treecon.ini or PANELS_accordcon.ini in RTV_HOME/demos/features. To run the example, type the following commands in an RTView command prompt: > cd %RTV_HOME%\demos\features > run_viewer -panelconfig:PANELS_accordcon.ini Then, in the accordion control click on the "Navigate Displays" button, and in the main display right click on the object labeled "Current Window" and pick "Drill Down" from the popup menu. This opens the display named "object_variety2" in the main window, which corresponds to the button labeled "Table Objects" in the accordion, which should now be visible and highlighted. Limitation: Note that only the display name is compared when determining which node should be selected, substitutions are not compared. If several nodes in the tree use the same display as their value, but with different substitutions (via drilldownColumnSubs), this feature will always select the first node in the tree whose display name matches regardless of the substitutions. This is similar to the current behavior of the rtvTreePanel and rtvAccordionPanel, except that the search for a match will only compare the display name not substitutions.
17792: Allow tree & accordion controls to attach to navtree.xml via xml
The XML datasource has been enhanced to support data attachments to xml files that use RTView's navtree.xml format. This enhancement will allow the RTView tree control and accordion control objects to be populated by attaching to navtree.xml In previous releases, the XML format used by navtree.xml files has only been supported by the tree and accordion navigation panels (rtvAccordionPanel and rtvTreePanel) in an rtvLayout panel configuration. Now, the XML datasource can parse a navtree.xml file and convert it into a table in the "row-node" format, accepted by the tree and accordion control objects (obj_c1control and obj_c1accordion), which can be used on an rtview display. See the documentation for the tree control for more information on the row-node table format. The table created by parsing a navtree.xml file will be given a data key of "navtree", which should be specified in the Data Key field of the Attach to XML Data dialog. The table will have one row for each node that is defined in the navtree.xml file. The table will contain the following columns: Node ID: An unique integer assigned to a tree node Parent ID: The ID of the node's parent, or blank if the node is a top-level node. Label: The value of the node's "label" attribute. Display: The value of the node's "display" attribute. Subs: The value of the node's "subs" attribute (a string containing sub:value pairs, separated by spaces). Typically, the valueTable property of a tree control or an accordion control would be attached to the navtree table, and the control's valueTableFormat property would be set to Row-Node. Then the column names listed above would be specified as values for other properties on the control as follows: nodeIdColumnName = Node ID nodeLabelColumnName = Label parentIdColumnName = Parent ID uniqueNodeIdFlag = <checked> valueColumnName = Display For an example of an accordion control configured in this manner, use the Builder to examine the display named accordcon.rtv in RTV_HOME/demos/features. To see the working example, type the following commands in an RTView command prompt: > cd %RTV_HOME%\demos\features > run_viewer -panelconfig:PANELS_accordcon.ini In addition to the columns mentioned above, the navtree table's Subs column can also be used to configure the drilldownColumnSubs property of a tree/accordion control. In the Drill Down Column Substitutions dialog, find the row for Column Name = Subs, and in the Substitution String column enter the string __parse (note: there are 2 underscores in the prefix), that is: Column Name Substitution ------------ ------------ Subs __parse This tells RTView to parse the string found in the Subs column for the select tree node, which is expected to contain one or more sub:value pairs, separated by spaces. For example, if the Subs column contains this string: $sub1:abc $sub2:xyz and if the tree control's drilldownColumnSubs is configured as described, then on a drilldown from the control the $sub1 and $sub2 substitutions will be assigned the values abc and xyz respectively.
17989: Node status propagation now works for valueTableFormat=Row-Node
In prior releases, if a tree or accordion control had its valueTableFormat set to Row-Node, the node status propagation feature did not work. The status of leaf nodes was not propagated up to its ancestor nodes in the tree/accordion. Also the nodeTypeColumnName property (tree control only) was ignored if valueTableFormat=Row-Node. Both problems are fixed.
17994: rtv(Tree/Accordion)Panel now displays Japanese chars
Japanese characters are now displayed correctly in the rtvAccordionPanel or rtvTreePanel in the thin client. Note that the navtree.xml file that defines the tree/accordion labels must use UTF8 encoding if it contains Japanese characters.
Heatmap
17943: adjustSizeForLabelFlag refined to apply a smaller adjustment
The adjustSizeForLabelFlag has been enhanced to apply a smaller adjustment. The old algorithm made a much larger adjustment to the small nodes in the heatmap and this often made the relative sizes of the nodes incorrect. The new algorithm applies a much smaller adjustment, which works well when the nodeLabelNestDepth is 1. When it is greater than one, the smaller adjustment does not always work. When the nodeLabelNestDepth is greater than 1, RTView evaluates whether or not the new algorithm will work and if not it uses the old one. To use the old adjustSizeForLabelFlag algorithm for all cases, use the following command line option: -hmuseoldadjust
Object Grid
17858: Mouse over no longer shows for clipped object grid items
In previous releases, the mouse over would show for items outside the visible extent of the object grid. This has been fixed.
Tables
17746: Support copying text from table cell to clipboard in IE
An item labeled 'Copy Cell Value' has been added to the context menu in the thin client, when using Internet Explorer (IE). This item allows the user to copy text from a table cell to the system clipboard by right clicking in the cell and then picking 'Copy Cell Value' from the menu. If the selected cell contains multiline text, each newline will be converted to a tab. If the selected cell displays an image, the underlying text value will be copied. The new menu item is available only in IE. Other browsers do not allow applications to write to the clipboard. (In those browsers, the text in a cell can be selected by dragging across the text and then pressing Ctrl+c). In IE, the copy will fail if the security option "Scripting: Allow programmatic clipboard access" is disabled in the security level that applies to the thin client's URL. The IE security level is configured on the Security tab of IE's Internet Options dialog.
Platform Support
17299: run_*.bat scrips fail if JAVA_HOME contains parentheses
In prior releases, the various RTView run_*.bat scripts would fail on Windows if JAVA_HOME specified a path that contained parentheses, which is the case when a 32 bit version of Java is installed on 64 bit Windows. This is fixed.
Version 6.0.2 Release Notes
Alerts
13676: New Unacknowledge Alert command
The Alert data source has been enhanced to support a new Unacknowledge Alert command. This command takes one argument, the alert id. The alert id can be a single id or a semi-colon (;) delimited list of ids. When an alert is unacknowledged, the renotification command will start back up again and the Severity and Count fields in the alert table will start updating again. This command is tracked in the Alert Action Audit table as an Event Management alert with the alert id being the Target value.
17596: Alert update time column added to alert table
The Alert Table has been enhanced to include a new column: Row Update Time The column contains the last time any column in that row was last updated. Note that this is different than the Last Update Time column which lists the last time the value or valueTable on the alert received a data update. By default, the Last Update Time and Count columns are not tracked by the Row Update Time. If you want the Row Update Time to include updates to those columns, use the -lutupdatesnewdata command line option. When using the New Data Only Alert Table as input to a cache, it is recommended that you set the timestampColumnName property on the cache to the new Row Update Time column. The RtvAlertTable cache in the selfservicealerts demo has been enhanced to use the Row Update Time for the timestampColumnName property and to limit the columns from the Alert Table that will be stored in history. Users upgrading from previous versions of RTView that are using alert persistence will need to add the Row Update Time to the alert persistence database table. The database schemas in RTV\dbconfig\alert_persist have been updated to include this column.
17618: New persistAlertDelayTime option added
The Alerts have been enhanced to support the new primary/backup server feature implemented in task 17598. A new option in ALERTOPTIONS.ini has been added to support this: persistInitDelayTime XX Where XX is the number of seconds to delay reading the alert persistence database after going from warm standby to hot. The default is 5 seconds and should be increased if the persistence database is slow or if a large number of alerts are expected to change on each update period. Even with HA, there are some limitations on persisting alerts. Some alerts might not be persisted in the following cases: - The persistence database is down. In this case, the alerts cannot be written to the database or read from the database. If a server goes down and the backup takes over while the database is down, persisted alerts will not be read into the backup server. The same thing will happen if persistence is using a Persistence Data Server which is down during fail over. - The persistence database is slow. In this case, all of the alerts may not have been written to the database from the server that is shutting down before the server that is coming up can read them. Use the persistInitDelayTime to account for this. - The alert server is terminates in a non-orderly shutdown. Alerts are written out once per update period and once turning orderly termination. If there is a non-orderly shutdown, some alerts may not be written to the database yet. In the case where alerts are not persisted, the data server that is taking over will generate new alerts if the data is still in an alert state. It might also re-use ID's that were used by the data server that failed for new alerts.
17619: Enhanced performance for acknowledging thousands of alerts
The performance of the acknowledge alert command has been improved. Previously, when acknowledging a large number of alerts in a single command, this command executed very slowly.
17634: Improved performance of alert engine
The alert processing performance has been improved. This has included several enhancements. As part of this change, the Self Service Audit Table and Action Audit Table data attachments now only return the 500 newest rows of that table. To see more row, attach to the database table using an SQL data attachment. For better performance, the AlertEngineName and ID columns should be specified as the primary key for the alert persistence table. RTView will do this if it creates the table. If the table is created manually, be sure to specify the NOT NULL qualifier when creating those two columns, and then specify those columns as the table's primary key. For example: CREATE TABLE <alert persist tbl name> ("AlertEngineName" <type> NOT NULL, ... ,"ID" <type> NOT NULL, ...) ALTER TABLE <alert persist tbl name> ADD CONSTRAINT pk_alert PRIMARY KEY ("AlertEngineName","ID")
17643: Support empty string for set owner command
The Set Owner command on the alert data source has been enhanced to allow you to set the owner to an empty string.
17645: Check the Last Update Time before incrementing the Count
The alerts have been enhanced to check the Last Update Time before incrementing the Count value. In previous releases, if an alert was attached to a cache table, any time a single row in the table was updated, the Count column in the alert was incremented for all indexes, even if the value in the time_stamp column of the cache only changed for the one row. This enhancement checks the value of the Last Update Time before incrementing the Count. If the Last Update Time hasn't changed, the Count is not incremented. In order to set this up with the cache, include the time_stamp column of the cache in your valueTable data attachment. Also set the timeStampColumnName to the name of the time_stamp column from your cache. This will configure the alert to use the cache's time stamp for the Last Update Time and the Count will only be incremented if that time stamp has changed since the previous update. To go back to the previous behavior of incrementing the Count column even if the Last Update Time hasn't changed, use the following command line option: -ignorelutforcount:true
Common Server Support
17661: Support deploying RTView as a Windows Service on 64 bit
RTView has been enhanced so that the Display Server, Data Server and Historian can be run as a service on 64-bit Windows systems. In previous releases, running as a server was only supported on 32-bit Windows systems. Previously, these services run using JavaService version 2.0.10, but this has been replaced by AlwaysUp CLT. The following command line options are no longer supported for install_service: -serviceerr - The service now only supports a single log file for both stdout and stderr. By default, both stdout and stderr will be written to a log file named appName_out.log (ex. displayserver_out.log). You can override this using the -serviceout command line option. -overwritelogs - Logging is appended to the log file each time RTView restarts. When the log file size exceeds 5MB, the oldest 25% of the log file will be discarded. For better control over your logging, use either the -logfile or the -log4j command line options. See the documentation for more information on those command line options. For both of those options, the service will still output any information written to the console by 3rd party libraries to the log file specified by -serviceout. If UAT is enabled on your system, you will need to run install_service and uninstall_service as Administrator. To do this, right-click on the RTView Command Prompt in your Window's Start menu and select Run as Administrator. Use this command prompt to execute the install_service and uninstall_service commands. Some RTView applications use very long command line strings. If the command line is too long, the Window Services dialog will show an error "The stub received bad data" when you try to look at the properties of the service. In this case, you can look at the properties of your service in the Windows Registry under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Key where Key is the name of your service. Command lines with more than 10,240 characters cannot be installed as a service.
Data Server
17598: Support for primary/backup mode for data server
High availability (HA) support in the data server has been improved to allow more control over which server should run as the primary server by default and which should run as backup, in a group of two redundant servers. Only the primary data server will activate the cache and alert data sources. Previous releases also had support for redundant data servers: A data server could be started in standby:warm mode so that it would not activate the alert or cache data sources at startup. However, as soon as the first client connected to a standby data server, it would activate those data sources even if the other data server was still running. This meant that multiple instances of the alert data source could be active at the same time. With this enhancement, the backup server will not activate the cache and alert data sources as long as the primary server is up. If a client connects to the backup data server, the backup server will simply act as a proxy and route all of that client's requests to the primary data server. If the backup server detects that the primary server is down, the backup will leave standby mode and become the primary server and will immediately activate its alert and cache data sources (even if no clients connect to it). Later, if the default primary server is restarted, the backup server will return to standy mode and deactivate its local instances of the cache and alert data sources. For best performance, clients should be configured to try to connect to the primary server before the backup server. For example, if the default primary data server is A:5555 and the default backup server is B:5555, then each client's connection string to that server pair should be "A:5555,B:5555" or, if connections are made via the rtvdata servlet, "http://A/rtvdata,http://B/rtvdata" The default primary and backup servers can be identified by the "group" properties in each server's DATASERVER.ini file: 1. group_member - The hostname:port connection string of the other data server in this redundant group. If a hostname is specified without a ":port" then port number 3278 is assumed. Do not specify a URL for the rtvdata servlet. 2. group_priority - The value of this property is an integer value of 1 or more, with 1 being the lowest priority. The running server in the group with the highest priority will become the primary server. A larger number assigns a higher priority. For example, say that two redundant data servers are run on host A and host B, and the server on host A should normally run as primary with the server on host B as backup. In that case, the server's group_priority on host A could be set to 2 and the group_priority on host B could be set to 1. 3. group_timeout - The timeout (in seconds) that the backup server will wait for a connection or a response from the primary, after which it assumes the primary has failed. The default is 5 seconds. (Note that in most cases, if the primary server terminates or the host on which it is running is shut down, the backup server will detect this immediately). 4. group_initial_wait - The time in seconds that the server will wait at startup for a connection to the other server in the group. The default is zero. This property should only be specified for the backup server. A value of 30 (seconds) would be typical. This wait time can be useful in the situation where the primary and backup server are started at nearly the same time, and the backup server's initial attempt to connect to the primary server fails because the primary has not reached the point where it accepts connections. Without an initial wait, in that case the backup would become the primary at startup but then would be forced to resign shortly afterwards when the default primary server finished staring. If the group_member property is specified but group_priority is not, the group_priority defaults to 1. Note that 1 is the lowest priority. If the group_member property is specified then it is not necessary to specify the -standby:warm option. The server will remain in standby mode until its determined which server is the primary. Here are the contents of two DATASERVER.ini files for an example of two redundant data servers are run on host A and host B, and the server on host A should normally run as primary with the server on host B as backup, and both servers use port 3278. # DATASERVER.ini file for the default primary server, on host A port 3278 group_priority 2 group_member B:3278 # DATASERVER.ini file for the default backup server, on host B port 3278 group_priority 1 group_initial_wait 30 group_member A:3278 Note that all of the properties listed above can also be specified on the command line, for example: -group_priority:2 The following properties have been added to the data server's JMX manager mbean, to provide information about which server is currently running as primary. All of the properties are read-only: 1. Port (integer) - the data server's port number, 3278 by default. 2. PrimaryServer (boolean) - true if this server is currently the primary server in a redundant group, false if this server is currently the backup server in a redundant group. If the server is not in a redundant group, the value is always true. 3. ProxyFor (string) - if this server is currently a backup server (that is, if PrimaryServer is false) this property contains the host:port of the server that is currently the primary, to which this server will forward all client requests as a proxy. This property is empty if this server is currently the primary server.
Data Sources
Cache Data Source
17586: New property to specify data server to use for initial queries
A property named queryServerName has been added to the cache table definition object (obj_cache_table). This property defines the name of the data server that should be used to perform the initial sql query to preload the cache's tables and also to perform any extend-by-sql queries for data attachments to the cache. By default the value of the property is blank, which means that the sql queries are performed by the local application, as in prior releases. Note that sql queries are only performed if the cache's historyTableName or currentTableName properties specify a database table name.
17605: Avoid high frequency trimming of cache history table
To reduce overhead when the history table of a cache is large and new data is frequently applied to the cache, the history row limit and time range limit will not be enforced more than once every 2 seconds. This means that the history table may exceed its limits, for a brief time.
17660: historyTableName value of '' now treated as empty string
The following problem is fixed: If the historyTableName property of a cache is set to $sub1 and $sub1 is set to '' (a pair of single quotes) in a .ini file or a properties file, then that should be equivalant to setting the property to an empty string, which the cache should ignore. Instead, it tries to load the cache history by doing an sql query on a database table named '' which fails with an sql exception.
17667: %Full column in RTViewDs.Tables fixed for condensed hist
A problem has been fixed which caused the %Full column in the RTViewDs.Tables cache metadata table to always show NaN for condensed history tables.
17669: Row condenser no longer fails if indexed row stops updating
A problem has been fixed in the cache row condenser which could cause the history_condensed table of a cache to stop updating.
17795: RTViewDs.CacheObjectProperties shows subst string not value
A bug has been fixed that affected the RTViewDs.CacheObjectProperties meta table. It will now show the replacement value of a substitution string for a cache property that is set to a substitution, rather than the substitution string itself. For example, say the historyTableName property of a cache is set to $histTable and $histTable is set to MyDbTable. In prior releases the value shown in RTViewDs.CacheObjectProperties for historyTableName would be $histTable. In this release, the value shown would be MyDbTable.
17815: cache keeps history table if max rows = 0 and row condenser enab
If a cache has maxNumberOfHistoryRows <= 0 then no history table should be kept for that cache. However in prior releases if the cache also had condenseRowsFlag = 1 then the cache history table was kept, which was incorrect. This is fixed.
SQL Data Source
17666: Static sql query no longer runs more than once at startup
A problem in the SQL data source has been fixed which allowed a static query to execute more than once in certain startup conditions.
TIBCO Hawk Data Source
17326: Subscription processing moved to a separate thread
The TIBCO Hawk data source has been enhanced to move subscription processing out of the main update thread. In previous releases, this was done in the main update thread, which could cause the application to become unresponsive if a large number of subscriptions needed to be made at once or if an Hawk Agent was slow in returning the requested subscription. The subscription processing is now handled in a separate thread so that the application update thread is not blocked.
17327: Added subscription logging to RTViewDs
Two new RTViewDs methods have been added to the Hawk data source to assist in debugging agent and subscription problems. Both of these methods are expensive and should only be used for debug. They should not be included in standard user displays. Both of these methods ignore the Disable Data Caching application option and cache all of the data regardless of how that flag is configured. getAgentStatus - this method returns the following columns containing information about the agent: Display Name - The display name of the agent. Status - Alive: RTView has received an onAgentAlive event for this agent and it is currently active; Expired: RTView has received an onAgentExpired event and has not yet received another onAgentAlive event; Not Discovered - RTView is configured for this agent, but has not received an onAgentAlive event yet onAgentAlive Time - The timestamp of the most recent onAgentAlive event for this agent. onAgentExpired Time - The timestamp of the most recent onAgentExpired event for this agent. onAgentExpired Count - The number of onAgentExpired events RTView has received for this agent since startup. Data Received Time - The last time RTView received data from this agent. This may be subscription data or alert data. getSubscriptionStatus - this method returns the following columns containing information about the subscription: Agent - The display name of the agent Key - The key used internall to track this subscription. It contains the agent, microagent, method and listener information. Status - Pending: RTView has queued the subscription request, but it has not been processed yet; Active: RTView has processed the subscription; Cancelled: RTView has cancelled the subscription. Request Time - The time this subscription was requested. Create Time - The time this subscription was created. Create Length - The amount of time, in milliseconds, it took for Hawk agent to respond to the subscription request. Queue Length - The amount of time, in milliseconds, this subscription waited in the queue before RTView requested it from the agent. Data Received Time - The last time RTView received data for this subscription. Cancel Time - The time this subscription was cancelled. Cancel Reason - The reason this subscription was cancelled. No Listeners: There are no more listeners for this subscription; Microagent Removed: The microagent is not longer available; Agent Connection - RTView received an onAgentExpired event for the agent. For debug situations where you need to see these values over time instead of just the latest value, both of these tables can be attached to caches. For the getAgentStatus table, set the indexColumnNames on the cache to Display Name and for the getSubscriptionStatus table, set the indexColumnNames property on the cache to Key. In both cases, deselect the allowDuplicatesInHistoryFlag on the cache. Note that because both of these table are expensive you should not deploy caches containing this information in a standard deployment. They should be used in debug situations only as they will impact the performance of RTView.
Display Server
17608: Fixed memory leak associated with sessions
A memory leak has been fixed in the display server, which leaked a small amount of memory for each browser session.
17651: Fixed unstable position of tree control +/- icon
The following problem with the tree control in the thin client has been fixed: In IE8 or older versions, the horizontal position of the +/- icon on a non-leaf tree node in the tree control is unstable. (This is the icon that is clicked to expand/collapse the node). Sometimes it is positioned correctly just to the left of the node's folder icon, but sometimes it is incorrectly positioned along the left edge of the tree control. It wobbles back and forth when the mouse is moved over the tree nodes
17653: Display server no longer reopens display after panel resize
In the thin client, if the browser panel containing a display is resized and the resizeMode is set to scale or layout, the display server no longer reopens the display in the panel causing the display to revert to its initial state. However, this problem has not been fixed on the iPad because the fix had unwanted affects on table objects in displays using resizeMode = layout.
Drill Down
17105: Fixed problems in FFox with passing long sub strings
A problem has been fixed in the thin client that caused the display image to disappear if a drilldown set very long substitution strings on the display, in Firefox.
17637: Improved performance for large number of selected rows
In previous releases, drill down from a table with several thousand selected rows could be slow if the table was setting substitutions. This has been fixed.
17744: Allow attaching sub name to data in drill down target dialog
The Drill Down Target dialog has been enhanced to allow cells in the String column of the Drill Down Substitutions table to be attached to data.
Functions
17617: Max/Min Columns functions now work for Date type
The Min Columns and Max Columns functions have been enhanced to work on date columns. When using dates for these functions, both the First Column Name or Numeric Value and the Second Column Name or Numeric Value arguments must specify the name of a column of type date. These functions do not support entering a date string into either of those arguments.
17632: Improved performance of SortTable function on localized strings
The performance of Sort Table function when sorting on string columns has been improved.
17633: New "Use Fast String Compare" argument in SortTable function
An argument named "Use Fast String Compare" has been added to the Sort Table function. This argument can be set to 1 to obtain optimum performance when sorting a large table on a string column. If the "Use Fast String Compare" argument is set to 1, the java.lang.String.compareTo method is used to compare strings, which is fast but non-localized. If the argument set to zero, the java.text.Collator.compare method is used to provide a localized string sort, but the sort will be somewhat slower. By default, the argument is set to zero, for compatibility with previous version, in which the Sort Table function always performed a localized sort on strings. For example, say that a table contains a string column with 4 rows, as follows: ááá aaa bbb ccc Note that the first row contains accented lowercase A characters. If the Sort Table function is applied to this table with "Use Fast String Compare" = 0, the rows will be sorted into this order: aaa ááá bbb ccc Note that the row with accented lowercase A characters is next after the row with unaccented lowercase A's. But if the Sort Table function is applied to this table with "Use Fast String Compare" = 1, the rows will be sorted into this order: aaa bbb ccc ááá Note that the row with accented lowercase A characters is last. This is because the accented lowercase A character appears after all of the ascii characters in the Unicode characters set, which is the basis of the java.lang.String.compareTo method.
17664: $filterfield and $filtervalue are no longer set by default
By default, the $filterfield and $filtervalue substitutions are no longer set when the user performs a drilldown from a table object with a row filter defined on its valueTable data attachment, and the row name column in the table no longer includes the filterfield:filtervalue strings for each row. (The row name is visible only if the value of the rowLabelMode property on obj_table02 is > 0). Those features were rarely used and for performance reasons are now deprecated. However, if those features are required for existing displays, they can be enabled by specifying the option -rowfiltersubs when starting the builder, viewer, or display server. The option can also be specified as follows in OPTIONS.ini: rowfiltersubs true
17745: Convert Columns function no longer fails if string cell is null
The Convert Columns (TCVT) function no longer throws a NPE when converting a string column to a number (double, float, int, or long) if a cell in the column is null. Instead the null string is converted to a zero.
GmsTabularData
17635: GmsTabularData.newColumnSubset exception fixed
The GmsTabularData.newColumnSubset() method no longer throws an array bounds exception.
Local Variables
17639: Global var in main window can now be set if set earlier in popup
The following problem with global variables has been fixed: If a mapped global variable named $x was set via drilldown in a popup window, then $x could not be set by a drilldown in the main window until the popup window was closed. This occurred because the panel in the popup window immediately set $x back to its previous value.
Logging
17640: New display server option to truncate long subs in -verbose
The display server supports a new option -substracelim:N to limit the total number of characters of substitution name:values that the verbose output includes when tracing requests from the thin client. If no value is specified, the default is 1000. This prevents requests with very long substitution strings from quickly filling up the display server log. A value of 0 means that no limit will be applied to the subs listed by -verbose, as in previous releases.
Object Library
17607: Error handling for scales improved
The error handling on all of the objects on the scales tab has been enhanced as follows: 1. The valueHighAlarm and valueHighWarning are now allowed to equal the valueMin or valueMax. Previously, they had to be greater than valueMin and less than valueMax. 2. If the valueHighAlarm is greater than valueMax or less than valueMin, the valueHighAlarm will be disabled and the scale will draw without that threshold. An error will print to the console. Previously, this case caused the scale not to draw. 3. If the valueHighWarning is greater than valueMax or less than valueMin, or if valueHighWarning is greater than or equal to valueHighAlarm, the valueHighWarning will be disabled and the scale will draw without that threshold. An error will print to the console. Previously, this case caused the scale not to draw. 4. On the bullet scale, the compValue1 and compValue2 are now allowed to equal the valueMin or valueMax. Previously, they had to be greater than valueMin and less than valueMax. 5. On the bullet scale, if the compValue1 or compValue2 is greater than valueMax or less than valueMin, that threshold will be disabled and the scale will draw without that threshold. An error will print to the console. Previously, this case caused the scale not to draw.
17665: Thresholds on bar scale now draw correctly when valueMin != 0
In previous releases, the bar scale did not calculate the threshold ranges correctly when valueMin did not equal 0. This has been fixed.
Charts (General)
17574: New outlineColor property for 1-pixel black outline
A new property named outlineColor has been added to most objects on the Graphs palette. The property sets the color of the 1 pixel outline rectangle drawn around the legend area and each color swatch in the legend. The property appears in the Legend category and was added to the following objects: obj_bargraph, obj_legend, obj_pie, obj_radar, obj_trendgraph02, obj_stockchart, obj_xygraph. On obj_bargraph, obj_trendgraph02, obj_stockchart, and obj_xygraph it sets the color of the 1 pixel outline rectangle drawn around the plot area. On obj_bargraph it also sets the color of the 1 pixel outline drawn around each bar. The default value is black (color 7). In prior releases the color was black and was not configurable. The property was not added to obj_statushistory since the existing gridColor property fulfills the the same purpose. The objects on the Fx Graphs palette were not affected by this change.
Control Objects
17652: New initialExpandDepth property added to tree control
A property named initialExpandDepth has been added to the tree control (obj_c1tree). This property specifies the depth to which nodes should be automatically expanded (opened) when the tree is populated. All non-leaf nodes at a depth that is less than or equal to initialExpandDepth are expanded automatically. When calculating node depth, the root node has a depth of zero. (All trees have a root node but it is visible only if the rootNodeLabel property is set). The default value of initialExpandDepth is zero, which means that only the root node is expanded automatically. Use this property with caution on large trees, since the automatic expansion of a large number of nodes can cause slow performance. Changing the value of initialExpandDepth from a larger value to a smaller value will have no effect until the display containing the tree is reopened.
Tables
17658: Fixed table column resize problems with Firefox 12.0
A problem has been fixed that affected table objects in the thin client in Firefox 12. When resizing a table column by dragging its edge, the resize behavior would sometimes continue even after the mouse button was released.
Viewer - Multi-Panel Frameworks
17654: Main panel refresh after drilldown in other panel (thin client)
In a multi-panel configuration, the thin client will now refresh the display in the panel named "main" panel after a drilldown is performed in any other panel. This is useful in cases where a drilldown or control action in another panel sets a global variable that affects the display in the main panel. Prior to this enhancement, the display in the main panel was not updated until the next scheduled refresh of the thin client. The panel must be named "main" in the PANELS.ini file for this enhancement to be effective. Panels by any other name will not be refreshed until the next scheduled refresh of the thin client.
Version 6.0.1 Release Notes
Alerts
17433: Editing enabled for Warning/Alarm Levels in Tabular Alert Admin
In the previous release of the Self Service Alerts demo, the Warning Level and Alarm Level fields in the Tabular Alert Administration page were not enabled in the thin client. This has been fixed.
17445: TIME_STAMP column in audit tables now timestamp type
The Alert Action Audit Table and the Self Service Audit Table have been enhanced to use a Timestamp type instead of a String type for the TIME_STAMP column. Users upgrading from a previous release of RTView that use either of these tables will need to modify their table schemas so that the TIME_STAMP column uses the correct timestamp type for their database. For example, in MySQL the following SQL statement will modify the TIME_STAMP column: ALTER TABLE AUDIT_TABLE ALTER TIME_STAMP DATETIME
17447: Option to update sev on acknowledged alerts
RTView Alerts have been enhanced to support an option to update the severity of acknowledged alerts. Three of the alert types support changing the severity of an existing alert: Limits - If the skipDuplicateAlertsFlag is selected, the severity of an alert will update (e.g. valueHighWarning to valueHighAlert) without multiple alerts being activated. That is, only the highest (or lowest) alert will be activated when the input value exceeds both high (or low) thresholds. Multi-State - If the skipDuplicateAlertsFlag is selected, the severity of an alert will update without multiple alerts being activated. That is, only the highest severity alert will be activated when the input meets multiple conditions. Event - If the valueTableMap contains a mapping to the Severity, the severity of an alert will update whenever the mapped column changes. In previous releases, once an alert was acknowledged, the severity of that alert would no longer update. A new option, Update Severity on Acknowledged Alerts, has been added to the Alerts tab of the Application Options dialog. By default, this option is turned off so the behavior of existing applications will not change. If this option is selected, the severity of acknowledged alerts will update if the severity changes.
17448: Option to renotify when alerts change severity
RTView alerts have been enhanced with 2 new options for what happens to an alert the first time it's severity changes: 1. In the Alerts tab of the Application Options dialog, the Unacknowledge Alerts on First Severity Change option has been added. By default it is off. When selected, when an acknowledged alert's severity changes the first time, the alert will be unacknowledged. This means that the alert will start renotifying again if the reNotificationMode is configured to do so. It also means that if the reNofifyOnFirstSevChangeFlag is selected for the alert, it will renotify once regardless of the reNoficationMode. This unacknowledge action is not tracked in the Alert Action Audit Table since it is not a user action. 2. The limits, multi-state and event alerts have a new property, reNotifyOnFirstSevChangeFlag. By default, it is off. If selected, the alert will execute the reNotificationCommand if configured or the alertCommand when the severity of the alert changes the first time if the alert has not been acknowledged or if the Unacknowledge Alerts on First Severity Change application option is enabled. Note that the severity is only updated on acknowledged alerts if the Update Severity on Acknowledged Alerts application option is selected.
17467: Duplicate updates on Alert Table New Data Only attachments
In previous releases, duplicate updates were sometimes sent to New Data Only listeners for the AlertTable for multi-state and limits alerts with the skipDuplicateAlertsFlag turned on. This has been fixed.
17481: index override alert enabled flag no longer incorrect on Add
In the previous release, the Add button on the Tabular Alert Administration sometimes saved an incorrect value for Alert Enabled. This has been fixed.
17506: SSA Alert Settings table connection status now stable
In RTView 6.0.0, the Connected status of the Self Service Alert Settings table sometimes incorrectly toggled between true and false. This has been fixed.
17519: New option for accessing Action Audit db through Data Server
The Alert data source Alert Action Audit feature has been enhanced to support using a data server for access to the action audit database table. To use this feature, specify the name of a named data server connection in the Alert Action Audit Data Server field on the Alerts tab of the Application Options dialog. If specified, this named data server connection will be used for reading and writing to the specified Alert Action Audit Database Table.
17521: SSA now correctly handle enabledFlag=false on tabular alerts
In previous releases, there was an error in the processing of the enabledFlag for tabular alerts in Self Service Alerts. If the enabledFlag for an alert was false, the alert was disabled regardless of the enabled value in the Alert Settings Table. This has been fixed.
17534: Historian removed from alert persistence
The alert persistence feature has been enhanced for easier configuration. In previous releases, alerts were persisted via the Historian and required an RtvAgent to send the alerts from the alert engine to the Historian. Now, the alert engine persists the alerts to the database directly or via a data server. The Historian and RtvAgent are no longer required. The following options have been removed from the Alert Persistence Application Options and are no longer supported: Agent Name Agent Connection The Alert Persistence options have also been removed from the Historian and are no longer supported. The following options have been added to the Alert Persistence Application Options: Alert Engine Name - Unique identifier for this alert engine. Multiple alert engines can persist their alerts to the same database, so this value allows the alert engine to restore only alerts for this alert engine in the case of fail over. Data Server - The name of a Named Data Server connection to use for reading and writing alerts to/from the database. This is optional. SQL Response Time Out (seconds) - The timeout for querying alerts from the database. This is the amount of time RTView will wait for a response from the database query to get the persisted alerts. If your database connection is slow, or if you are using a data server to get your persisted alerts and its connection is slow, you should increase this value. Note that RTView blocks while waiting for this query to return. Create Database Table If Not Found - If true, RTView will attempt to create the alert persistence database table if it isn't in the database. In order to support this change, the persistence database table schema has changed as follows: The AgentName column has been renamed to AlertEngineName. Customers upgrading from a version previous to 6.0.1 must do the following: 1. Either delete the persistence table in the database and allow RTView to recreate it for you or rename the AlertEngineName column to AgentName. 2. In Application Options->Alert->Alert Persistence, fill in the Alert Engine Name to be the same value as you previously used for Agent Name 3. If you are not using the HISTORIAN for anything other than to persist alerts, you no longer need to run the Historian.
17548: Alert name and index added to action audit table
The Alert Action Audit feature has been enhanced to store more data to the database. For actions of type Event Management, the Alert Name and Alert Index will be stored to the database. The database table schema has changed to include the following columns immediately following the VALUE column: ALERT_NAME (String) ALERT_INDEX (String) The ALERT_INDEX will be empty if the alert is scalar. Both the ALERT_NAME and ALERT_INDEX will be empty for actions of type Configuration Management. Users upgrading from a version of RTView previous to 6.0.1 must update their database to contain the new ALERT_NAME and ALERT_INDEX columns as described above.
17549: Persistence no longer fails with Self Service Alerts
In previous releases, alert persistence sometimes failed when used in conjunction with self service alerts. This has been fixed.
17556: RTV\dbconfig\alert_persist extraneous file removed
In previous releases, the RTV\dbconfig\alert_persist directory contained an extraneous file named '. This file has been removed.
17561: New Data Only listeners are no longer updated twice
In previous releases, Alert data attachments with the New Data Only flag selected would get duplicate updates. This has been fixed.
17562: Synchronization problems in alert evaluation fixed
In previous releases, the alerts had a synchronization problem such that if one thread was updating the rowEnabledTable or threshold table at the same time another thread was evaluating alerts, an alert could be cleared incorrectly. This has been fixed.
17565: When alert persist db unavailable alerts no longer initialize
The initialization error handling for alert persistence has been enhanced. Previously, if the alert persistence database table was not immediately available on start up, alert initialization continued without loading in persisted alerts. Now, the alert data source will wait until the persistence Connection Time Out has expired before continuing with alert initialization. By default, the Connection Time Out is 60 seconds. You can override this on the Alert Persistence tab of the Application Options dialog.
17572: Time value is now persisted correctly
In previous releases, the Time value for persisted alerts was not applied correctly. Instead, the time the alert was restored was used. This has been fixed.
Builder
17376: Concatenate Columns function is now alphabetized
In previous releases, the Concatenate Columns function was listed out of alphabetical order in the Edit Function dialog. This has been fixed.
17377: Custom functions not found no longer causes bad rtv file saves
In previous releases, custom functions were not saved correctly if the custom function descriptor was not loaded. This has been fixed.
Builder - Options Dialogs
17378: Subsitutions list sorted in General Options
In previous releases, substitutions in the Application Options dialog were not presented in alphabetical order. This has been fixed.
17403: customds stored in OPTIONS.ini retained on resave
In previous releases, if a custom data source was store in the OPTIONS.ini, it would be lost when the OPTIONS.ini was re-saved. This has been fixed.
Commands
17504: Multiple Command dialog label fixed
In previous releases, the Define Multiple Command dialog showed the wrong label for the alert commands. This has been fixed.
Data Historian
17415: -rebuildtables can now take table names
It is now possible to specify specific database tables be rebuilt at Historian run time. e.g. -rebuildtables:Table1,Table2,Table3 Table names are case-sensitive and may not contain space characters.
17487: Historian now sets autocommit = false in batch mode
The performance of the Historian's batch mode has been improved. Batch mode is enabled by the "Cache Data" checkbox. See the documentation for more information.
17590: Redundant Historian crashes if agent datasource disabled
A bug has been fixed which causes the historian to crashes at startup if the historian was in a redundant historian group and the agent data source was not enabled.
Data Server
17335: Multi-Server commands and attachments now supported
A list of data server names can now be specified in the "Data Server" field of all data attachment dialogs and data source command dialogs. This makes it possible to configure a single data attachment or command that is directed to multiple data servers. This capability is referred to as a "multi-server attachment" or a "multi-server command". The list entered in the Data Server field should contain two or more data server names separated by semicolons, for example: Data Server: ds101;ds102 Each name in the list should match a data server specified in the Named Data Servers dialog (opened from the Data Server tab of the Application Options dialog) or __default for the default data server if any, or __none for the local RTView application itself (e.g. Builder,Viewer). Note that __default and __none begin with two underscore characters. Alternatively, a single asterisk can be entered in the Data Server field to specify all data servers, including the default data server and local application, if applicable. One or more substitution strings can also be entered in the Data Server field. If a list of data server is specified for a data source command, the command will be executed on each data server in the list. If a list of data servers is specified for a data attachment, the attachment will be directed to each data server in the list. For tabular data attachments, a column named "DataServerName" will be added as the first column of the table and will contain the name of the server from which the data was received. A multi-server attachment will receive data independently from each of the servers it specifies. So in most cases, it will be necessary to combine the tables received from a multi-server attachment into a single table. This can be accomplished in two ways: 1) The multi-server attachment can be applied to a local cache which has the DataServerName column specified as an index column. The current table of that cache will contain the combination of the tables received from all servers. (It may also be necessary to configure the cache row expiration features to remove defunct rows). 2) The multi-server attachment can be applied to the Table argument of an instance of the RTView function named "Combine Multi-Server Tables". This is a new function in this release, and has the following description: "Combine tables from a multi-server data attachment into a single table, using the DataServerName column as the index column. (A multi- server data attachment is one in which the Data Server field is set to * or a semicolon-separated list of Named Data Server names). The function takes the following argument: Table - The table to be combined with any previous result. It is assumed that the value of this argument will be supplied by a multi- server data attachment. A column named "DataServerName" will be inserted as column zero of the table. The column will be populated with the name of each data server from which a table has been received. When a data table is received from server named X, it is combined with the previous result table, replacing any existing rows from server X. The combined table is returned by the function, and is stored internally for use on the next update from any server specified in the attachment.
17357: Support recycling client connection numbers if limit met
The RTViewDataServer JMX MBean supports two new integer attributes: ConnectionRequestCount : the total number of socket connection requests received from clients ConnectionRequestFaliedCount : the total number of socket connection requests that failed, because of client/server version mismatch or non-RTView client The data server will recycle unused client connection numbers if it reaches its internal limit of 10,000. This can be an issue if client applications from RTView versions prior to 5.9 attempt repeatedly to connect to the data server.
17417: Better error reporting for port conflict
When the data server or display server cannot create a server socket because the port is already in use, the port number and the server's class name will now be indicated in the error message.
17474: NPE thrown by dataserver if pre-5.9 client connects
A bug has been fixed which could cause the data server to throw a null pointer exception and refuse any new client connections after repeated connection attempts from a client running an earlier and incompatible version of RTView.
17546: Client listeners metadata table supported by Data Server
The XML data source now supports attachments to a source named RTViewDs.Server, which provides information about all listeners that a data server is currently maintaining for all of its clients. The RTViewDs.Server source supports the following Data Keys: 1) listeners: This will display a table with one row for each unique data attachment for each client of the data server. The "Client ID" column displays the numeric ID of the client. The "Address" column shows the IP address of the client and the "Host" column shows the hostname of the client, if available, or simply "http" if the client is connected via the rtvdata servlet. The "Adapter" column shows the name of the RTView data adapter or data sources used in the client's attachment. The "Key" column displays the entire data attachment string. The "Listeners" column shows the total number of listeners for the attachment string. The "Pushed" column shows the time when data was most recently pushed from the server to the client. The "Seq" column shows the sequence number assigned to that data push. 2) cacheListeners: This will display a table with one row for each unique cache data attachment for each client of the data server. It contains most of the same columns as in the "listeners" table described above, plus additional columns for the most commonly used fields in a cache data attachment (Cache name, table name, columns, filter columns, filter values). The "Local" and "Adapter" columns are not specified since only client attachments for the cache data adapter are shown. The data server updates the RTViewDs.Server tables listed above every 10 seconds. The RTViewDs.Server source will not appear in the dropdown list of XML sources in the Attach to XML Data dialog, instead the RTViewDs.Server name must be entered manually in the XML Source field. The information provided by the RTViewDs.Server xml source is similar to the information provided by the RTViewDs xml source (The RTViewDs source is described in the Release Note for 16934). But there is an important distinction: The RTViewDs.Server source provides information from a data server about all listeners from all of its clients. The RTViewDs source only provides information about listeners that the current client (builder, viewer) has redirected to data servers.
Data Sources
CMDB Data Source
17312: Relationships moved to a separate database table
The CMDB data source has been enhanced to support a Relationship Table. This table contains all relationship information for Containers and Metric Sources. The name of the Relationship Table must be specified in the CMDB Application Options tab. The Relationship Table must have the following columns with the specified names and types in the order listed: ID1 (String) The name of the parent container. ID2 (String) The name of the child container or metric source. TYPE (String) The relationship type. Currently, only PC (parent-child) is supported. The Parent field has been removed from the Metric Source and Container tables. Customers using the CMDB that are upgrading from a release previous to 6.0 will need to do the following: 1. Create a Relationship Table as specified above. 2. For each row in their Container and Metric Source table where a parent value is listed, add a row to the relationship table where ID1 is the value in the Parent column and ID2 is the value in the Name column. 3. Remove the Parent column from the Container and Metric Source tables. 4. Specify the name of the Relationship Table created in step 1 in the CMDB Application Options.
Cache Data Source
17363: New listener to history_combo table now receives current data
A bug in the data server has been fixed which in some conditions caused an attachment to a cache's history_combo table to receive stale initial data.
17423: Column names now shown in the attach to data dialog
In the previous release, the Column Name dropdown list in the cache data dialog was not always populated from the data server. This is fixed. Another symptom of this problem, also fixed, is that queries made to the RTViewDs cache metadata tables via the rtvquery (REST) servlet would show stale data.
17465: Exception if cache with no timestamp has row expiration
In previous releases, if a cache was configured with a blank timestampColumnName and rowExpirationMode was not set to "Off", an ArrayIndexOutOfBoundsException was thrown. This is fixed.
JMS Admin Data Source (for TIBCO EMS only)
17414: Connection ID added to routes table
The Routes table in the EMS Administration Data Source has been enhanced to include a connectionID column. This column contains the connection ID of the route or 0 if the route is not connected.
JMX Data Source
17513: Allow 'security.SSL.trustedCAKeyStore' to be passed as jmx prop
The JMX Data Adapter now supports 'weblogic.security.SSL.trustedCAKeyStore' to be passed as JMX connection property.
17536: Fixed NPE thrown when mBeans send nulls in columnNames
A fix was made to the JMX Data Adapter for NullPointerExceptions in the console that appear if mBeans send over nulls in the columnNames array during processing.
SQL Data Source
17406: Lost connection to Sybase ASE now reported
In previous releases, RTView could not detect a lost connection to a Sybase ASE database server. This has been fixed.
17461: Check for lost connection when SQL command fails
If an sql command fails, RTView will test the database connection to see if the connection has been lost, and if so it will disconnect and reconnect and retry the command. In prior releases, a lost connection was only detected after an sql query failed.
17493: Corrected crash due to login to expired sybase account
In prior releases, if RTView connected to a Sybase ASE database using a valid username and password but the password had expired, a null pointer exception was thrown. This is fixed.
17544: SQL command to disable/enable connections
An SQL command can now be configured to disable or enable a database. When a database is disabled, RTView will not attempt to make any queries on that database or attempts to reconnect until the database is enabled again. When a database server needs to be shutdown for maintenance, the new command can be used to disable the database and avoid repeated connection attempts/failures from RTView. It can also be used to disable a database connection that has become unreliable, and then enabled again to make a new connection. To define an SQL command to disable a database named X, enter the following in the Define SQL Command dialog: Database Name: X SQL Command: rtvEnableDB=false Queries: (N/A, value is ignored) Note the the SQL command string must be entered exactly as shown, with no embedded spaces. To define an SQL command to enable a database named X, enter the following in the Define SQL Command dialog: Database Name: X SQL Command: rtvEnableDB=true Queries: (N/A, value is ignored) Note the the SQL command string must be entered exactly as shown, with no embedded spaces. To define an SQL command to disable a database named X and then immediately enable it again, enter the following in the Define SQL Command dialog: Database Name: X SQL Command: rtvEnableDB=false;rtvEnableDB=true Queries: (N/A, value is ignored) Executing a "rtvEnableDB=false" command has no effect if the database is already disabled, likewise for the "rtvEnableDB=true" command on an enabled database. The SQL RTViewDs.Connections table, which displays metadata about RTView database connections, now includes a column labeled "Enabled". The value in the Enabled column will be checked (true) for all database connections except for those on which the "rtvEnableDB=false" has been executed.
17545: SQL property timeout applicable to all queries
The SQL data source now supports a default timeout for all SQL queries. The default timeout can be specified with the following command line option: -sqlquerytimeout:NN The timeout can also be specified in OPTIONS.ini as follows: sqlquerytimeout NN In both cases, NN is the default timeout in seconds. If any query takes longer than NN seconds to complete, and the query does not have its own timeout specified via the rtvTimeout parameter (described in the Release Note for 15413), it will be aborted. The next execution of the query will be delayed for NN seconds or 2 minutes, whichever is less. Messages similar to the following will appear in the console window of the RTView application: ERROR: SQL query timeout after NN seconds; db=MyDatabase; query=<select * from MyTable>; *** done query, rows = -1, time = NN.nnn (NN.nnn), MyDatabase: select * from MyTable delayed by timeout:select * from MyTable
17559: Skip query with empty database name
If the database name specified in an SQL data attachment is an empty string the query will be ignored. In prior releases, the following error message was generated repeatedly: Unable to connect to database <>
Display Server
17395: Date chooser now initializes time correctly
When the date chooser (obj_c1datechooser) is activated with no selected date, the current day and time should be selected. In previous releases, the thin client version of the date chooser set the date to the current date, but set the time to midnight. This has been fixed.
17431: Deselect on multiselect table no longer mishandles substitutions
In previous releases, if a table object has multiSelectFlag=1 and the user deselects the only selected row, in some cases the thin client will mishandle the table's drilldown substitutions which can result in invalid data attachment strings that use those subs. This has been fixed. In addition, to be consistent with the Viewer behavior, deselection of the only selected row in the table will not trigger a drilldown.
17444: Extra SL logo in thin client panel layout after restart fixed
In previous releases, an extra SL logo would sometimes appear in the thin client demos using a panel layout, if the display server was restarted and the thin client page was not reloaded. This is fixed.
17463: Thin client no longer shows
for newline in column headerIn release 6.0, the thin client displayed "
" in a table column header where a newline should have appeared. This is fixed.
17468: New option -pngcompress
A new option has been added to the display server to specify the desired compression level for png images. By default, png images are compressed as much as possible, which can be a cpu-intensive operation. On systems where the display server cpu usage is a bottleneck, it may be advantageous to lower the png compression level. This can be accomplished by the following command line option: -pngcompress:N The png compression level can also be specified in DISPLAYSERVER.ini as follows: pngcompress N In both cases N is a value from 1 to 9. The default value is 9 (maximum compression), which produces the smallest possible png image (in bytes) in order to minimize the image data transmitted to the client. Values less than 9 will require less cpu time to produce the png image, but the image will be larger. A value of 3 is a good compromise between speed and size. Note that the image creation time and size for each display refresh is shown in the display server console output if the -verbose option is specified at startup. As in prior releases, the display server will choose either png format or jpg format for each display, depending on which format produces the smallest image size in bytes. The size of jpg images is affected by the -imagequality option which is a value between 1 and 100, with 100 being the highest quality but lowest compression. The default imagequality is 75.
17542: Preserve table row selection in thin client across updates
The thin client will now maintain the selected rows in a table object when a data refresh occurs that changes the number of rows in the table. In prior releases, the row selection was cleared in that case. If the table object has the indexColumns property defined, then the index column values will be used to maintain the row selection, as described in the Release Note for 12468. If indexColumns is not defined, then the row selection is maintained by row number. This is also described in the Release Note for 12468.
Distribution
17404: encode_string utility corrected to work on Linux
The encode_string utility now works on Linux platforms.
17490: New jarsigning certificate (April 2015)
The certificate used in the signed .jars (RTV_HOME\lib\signed_jars.zip) has been updated and will be valid until April 2015.
17539: TSN requirement removed
Users are no longer required to provide the TSN (Tape Serial Number) when installing RTView. As such, the registration app (run_gmsregister) no longer includes a field for the TSN.
Functions
17372: EnsureColumns no longer creates NULL strings if no value
The Ensure Columns function will now always fill a new string column with empty strings, rather than null.
17373: Fixed performance issues with Delta Rows function
The performance of the Delta Rows function and the Delta Rows And Rate function has been improved to better handle data in which the set of index values is not fixed. Also, an additional argument has been added to both function to avoid continual growth of the internal table that is used to store previous column values for each index value. The description of the new argument is as follows: Row Expiration Time - To compute the delta values, an internal table containing the previous value for each index value is maintained. If a row in that table is not updated in the time interval specified, it is removed. Specify the interval in seconds or specify a value followed by m, h, d, for minutes, hours, or days. The default value is blank which means rows are never removed.
17374: GmsTabularData string columns now initialized with empty strings
Cells in string columns in data tables will now be initialized to an empty string rather than a null, to avoid null pointer exceptions in code that does not expect null values in string cells.
17387: GroupBy max function exception if null string in column fixed
A bug has been fixed in the GroupByTimeAndUniqueValues function which caused an exception to be thrown if the "max" operation was applied to a string column that contained one or more nulls.
17388: Evaluate Expression by Row now creates column if no data
In previous releases, the Evaluate Expression By Row function would not add the result column to its output table if the input table contained columns but no rows. Now the function will add the result column in that case.
17389: Filter by Patt no longer returns null if input table has 0 rows
In previous releases, if the input table to a Filter by Pattern function contained columns but no rows, the function returned null. This was incorrect. Now the function will return a table with the same columns as the input table, and no rows.
17394: GroupBy type count now creates column when used with other types
The functions "Group By Unique Values" and "Group By Time And Unique Values" will now automatically add a column named Count to the result table when the function is configured with multiple Group Type operations, the last being "count", and the number of data columns in the given Table argument is less than the number of operations.
17401: New Function ReplaceValuesRows
A function named Replace Value in Rows has been added. The function description is as follows: The Replace Value function replaces text in the input column with text from Replacement Values. Table - The input table. Column Name - The column containing the values to be replaced with associated text from the Replacement Values string and be output in the NewColumnName column. Result Column Name - The name of the column to be created. Replacement Values - String that contains pairs of values and replacement values separated by :'s. If any of the values or replacement values specified in Replacement Values contains a space or a colon, it must be enclosed in single quotes. Return Value If No Match - Determines what value is stored in the result column for a row with no match. If > 0 the original value from the input column will be used, otherwise the Default Value is used. Default Value - The string that is stored in the result column if there is no match and Return Value If Not Match is <= 0.
17402: MarkTimeGaps now converts long columns to double
The Mark Time Gaps function will now work properly with a column whose data type is long. In prior releases, it worked for double, float, and int columns but not long type columns.
17410: Result column name can be specified for GroupBy function
The "Group By..." functions have been enhanced to allow the name of the result column(s) to be specified. This is accomplished by adding a suffix of ":ColumnName" to each operation in the function's Group Type argument. For example, if the Group Type argument's value is "avg:Average Value", the average of the first data column in the function's input table will be stored in a column named "Average Value" in the result table. If there is more than one data column in the input table, then the average value of the Nth data column will be stored in a column named Average ValueN, starting with N=1 for the 2nd data column.
17412: Combine now returns empty table if both inputs contain no rows
The Combine function has been modified to return a table rather than a null in the case where both input tables have no rows, and to use all columns from both input tables even if one or both tables have no rows.
17488: Fixed exception in GroupBy function if index col missing
In prior releases, if the "Index Column Name(s)" argument to the GroupBy function included a mix of valid and invalid column names, an error message identifying the column name was printed to the console, but in some cases that was followed by an exception and stack trace. This has been fixed so that only the "Invalid column name" message appears.
17489: Function attached to undefined function will now update
The following problem is fixed: If a function F1 has an argument X that is attached to function F2 but F2 is no longer defined then F1 will never update. This can happen if F2 was deleted at some point after F1 was defined, or if F2 is defined in an include file that is no longer included by the display that defines F1. Prior to release 5.9.1, and now again in this release, F1 is evaluated with argument X set to null. A related problem was also fixed that prevented the Get Substitution function from updating if its Substitution String argument specified a substitution whose value was '' (an empty string).
17515: Drilldown branch now correct if functions stored in wrong order
The following problem has been fixed: A drilldown branch function may not return the expected value if the function relies on the results of other functions and the functions are stored in the wrong order in the rtv file. For example, say that F2 is used as a dd branch function and F2 has an input argument that is attached to the result of F1, but in the rtv file F2 appears before F1. In some cases, when the drilldown is performed the result of F2 used in the dd branch may appear as though F1 was never updated.
17516: Last Column Count added to function statistics table
The RTView function statistics table is available via JMX. That table now includes a columns that shows the number of columns contained in the most recent result for each function. The name of the new column is "Last Column Count". It appears just after the existing column named "Last Row Count", which shows the number of rows in the most recent result. Both columns will show zero for a function that returns a scalar result.
General
17393: Support for date and time string in ISO 8601 format
RTView will now accept a date and time string in ISO 8601 format. The format accepted by RTView is: YYYY-MM-DDThh:mm:ss.sZ where: YYYY = four-digit year MM = two-digit month (01=January, etc.) DD = two-digit day of month (01 through 31) T = the separator indicating that time-of-day follows hh = two digits of hour (00 through 23) (am/pm NOT allowed) mm = two digits of minute (00 through 59) ss = two digits of second (00 through 59) s = one or more digits representing a decimal fraction of a second Z = time zone designator (Z or +hh:mm or -hh:mm) The fractional second and the timezone are optional. All other fields are required or RTView will not parse the string. For example, this string is acceptable: 2011-10-22T12:34:56 This string is unacceptable because it omits seconds: 2011-11-22T12:34 The ISO 8601 format is automatically recognized by RTView. It is not necessary to add a format on the Date Formats tab of the options dialog. The format is formally described here: http://www.w3.org/TR/xmlschema-2/#dateTime ISO 8601 is described here: http://www.w3.org/TR/NOTE-datetime.
17418: Unique class names for each RTView server process
In prior releases, the RTView server applications (Historian, Data Server, Display Server, and Agent) all used the same java main class: GmsJRtvHistorian or, for daemon mode, GmsJRtvHistorianDaemon. This could be confusing when viewing a list of running java processes via jps, or jconsole, etc. In this release, each application has a unique main class, namely RTViewHistorian, RTViewDataServer, RTViewDisplayServer, and RTViewAgent. All of those new classes belong to the com.sl.gmsjrtvhistorian package. The class name will not change if the -daemon option is specified, but otherwise the -daemon option has the same affect as in prior releases. If it is desired to use the old class names for any reason, specify the -oldclassnames option when using the run_historian, run_dataserver, or run_displayserver scripts. Custom scripts that use the GmsJRtvHistorian or GmsJRtvHistorianDaemon classes to start an RTView server do not need to be altered. But, if desired, they can be altered to use the new specific class names instead. Note that the new classes use daemon mode by default, so if they are used in a custom script the -gui option must be specified in order to open the Historian or Data Server GUI. If the RTViewDataServer class is used in a custom script to launch the Data Server, it is not necessary to specify the -dataout or -socket option. If the RTViewDisplayServer class is used in a custom script to launch the Display Server, it is not necessary to specify the -display or -image option. If the RTViewAgent class is used in a custom script to launch the Agent, it is not necessary to specify the -dataout or -agent option.
17578: Improved NaN handling in obj_table02 and sorting
The behavior of obj_table02 regarding NaN ("not-a-number") values in a column containing floating-point values has been enhanced as described below. (Note that a column containing floating point values is either a column whose data type is defined as double or float, or whose data type is string but all of the strings in the column are either numbers or NaN). 1. A row with a value of NaN in the sort column will sort to the bottom in an ascending (increasing value) sort and to the top in a descending sort. In prior releases, the position of a row with a NaN value was not affected by the sort and rows adjacent to the NaN row could be sorted incorrectly. 2. A property named textForNaN has been added to obj_table02. This property can specify an optional string to be used to display NaN values in the table, for example "unknown". By default, the property value will be blank and NaN will be shown as a 'box' character, as in prior releases. Note that the textForNaN value only affects the text displayed in the table cell for a NaN value, it does not affect the column sort or the value assigned to a drilldown column substitution for the column.
GmsTabularData
17420: GmsTabularData.newColumnSubset exception fixed
The GmsTabularData.newColumnSubset() method no longer throws an array bounds exception.
Licensing
17567: KEYS file now created by run_gmsregister on LINUX
In 6.0.0 the run_gmsregister unix shell script did not pass additional arguments to the registration app, so the -writekey argument was not applied. This has been fixed.
Logging
17097: Support RTView logging with Log4J
Optional support for logging with Log4j was added.
17380: Error if designated log directory doesn't exist
In previous releases, if the log file specified by the -logfile command line option could not be created a stack trace was printed. This has been fixed so that an error message is printed instead.
Object Library
17263: New Dynamic Tree Control
Overview ========= A tree object is now supported for use on RTView displays. In the Builder, the tree object appears on the Controls tab of the Object Palette. The tree is populated from the contents of the data table attached to its valueTable property. Two table formats are supported for the valueTable, called the Row-Leaf format and Row-Node format. These are described later in this note. As with other controls, the tree control has an actionCommand property which can be configured to open a drilldown display, set substitutions, or execute a command in response to a user click on a tree node. As with other table-driven objects, the drillDownColumnSubs property can be configured to set substitutions to column values from the row in the valueTable that corresponds to the selected tree node. Each tree node can optionally display two configurable icons, one indicating the node's type and the other indicating its status. The type icon for each node can be determined either by the value of a column in the valueTable or by the node's position in the tree (e.g. a folder icon for a non-leaf node, a document icon for a leaf node). The status icon for a node is determined by the value of a specified column in the valueTable. optionally, the status of a child node can be propagated up to its ancestors. Row-Leaf Format for valueTable ============================== The format of the valueTable is indicated by selecting either Row-Leaf or Row-Node as the value of the tree's valueTableFormat property. The default format is Row-Leaf. The Row-Leaf format is intended for use when the valueTable property is attached to an indexed table, for example the current table of an indexed cache. In the Row-Leaf format, a leaf node is added to the tree for each row in the valueTable. The path to that leaf node (that is, the ancestor nodes of the leaf) is determined by the values in each of the table columns specified by the nodeIndexColumnNames property. If the valueTable is attached to the current table of an RTView cache, then the tree's nodeIndexColumnNames property would typically be set to the same columns that are specified as the cache's index columns. For example, say that a cache named Processes has two index columns named Server and PID, and the current table in that cache has the following rows: Server; PID ----------- A; 101 A; 105 A; 123 B; 100 B; 105 If a tree control's valueTable property is attached to the table shown above and the tree has valueTableFormat=Row-Leaf and nodeIndexColumnNames=Server;PID then the tree would contain 2 top level nodes, labeled A and B. Node A would have three child nodes labeled 101, 105, 123. Node B would have two child nodes, labeled 100 and 105. The structure of the tree is shown below. Note that there is one leaf in the tree for each row in the table. + A ... 101 ... 105 ... 123 + B ... 100 ... 105 Now say another index column named Site was added to the Processes cache and the current table now has the following rows: Site; Server; PID ----------------- NYC; A; 101 NYC; A; 105 NYC; A; 123 NYC; B; 100 NYC; B; 105 SF; A; 101 SF; A; 133 SF; B; 100 TYO; A; 107 TYO; C; 123 TYO; C; 278 If the tree's nodeIndexColumnNames=Site;Server;PID then the tree would contain 3 top level nodes labeled NYC, SF, and TYO. The NYC node would have two children labeled A and B, and the NYC/A node would contain three child nodes labeled 101, 105, 123. And so on, resulting in the following tree structure: + NYC ...+ A ...... 101 ...... 105 ...... 123 ...+ B ...... 100 ...... 105 + SF ...+ A ...... 101 ...... 133 ...+ B ...... 100 + TYO ...+ A ...... 107 ...+ C ...... 123 ...... 278 As shown in the examples above, the label string for a node at depth N is taken from the Nth column in nodeIndexColumnNames. So the labels for the top level nodes come from the first column in nodeIndexColumnNames (Site), the second level node labels come from the second column in nodeIndexColumnNames (Server), etc. If a different set of columns from valueTable should be used to provide the node labels, the names of those columns can be specified in the nodeLabelColumnNames property. Row-Node Format for valueTable ============================== In the Row-Node table format, there is one row in the table for each node in the tree, not just the leaf nodes. One column in the table contains an ID string for the corresponding tree node. That column is identified by the nodeIdColumnName property. Another column in the table contains the ID of the node's parent node. That column is identified by the parentIdColumnName property. Taking the first example tree shown above: + A ... 101 ... 105 ... 123 + B ... 100 ... 105 Using the Row-Node format, a table representation of this tree would be as follows: Node; Parent ------------ A;
101; A 105; A 123; A B; 100; B 105; B The entries represent an empty string, which indicates that nodes A and B have no parent, making them top-level nodes in the tree. Note that a node's ID string must be unique among all nodes with the same parent. Or, if the uniqueNodeIdFlag property is checked, then each node's ID string must be unique in the entire tree. By default, a node's ID string is used as the node label in the tree. If a different column in the table should provide the label, the name of that column can be specified in the nodeLabelColumnName property. Note that in the Row-Node format each branch of the tree can have a different depth, while in the Row-Leaf format all branches typically have the same depth (the number of columns specified in the nodeIndexColumnNames property). Icons ===== As mentioned above, each node can display a type icon and status icon. The type icon for each node is determined by the value of nodeTypeProperties. Clicking on nodeTypeProperties in the property sheet will open a dialog containing a table with two columns labeled "Node Type or Depth" and "Image". By default, the first row in the table has "non-leaf node" in the first column and a folder icon in the second column, while the second row has "leaf node" in the first column and a document icon in the second column. This means that, by default, all non-leaf nodes in the tree will use a folder image and all leaf nodes will use a document image as their type icon. The user can click in the Image column to select a different image to be used for the corresponding node type, or clear the Image column so that no icon is used for a particular node type. By default, the next five rows contain the numbers 0 - 4 in the first column. These rows allow a different icon to be assigned to nodes that appear at those depths in the tree, with zero being the root node. (Note: The root node is invisible if the rootNodeLabel property is blank). If an icon is assigned for a specific depth that icon assignment will override any assigned to leaf or non-leaf nodes. By default, the Image column for all of those rows is blank meaning that no specific icon is used for nodes at each depth, and the non-leaf or lead node icons are used. In the dialog, a "New" button appears below the last row. Clicking the New button allows the user to add a custom row to the table. If a column name has been assigned to the nodeTypeColumnName property, a dropdown list of the values from that column in the valueTable will appear in the "Node Depth or Type" column. The user can select a value and then in the Image column select the icon to use for all nodes that have that value in the valueTable row that corresponds to the node. If there is no nodeTypeColumnName, the user can type a string in the "Node Depth or Type" column and any node whose label matches that string will use the icon selected in the Image column. So, the type icon for node N is determined as follows: 1) If nodeTypeColumnName specifies a column name C, and the value of C in the valueTable row that corresponds to N is V, and there is a row in nodeTypeProperties that assigns alue V to image I1, then I1 will be used as the type icon for N. 2) Otherwise if the label of node N is XYZ and there is a row in nodeTypeProperties that assigns value XYZ to image I2, then I2 will be used. 3) Otherwise if the depth of node N is D and there is a row in nodeTypeProperties that assigns depth D to image I3, then I2 will be used. 4) Otherwise if N is a leaf and the leaf node image is I4 then I4 is used. If I4 is blank then no type icon appears. 5) Otherwise if the non-leaf node image is I5 then I5 is used. If I5 is blank then no type icon appears. The status icon for each node is determined by the value of nodeStatusProperties. That property is visible only if the nodeStatusColumnName property is non-blank. Clicking on nodeStatusProperties in the property sheet will open a dialog containing a table with three columns labeled "Status Value", "Image", and "Priority". By default there are no rows in the table so by default no status icons appear in the tree. If the user clicks "New" and then clicks in the Status Value column, a dropdown list appears containing all values in the node status column of the valueTable. The user can select a value and then an image that should appear as the status icon for each node which has that value in the status column. It is assumed that the status column values will be discrete values, so they are compared for equality. The value of the priority column is used to propagate a node's status information up to its ancestors so that the status icon shown for an ancestor node will correspond to the current highest status priority of all of its descendants. A priority value of zero is not propagated, all positive priority values are propagated. If a node has a type icon, it will appear to the left of the node's label. If a node has a status icon, it will appear either to the left or right of the node's label, according to the value of the tree's nodeStatusIconPos property. (The default value of that property is "Left"). If a node has both a type icon and a status icon, the type icon will always appear to the left of the status icon. For convenience, the nodeTypeProperties and nodeStatusProperties can both be attached to data. The nodeTypeProperties should be attached to a 2 column table and nodeStatusProperties should be attached to a 3 column table. Typically, an attachment to a static XML file that contained the appropriate tables would be used. The column names are not important. For nodeTypeProperties the first column should contain string values of "_node" (for non-leaf nodes), "_leaf" (for leaf nodes), or numeric values for depth, or string values that match the node labels or the values from the column in valueTable specified by nodeTypeColumnName. The second column should be the path to the png, gif, or jpg image. The default assignments are: _node, rtvTreeNode16.png _leaf, rtvTreeLeaf16.png For nodeStatusProperties the first column should contain string values that match values from the column in valueTable specified by nodeStatusColumnName. The second column should be the path to the png, gif, or jpg image. The third column should contain the non-negative integer priority value. Other Properties (with behavior unique to the tree control) ================ valueColumnName : This specifies the name of the column whose value should be assigned to the variable named $value when a node in the tree is clicked. If not specified, the label string of the selected node will be assigned to $value. Note the $value is the only substitution that can be used in the Display Name field of a drilldown command. mouseOverFlag: If checked, a tooltip will appear when the cursor is positioned over a node. The tooltip will contain the node's path (its label preceded by the labels of all of its ancestors), the node's status (if nodeStatusColumnName is specified), and its value (if valueColumnName is specified). execOnLeafOnlyFlag: If this property is checked, then the tree's actionCommand will be executed only when a leaf node is clicked. A click on a non-leaf node will just expand the node. Also, the mouseover tooltip will only appear for leaf nodes. rootNodeLabel: The label for the tree's one and only root node. If this is blank (the default), the root node is not visible. Limitations =========== In the Viewer: - Mouseover text is displayed only if the tree has focus. In the thin client: - The tree nodes' appearance, spacing, fonts, etc in the thin client may vary slightly as compared to the Viewer, and also may vary slightly between different browsers. - Cannot expand/collapse a tree node by double-clicking it, must click on +/- icon. - In IE, nodes can be expanded/collapsed even if the tree's enabledFlag property is unchecked. (But the tree's command cannot be invoked). - In Firefox, the horizontal scrollbar may appear and disappear after each mouse click in the tree. - In iOS Safari (iPad), if a tree's mouseOverFlag property is checked, the user must touch tree a node twice to invoke the tree's command. The first touch only displays the node's mouseover text. - In iOS Safari, a touch on the +/- icon will expand/collapse the node as expected but will also perform the tree's command, if the execOnLeafOnlyFlag property is unchecked. - In iOS Safari, scrollbars will not appear in a tree control. If the tree contains more nodes than are visible, use a two finger drag gesture inside the tree area to scroll the tree.
17491: New option for GTE and LTE added to obj_ind_(limits/multi)
The limits indicator (obj_ind_limits) and multi-state indicator (obj_ind_multi) have been enhanced. The limits indicator has been enhanced with a new property, valueEqualTriggersThresholdFlag, in the Data category. When this flag is off, the indicator changes color\image when the value is greater than the high thresholds (valueHighAlarm or valueHighWarning) or less than the low thresholds (valueLowAlarm or valueLowWarning). This was the previous behavior. When this flag is on, the indicator changes color\image when the value is greater or equal to the high thresholds or less than or equal to the low thresholds. This property is turned on by default in the Object Palette. This property will be off for displays created in previous releases so that the behavior of existing displays will not change. The multi-state indicator has been enhanced with 2 new options for the alertStateNCondition property: Greater Than or Equal To - The value must be greater than or equal to alertStateN for alertStateN properties to be applied. LessThan or Equal To - The value must be less than or equal to alertStateN for alertStateN properties to be applied.
Composite Object
17438: Global var now applied as sub inside composite display
The following problem is fixed in this release: If a display is used in obj_composite and the display contains data attachments that use a sub $x, and $x is a global variable that is defined in a global definition file but $x does not also appear as a sub in OPTIONS.ini, then $x is not substituted when the display is loaded. This results in RTView adding an invalid listener which does not get removed when the display is closed.
Control Objects
17517: Combo box list now always updates when listValues changed
A problem in obj_c1combobox has been fixed which caused it to ignore changes to the listValues property in some cases.
Heatmap
17371: Improved handling of null and empty string index column values
In previous releases, the heatmap did not handle null or empty string values in index column properly. If an index column contained a null value, the heatmap threw a NullPointerException. This has been fixed. If an index column contained an empty string value, the heatmap displayed the wrong value for that field in the mouse over string. This has been fixed.
17407: Heatmap now applies new indexColumnNames immediately
In previous releases, changes to the nodeIndexColumnNames property of the heatmap were not applied until the next data update. This has been fixed.
17408: New property to specify if labels are shown for empty nodes
The heatmap (obj_heatmap) has been enhanced with a new property, nodeLabelVisIfEmtpyFlag. If selected the background for empty node labels will be drawn, otherwise they will not. By default, this property is selected, so existing displays will not change.
17413: New highlight mode for double thick highlight lines
The heatmap (obj_heatmap) has been enhanced to support a thicker node group highlight. The nodeBgBorderHightlightFlag property has been renamed to nodeBgBorderHighlightMode. This new property supports 3 values: None - no highlight will be drawn (this is equivalent to the old nodeBgBorderHighlightFlag property turned off) Thin - a single pixel highlight will be drawn (this is equivalent to the old nodeBgBorderHighlightFlag property turned on) Thick - a two pixel thick highlight will be drawn with the inner pixel a shade lighter than the outer pixel (new option) Existing displays will automatically be converted to use the value of the old nodeBgBorderHighlightFlag property in the nodeBgBorderHighlightMode so that the look of the display will not be changed. Because of this, displays containing a heatmap that are saved using version 6.0.1+ will use the default value for the nodeBgBorderHighlightFlag property when loaded into an older version of RTView.
17429: Rounding problems with borders and highlight fixed
In previous releases, the borders between the items in the heatmap were not always consistent. The border highlight thickness was also inconsistent. This has been fixed.
17430: Corrected $celldata and $colname drill down subs
In previous releases, the $celldata and $colName drill down substitutions in the heatmap were incorrect. The $celldata was always the label from the top level grouping and the $colName was always the first column in the valueTable. This has been fixed so that the $celldata is the value of the selected node and the $colName is the name of the last index column.
Trend Charts
17573: Fixed infinite loop drawing inner y axis labels on trend
A problem has been fixed which could cause the Builder/viewer to enter an infinite loop while drawing the Y axis labels on obj_trendgraph02 configured with yAxisPosition = Inner Right/Left/Mixed, or with yAxisMultiRangeMode = Classic. The problem occurred when the computed vertical distance between the labels was less than one pixel.
Viewer
17529: Slow data server connection no longer stalls client
In prior releases, a data server connection that was live but slow to respond could cause a Builder or Viewer client to stall when opening or closing displays or executing commands. This has been fixed, by performing all data server requests asynchronously.
Version 6.0.0 Release Notes
Alerts
16981: Alert State properties now correct for a new Multi-State Alert
In previous releases, the visibility of the Alert State properties for a newly instanced Multi-State Alert were incorrect. This has been fixed.
17025: Multiple index columns supported for tabular alerts
The Alert Engine has been enhanced to support alerts with multiple index columns. In previous releases, alerts only supported a single index column. Enter a semi-colon (;) delimited list of values in the indexColumnNames property to specify multiple index columns for your alert (ex. Region;Service;Timer). If specified, the valueTable must contain all of those columns before the column that contains the data. The combined value of all index columns must uniquely identify a row in the valueTable. The Alert Index for that row is created by concatenating all of the index column values into a single string delimited by a tilde (~). To change the delimiter from tilde (~) to another character, enter it in the Multiple Index Delimiter field on the Alert Definitions tab of the Application Options dialog or specify it using the -multipleindexdelim: command line argument. All alerts also support a new indexType property which allows you to specify map one or more of your index columns to an index type. This index type can then be used in the threshold tables, alert text tables, alert command text tables and rowEnabledTable to set a value on a group of indexes instead of specifying each index individually. The syntax for the indexType is indexType:indexCol;indexType1:indexCol,indexCol2 (ex. PerRegion:Region;PerRegionalServer:Region,Service). There are 2 built-in index types: - All - this means that the index value will be a combination of values for each index column delimited by the Multiple Index Delimiter (~ by default). - Default - this value will be used for any indexes that are not specified in the table The threshold tables, alert text tables alert command text tables and rowEnabledTable all now support an additional 4 column table format that takes the index type. See the documentation for information on how to structure those tables. The AlertTable, Alert Variables Table, and per-tabular alert tables have been enhanced with additional columns to support interacting with multiple index alerts. A new table, Alert Index Types Table has also been added. AlertTable - This table has one new column: - Alert Index Values. For a single index alert, this column will contain the same value as the Alert Index. For a multiple index alert, this contains the alert index values concatenated by ; (semi-colon). This column was included to make it convenient to use this value to filter against multiple columns in the Filter By Row function. Alert Variables Table - This table has 4 new columns: - Alert Type - The type of alert. Values are Limits, Discrete, Multi State and Event. - Tabular Alert - This is true if the alert is tabular (ie. the useTabularDataFlag property on the alert is on). - Index Column Names - If the you have specified the indexColumnNames property on the alert, this will contain that string. Otherwise, after the alert receives its first data update it will fill in the value with the name of the index column in the valueTable. If the alert is scalar or if it is an unindexed event alert, this will be empty. - Index Types - A ; (semi-colon) delimited list of index types. If the alert is scalar, this will be empty. If a tabular alert does not have any index types defined in the indexTypes property, this will be All. Per-tabular-alert Table - This table has new columns based on the indexColumnNames and indexTypes specified on the alert: - Index Columns - Each of the index columns for the alert is included in the table. - Index Types - Each of the index types for the alert are included in the table. The value for each row is the value for that index for that index type. Alert Index Types Table - This is a new table that contains information about the available index types for your alert. It only contains rows for alerts that have specified at least one index type in the indexTypes property. It contains one row per index type. It contains 3 columns: - Alert Name - The name of the alert. - Index Type - The name of the index type. - Column Names - A ; (semi-colon) delimited list of column names that define the index type. Users who are using the Alert Persistence feature in 5.9.1 will must modify their database table to include a String column named Alert Index Values immediately following the Count column. The schemas in RTV\dbconfig\alert_persist have been updated to include this column. The Self Service Alerts demo has been enhanced to support interacting with multiple index alerts. See the release note for 17206 for more information.
17026: Tabular thresholds supporte in ssa for one or more alert indexes
The Self Service Alerts have been enhanced to support setting tabular thresholds and enabled flags on your tabular alerts. Now, in addition to setting thresholds and enabled values on a per-alert setting, you can override the alert level settings for each index for tabular alerts. In order to better support discrete alerts, the Self Service Alerts functionality has been modified so that discrete alerts that have an enabled threshold with a string value are not hooked up to the Alert Setting Table but the enabled state still is. This allows you to include discrete alerts with String threshold values in the Self Service Alerts in order to change the enabled state, but have the threshold values from the file be used. The Self Service Alerts also have a new command line option: -printssawarnings:true/false If set to false, the Self Service Alerts warnings about extra unmapped thresholds will be suppressed. In order to support tabular alert thresholds, the database table schemas for Self Service Alerts have changed. Customers who are using Self Service Alerts from a release previous to RTView 6.0 will need to do the following: 1. Modify the Alert Settings Table in your database to add 2 String columns named INDEXTYPE and ALERTINDEX immediately following ALERTNAME column. The value for all existing rows in your database table for these 2 columns must be Default. Add a Boolean column named USEINDEX after the ENABLED. The value for all existing rows in your database table for this column must be true. Change the primary key for this table from ALERTNAME to ALERTNAME and ALERTINDEX. 2. Modify the Audit Table in your database to add a String columns named INDEXTYPE immediately following ALERTNAME column. The value for all existing rows in your database table for the INDEXTYPE and ALERTINDEX columns must be Default. Add a Boolean column named USEINDEX after the ENABLED. The value for all existing rows in your database table for this column must be true. The Self Service Alerts demo has also been enhanced in several ways: 1. General UI enhancements. 2. More customization options. 3. Support for tabular threshold and enabled values. 4. Support for alerts with multiple indexes (task 17025). 5. Addition of help pages. 6. Login role checking for right to execute administrative functions. Customers who are using the Self Service Alerts Demo from a release previous to RTView 6.0 either stand-alone or integrated into their application will need to do the following when upgrading: 1. Modify their database tables as listed above. 2. If you are deploying in the Thin Client and you want to use the built-in help files, you'll need to include the selfservicealerts\docs directory in the .war file for your Thin Client application and you'll need to include selfservicealerts\ssa_displays.html in your application directory. See the Customization section in the Self Service Alerts Demo documentation for more information on modifying and/or deploying the help files. 3. If you want to customize the Options and/or Details displays on a per-alert basis, you will need to add a Custom Alert Definition Property named DrillDownSuffix. See the Customization section in the Self Service Alerts Demo documentation for more information on customizing the Options and/or Details displays. 4. The Alert Administration screen has been enhanced to show the description of the selected alert. It is not required that you add descriptions to your alerts when you upgrade, but if you do not, this field will be blank. To add a description to an alert, fill in the description property on the alert definition. 5. The Alert Administration has been enhanced to check the role from the RTView login. If the login is disabled, the admin role is used, otherwise the logged in role is used. Administrative actions such as adding, modifying and setting alert thresholds are disabled if you are not logged in as admin. You may need to modify the roles for your users to include admin if you need them to have access to these actions.
17124: Enhancements to removal of alerts from the Alert Table
RTView Alerts have been enhanced to improve removal of alerts from the AlertTable. There are 2 reasons that alerts are removed from the Alert Table: 1. Alert History Depth - This option limits the size of the AlertTable to the number of rows specified. Previously, if the AlertTable went over this limit, the oldest rows were removed from the alert table to get the table back down to the size limit. When active (ie not-cleared) alerts were removed, they were not cleared first, so the Alert State in the Alert Variables Table and per-tabular-alert tables were not updated correctly. This has been enhanced. Now, when the AlertTable goes over this limit, RTView first removes cleared alerts from the table, starting with the alerts that have the oldest Cleared Time. If all of the cleared alerts have been removed and more alerts still need to be removed to get under the size limit, RTView will remove active alerts starting with the alerts that have the oldest Time value. In this case, the alerts are cleared before being removed and the cleared reason is set to ALERT HISTORY DEPTH EXCEEDED. 2. Time (in seconds) to Keep Cleared Alerts - This used to be called Rate to Remove Cleared Alerts. Previously, RTView would use this value to remove all cleared alerts when the specified amount of time had elapsed. For example, if this was set to an hour, once an hour RTView would remove all cleared alerts from the system. This has been enhanced. Now, RTView checks for cleared alerts to remove on each update pass. If more than the specified amount of time has elapsed since the time the alert was cleared, the alert will be removed. If the value is 0, cleared alerts will not be removed until the Alert History Depth has been exceeded. Both the Alert History Depth and the Time to Keep Cleared Alerts are configurable in the Alerts tab in the Application Options dialog.
17272: Performance optimizations for Alert updating
The RTView Alert update process has been made made more efficient in the case where there are tabular alerts with large numbers of indexes.
17281: Alert action audit support
RTView Alerts have been enhanced to support Alert Action Auditing. If configured, RTView will write a record to a database every time an alert data source command is executed. The record will contain the time the action was executed, the user that executed the action, the action type, the action, the target and the value. See the documentation for more information on configuring Alert Action Auditing. The Self Service Alerts demo has been enhanced to support alert action auditing and has a new display for viewing the audit table.
Builder
16980: Prop sheet no longer shows Object category for alerts or caches
In previous releases, the Alerts and Caches showed objName, objX, objY, objHeight and objWidth in the property sheet. These properties do not apply to those objects and have been removed from the property sheet for them.
Builder - Options Dialogs
16984: Empty and default ini files no longer saved
RTView has been enhanced so that data source options files are only saved when the options for that data source need to be saved. In previous releases, when you saved your options, all loaded data sources saved their options files regardless of whether anything was in them or if they contained only the default values. Now, they are only saved if they contain non-default values. A new method has been added to the Custom Data Source API to support this feature for custom data sources: public boolean setDefaultFieldValue(String fieldName, String defaultFieldValue) This method sets the default value for the data source option which is used to determine whether or not it needs to be saved. By default, the default value is set to an empty string. Use this method to set it to another value.
Builder - Property Dialogs
17345: Builder exception when using Bar Properties dialog fixed
In previous releases, when the Bar Properties dialog was used to configure an obj_history instance, the Builder would throw a NullPointerException if the bottom row in the table of properties was removed and then the user clicked the "New" button to add a new row. This is fixed.
Data Historian
17323: Historian no longer exits if -persistCaches used w/o HISTORY.ini
In the prior release, if the historian was run with the -persistCaches:true option and no HISTORY.ini file was present, the historian exited immediately. This has been fixed. Note: The -persistCaches option was added in release 5.9.1.
Data Sources
CMDB Data Source
17310: cmdb db table processing moved to separate thread
The CMDB data source has been enhanced to move the database table processing into a separate thread. This means that the main application thread is no longer blocked while the database tables are processed, speeding up startup.
Cache Data Source
17289: New "update always" option for history_combo attachments
The cache data source has been enhanced to support a new update mode for attachments to a cache history_combo table. (The history_combo table contains a combination of older condensed data and newer raw data, and is maintained by the cache data source only when the condenseRowsFlag property is checked on a cache definition object. For details on the cache row condenser feature, please see the release note for 16518). The Attach to Cache Data dialog has been changed as follows: When the history_combo is selected in the Table field of the dialog, the checkbox labeled "Update Once" will be replaced by an "Update" label and three radio buttons labeled "Once", "On Condense", and "Always". By default, the "On Condense" button will be selected. The "On Condense" update mode was also the default in previous releases. In this mode, an attachment to the history_combo table will be updated at the interval specified by the cache's condenseRowsInterval property. For example, if new data is applied to the cache every two seconds but the cache's condenseRowsInterval is 60 seconds, then an attachment to the cache's history_combo table will be updated every 60 seconds. This behavior is useful when the traceValueTable of a trendgraph is attached to the history_combo table. The update mode of "Always" is new in this relase. When the Always mode is selected, an attachment to the history_combo table will be updated whenever new raw data is applied to the cache. So in the previous example, if the Always mode is selected, the attachment would be updated every 2 seconds rather than every 60 seconds. This behavior is useful when the valueTable property of a table object is attached to history_combo, for example. The "Once" mode was also available in previous releases. When this mode is selected, the attachment is updated once when the display is opened. Note that the 3 radio buttons described above will appear only when the history_combo table is selected in the dialog. For all other tables, only the "Update Once" checkbox will appear, as in all prior releases.
17319: Expired column now excluded from cache history table
If the rowExpirationMode property of a cache is set to Mark or to Mark+Delete, then an Expired column is added to the cache's current table and to its history table. However, the column is only meaningful in the current table so it should not be added to the cache's history table. In prior releases the Expired column was added to the history table and its value was always false. As of this release, the Expired column is not added to the cache's history table.
Display Server
17221: Fixed error when column name contains double quote
In previous releases, if a column name in a table contained a double-quote character, the thin client threw a javascript error and the table was displayed as blank. This is fixed.
17354: scrollToSelectionFlag behavior fix in thin client
The following problem has been fixed: If the scrollToSelectionFlag property is checked on an obj_table02 instance, the selected table row will scroll out of view in the thin client when the table data is updated or the user selects a sort column.
Functions
17271: Performance optimization for Delta rows function
The DeltaRows function has been made more efficient at processing tables with large numbers of columns.
17273: New tabular function Concatenate Columns
The RTView Builder has been enhanced with a new function, Concatenate Columns. This function creates a string concatenation of the values in the given table columns separated by the given character(s) and returns the results in a new table column. The column names are specified as a semicolon-separated string. The separator can be a single character such as "." or "/" but it can also be a string such as " and ".
Licensing
17088: New "-writekey:" option added to run_gmsregister -nogui
A new command line option has been added to run_gmsregister. Previously, the -nogui option allowed you to get your pin without opening the registration dialog, but there was no way to enter your key. The new -writekey: command line option allows you to enter a key on the command line and have it written to your keys file. This option is only valid when used in conjunction with the -nogui option. For example: run_gmsregister -nogui -writekey:01234567890123456789012345678901
Object Library
Control Objects
17241: Clipped strings in text controls now show beginning of string
The following text controls have been enhanced so that when their value is longer than the control can display, the beginning of the string is displayed instead of the end: Text Entry Fields (obj_c1textedit, obj_c1textedit_i, obj_c1textedit_d) Text Area Object (obj_c1textarea) Password Field (obj_c1passfield) This change only effects the Display Builder, Display Viewer and Display Viewer Applet. The controls in the thin client already showed the beginning of the strings.
17244: listValues in combo and list now supports single cell with list
The listValues property on the combo box (obj_c1combobox) and list (obj_c1tlb) controls has been enhanced. It now supports an attachment to a single cell table containing a ; delimited list of values.
17282: New flag for validating blank value in numeric text fields
The numeric text entry controls, obj_c1textedit_i and obj_c1textedit_d, have been enhanced to support a new validation option for blank entries. To enable this feature, select the validateBlankValuesFlag. If selected and the user enters a blank string, the actionCommand will not execute and the invalidInputVarToSet and invalidInputMsgVarToSet will be updated to indicate an invalid entry.
Fx Bar Chart
17303: fxreplace handling of barProperties & wedgeProperties fixed
In previous releases, when replacing an obj_fxbar object with obj_bargraph, the fxreplace feature mishandled the barProperties property so all the bars in the replacement bargraph were white. The same problem affected wedgeProperties when replacing obj_fxpie with obj_pie. Both problems are fixed.
Fx Trend Chart
17086: Trace line corrected when alarm limits & alarm status table used
The trace lines on obj_trendgraph02 were misdrawn if the object was configured with alarm limits and the alarm status table both. This is fixed.
Tables
17224: obj_table02 null pointer exception fixed
In previous releases, obj_table02 sometimes threw a null pointer when processing mouse events when the display was being closed. This has been fixed.
17267: String column with all numbers now sorts numerically
In releases 5.8 through 5.9.1, a table column of type string that contains only numerical strings was sorted in alphabetic order rather than numerical order. This is fixed.
Trend Charts
17268: historyOnlyFlag added to trendgraph
A property named historyOnlyFlag has been added to obj_trendgraph02 and obj_fxtrend. When checked, the graph will plot only data that is applied to the traceNValueTable properties and will ignore the timeShift property and any data that is applied to the traceNValue properties. This is useful in the cases where the same graph instance is to be used to view historical data or historical data + current data by setting subs on the display. By default the property is unchecked.
Platform Support
17290: iPad support
The RTView thin client is now supported on iPad, in the Safari browser. In the iPad settings for Safari, "JavaScript" must be ON and "Block Pop-ups" should be OFF. As of this writing, the thin client has been tested only on iOS 4.3.5 in Safari. Because the iPad uses a touch interface there are differences in the thin client appearance and behavior in iOS Safari as compared to the conventional "desktop browsers" that use a cursor (mouse) interface, such as Firefox and Internet Explorer. These are described below. 1) Popup browser windows: An RTView object's drilldown target can be configured to open a display in a new window. In a desktop browser, when the RTView object is clicked the drilldown display is opened in a popup browser window. But in iOS Safari 4.3.5, only one page is visible at a time, so when the RTView object is touched a new page containing the drilldown display will open and fill the screen. The Safari navigation bar can be used to toggle between the currently open pages or close them. 2) Mouseover text: If mouseover text and drilldown are both enabled on an RTView object (e.g. a bargraph), then in iOS Safari the first touch on an element (e.g. a bar) in the object will display the mouseover text for that element and the second touch on the same element will perform the drilldown. 3) Resize Mode and Layout: By default, the display server runs with resizeMode set to "crop". In crop mode, if a display is larger than the panel that contains it only a portion of the display will be visible. In a desktop browser, scrollbars will appear to allow the user to scroll to view the entire display. In iOS Safari, scrollbars will not appear but the display can be scrolled by dragging with two fingers inside the display. (Dragging with one finger will scroll the entire page, not the display). If the display server is run with resizeMode set to scale or layout, the display will be resized to fit into the panel that contains it. If a desktop browser is resized after a display is opened, the display will be resized accordingly. On the iPad, the Safari browser can only be resized by reorienting the iPad itself, between portrait mode and landscape mode. The panel layout feature is supported in the thin client. However, unlike a desktop browser which will resize to match the layout size, the size of Safari is fixed. So if the display server is run with resizeMode set to crop or scale mode, there may be unused space at the edges of the display(s) or, in crop mode, the panels and displays may be cropped. This means that layout mode should be used for best results on the iPad. For layout mode to be most effective, displays should to make use of the anchor and dock object properties. Please see the RTView documentation for more information. 4) Scrolling: The thin client implements scrollbars for table objects and graph objects. The scrollbars are activated by dragging with one finger. If an RTView display is viewed in crop mode and is too large to be displayed entirely in Safari, scrollbars will not appear (as they would in a desktop browser) but the display can be scrolled by dragging with two fingers inside the display. Scrollbars will never appear in a text area control. If the text area contains more text than is visible, use the two finger drag in the text area to scroll the text. Regardless of the size of a listbox control, it will only display a single item (typically, the selected item). When the listbox is touched, the list of items will appear in a popup list. In other words, on iOS Safari the listbox control and the combobox control behave identically. On the default thin client page (opened as http://hostname/rtvdisplay), the panels cannot be resized by dragging the border between the left and right frame, as they can in a desktop browser. The list of displays in the left hand panel can be scrolled by dragging with two fingers inside the panel. 5) Context menu: The thin client context menu is opened by a right mouse button click in a desktop browser. It is opened in iOS Safari by touching any location on a display and holding that touch for 2 seconds. The menu will appear in the top left corner of the display, regardless of where the display is touched. The items 'Export Table to Excel', 'Drill Down', and 'Execute Command' are not included on the context menu in Safari. All other items are available. The 'Export Table to HTML' item is enabled if a table object is touched (unless the table object's drillDownTarget is configured to open another display). After and Export to PDF/HTML has been performed, the exported content will open on another page in Safari. From there, the content can either be opened by another app (e.g. the iBooks app will open PDF) and emailed, or it can be copied & pasted into an email. Known Issues/Limitations: The iPad does not support Adobe Flash, so the Fx graph objects (obj_fxtrend, obj_fxpie, obj_fxbar) are unavailable. The thin client will automatically replace the Fx graph objects with the equivalent non-Fx object (obj_trendgraph02, obj_pie, obj_bargraph). Note that the replacement objects behave the same as the Fx objects in most cases but not in all. In particular, obj_trendgraph02 does not support the sliding cursor object nor the legendPosition property. Custom Fx objects are not supported on the iPad. The thin client implements scrollbars for table objects and graph objects. However, unlike the scrollbars used on desktop browsers, the scrollbars used on the iPad do not have arrow buttons at each end. This can make it difficult to scroll precisely (e.g. row by row) on objects with a large scrolling range. At full size, users may find it difficult to touch the intended display object without accidentally touching nearby objects and performing an unwanted drilldown, sort, scroll, etc. This is particularly true of table objects that support drilldown and also scrolling, and also in panel layouts that the tree navigation control. In those cases, the user may want to zoom the iPad screen before interacting with the thin client. If the iPad sleeps or auto-locks while a thin client display is open in Safari, or if the Safari app is minimized by clicking on the iPad's home button, the display will not update until the iPad is woken and Safari is reopened. In some cases it may be necessary to refresh the page from Safari's navigation bar.
Version 5.9.2 Release Notes
Alerts
17120: Changes in self service alerts now applied immediately
In previous releases, changes to the Alert Settings Table in the Self Service Alerts weren't applied until the following update. This has been fixed.
17176: Fixed crash when redoing alert definition copy
In previous release, the Display Builder would throw an exception after an alert was copied, then the copy was undone and redone. This has been fixed.
17225: Alerts null pointer exception fixed
In previous releases, the alert objects sometimes threw a null pointer exception during command processing. This has been fixed.
17242: Clear reason now resets after cleared by command
In the previous release, the Cleared Reason was incorrect for an alert that had been cleared via command, then re-executed and cleared via data update. This has been fixed.
17295: Cache listeners no longer wait for first alert
In previous releases, caches attached to the Alert Data Source AlertTable didn't receive an initial update until an alert had been generated. This has been fixed.
Builder
17118: Builder no longer creates extra dateformat lines in OPTIONS.ini
Date formats containing single quotes were not read in correctly from OPTIONS.ini. This has been fixed.
Data Sources
Cache Data Source
17262: Improve performance of cache row condenser.
The cpu time required to support the cache row condenser feature has been reduced.
17288: Cache attachment with "update once" no longer updates twice
The following bug in the cache data source has been fixed: A bug in the cache data source can cause data to be applied twice to a data attachment that has the "Update Once" option checked, once when the attachment is initialized (as expected) and then again the next time the cache table is updated (not expected). The problem does not occur on the first "update once" attachment that is made to a specific cache table, but does occur on the 2nd and all subsequent "update once" attachments to the same cache table.
JMS Admin Data Source (for TIBCO EMS only)
17203: Patterns in data attachments now recognized for first server
In previous releases, the EMS Administration data source had a bug where data attachments to * Servers for the the Topics and Queues tables that used a pattern wouldn't apply the pattern to the first server in the table. This has been fixed.
17204: Run EMS queries in a separate thread
The TIBCO EMS Administration data source has been enhanced to run EMS Server queries in a separate thread. This prevents slow queries from blocking the main application thread and improves application responsiveness.
17210: Hawk unavailable error now only printed once
In previous releases, when the TIBCO EMS Administration data source was setup to discover servers using Hawk and the TIBCO Hawk data source was not available, the following error was printed to the console on each update pass: ERROR: cannot enable use of hawk! This error has been replaced with the following error which is only printed to the console once at startup: ERROR: The TIBCO EMS Administration data source cannot Discover Servers Using Hawk, because the TIBCO Hawk data source is not available.
Drill Down
17184: Drill down display doesn't scale to show all objects
In previous releases, the composite object would sometimes size incorrectly after the composite's display was changed via drill down in a window that had been resized. This has been fixed.
Functions
17206: Avoid premature initial evaluation of function
A problem has been fixed which could cause the initial evaluation of a function to occur prematurely. The problem occurred when a function F2 depended on the result of F1, but F2 appeared in the rtv file before F1. Prior to the fix, the initial evaluation of F2 would occur before F1 was evaluated, generating a possibly bogus result.
17259: CreateSelectorList no longer throws npe
In previous releases the CreateSelectorList function would throw a NullPointerException when a list value was null. This has been fixed.
17266: Convert columns now works if no rows in table
In the Display Builder, the Convert Columns function would return the original table if there were no rows of data. It now returns an empty table but with the column types changed as specified.
17296: outer join function now returns null if either table is null
The Join Outer function has been reverted to its pre-17075 behavior so that it returns null if either input table is null, to avoid regression bugs in cache configurations.
GmsTabularData
17222: Exception when edit save is due to "do you want to save" dialog
In previous releases, the following steps caused a class cast exception: 1. Edit a table object (obj_table02) that is configured with the editDataLocalVarName in the viewer. 2. Exit the viewer without saving your edits. 3. When prompted to save your edits, select yes. This has been fixed.
Object Library
Tables
17219: obj_table02 null pointer exception fixed
In previous releases, the table object (obj_table02) occasionally threw a NullPointerException if the valueTable was updated while the table was being processed. This has been fixed.
17243: columnProperties fails if a column starts with name of another
In previous releases, the columnProperties was not applied correctly to a column where the column named started with the name of another column's (ex. Index and IndexTypes). This has been fixed.
17255: Apply table filterProperties if sortColumnName is bogus
The following problem has been fixed: The filterProperties of an obj_table02 is ignored if the sortColumnname property is set to a non-blank string that does not match any of the column names.
Reporting
17213: Excel/HTML report no longer truncates data with '<' character
In prior releases, the 'Export Table to Html/Excel' feature in the thin client would fail if a < or a > character appeared in the table. This is fixed
Version 5.9.1 Release Notes
Alerts
12513: Alerts may be generated for data that is not yet available
When data for a numeric data attachment is not available, it gets initialized to a value of 0. If an alert definition was setup such that an alert will get generated if the input value is 0, this would cause an alert to be generated. This has been fixed. There is still a related problem for alerts where the value property is directly or indirectly attached to a function that outputs a non-table result (Text or Number). See the PAL for 17154 for more information and a workaround for that problem.
17027: Support added for custom alert definition properties
RTView alerts have been enhanced to support Custom Alert Definition Properties. This feature allow you to define one or more custom properties on your alert definitions which will show up in the Alert Table when an alert is executed. These properties are useful when you want to store additional information about an alert definition and have it be accessible in the Alert Table. For example, you might want to organize your alerts by Category. In that case, you could add a Custom Alert Definition Field named Category. When you define your alerts, you specify a value in the Category property for each. When the alerts are executed, there will be a Category field in the Alert Table that you can use for sorting and/or filtering. These properties can also be mapped to a column in the valueTable input for your alert if the useTabularDataFlag is on. To add a Custom Alert Definition Property, go to Tools->Options->Application Options->Alerts->Custom Alert Fields and click on Add Custom Alert Definition Property. This will open a dialog where you will fill in the following: Name - The name of the Custom Alert Definition Property. This will be used as the property name in the alert definition and the column name in the Alert Table. This field is required and the name must be unique within both the Custom Alert Event Attributes and the Custom Alert Definition Properties. Data Type - Select the type of data for this Custom Alert Definition Property. The choices are String, Double, Integer or Boolean. Default Value - This field is optional. Specify a default value for this Custom Alert Definition Property. If specified, this value will be used for new alert definitions. Note that this value must be of the data type specified in the Data Type field. Click OK to add the Custom Alert Definition Property. To edit a Custom Alert Definition Property, double-click on it in the list or select it and click Add Custom Alert Definition Property. To delete a Custom Alert Definition Property, select it from the list and click Remove Custom Alert Definition Property. All additions, modification and deletions of Custom Alert Definition Properties are applied when you click OK, Apply or Save in the Application Options dialog. Note that changes to the Custom Alert Definition Properties will cause all of your alert definition files to be reloaded. Once you have applied your Custom Alert Definition Property, you will see a property for each in the Custom Properties section of the property sheet for all of your alert definitions. These properties can be static or attached to data. You will also see a column in the Alert Table for each Custom Alert Definition Property. The value in that column will be the value specified for the property in the corresponding alert definition. If you want to use the value from a column in your valueTable, use the customPropertyMap property to specify which column from the valueTable contains the value to use for the custom property using the following syntax: customPropName:valueTableColumnName;customPropName2:valueTableColumnName2 For example, if you have a custom property named My Custom Property and you want to use the value from the My Data Column column in your value table, you would specify the following: My Custom Property:My Data Column The alert will also create a substitution for each custom property by collapsing the name into $alertXX where XX is the name of your custom field in camel case with all spaces removed. For example, if your custom property name is "my property", the corresponding substitution will be $alertMyProperty. You can use this substitution to show the value of your custom property in the alertCommand, reNotificationCommand, clearedCommand or in the alert text. Note that the renotification commands will update with the new value of the property if it changes, but the alert text in the table will not update after the alert is generated. The following describes what happens when the custom properties are misconfigured: -- The data attachment to a custom property returns the wrong data type (ex. the custom property is an int and the data attachment returns a string). In this case, you will see an error in the console (where XX is the name of the custom property): ERROR: setGmsVarFromString, value passed in for XX must be an integer. The property won't be updated. If no updates have been successful, the value for the column will be the Default Value specified in Application Options. -- The column that you specified in customPropertyMap doesn't exist in valueTable. In this case, you will see an error in the console (where XX is the name of the missing column): ERROR: valueTable on alert <alertName> doesn't contain this column specified in customPropertyMap <XX>. In this case, the value specified in the custom property on the alert will be used. -- The type of the column that you specified in customPropertyMap doesn't match the type for the custom property. For example, your custom property is an int and the column you specified in the valueTable is a String. In this case, we will try to convert the String to an int. If the String cannot be converted to a number, the value will be 0.
17034: Custom alert event attributes supported
RTView alerts have been enhanced to support Custom Alert Event Attribute. This feature allow you to define one or more settable alert event attributes which show up as columns in the Alert Table and can be set via a command. This feature is useful when you want to add table information on a per-alert instance basis. For example, you might want to add a Status attribute to the alert, so that the user can indicate whether the problem is under investigation, being tested, or resolved. To add a Custom Alert Event Attribute, go to Tools->Options->Application Options->Alerts->Custom Alert Fields and click on Add Custom Alert Event Attribute. This will open a dialog where you will fill in the following: Name - The name of the Custom Alert Event Attribute. This will be used as the column name for this attribute in the Alert Table and will also be the name you will use to reference this attribute in the Set Custom Alert Event Attribute command. This field is required and the name must be unique within both the Custom Alert Event Attributes and the Custom Alert Definition Properties. Data Type - Select the type of data for this Custom Alert Event Attribute. The choices are String, Double, Integer or Boolean. Default Value - This field is optional. Specify a default value for this Custom Alert Event Attribute. If specified, this value will be used for new alerts. Note that this value must be of the data type specified in the Data Type field. Click OK to add the Custom Alert Event Attribute. To edit a Custom Alert Event Attribute, double-click on it in the list or select it and click Add Custom Alert Event Attribute. To delete a Custom Alert Event Attribute, select it from the list and click Remove Custom Alert Event Attribute. All additions, modification and deletions of Custom Alert Event Attributes are applied when you click OK, Apply or Save in the Application Options dialog. Note that changes to the Custom Alert Event Attributes will cause all of your alert definition files to be reloaded. Once you have applied your Custom Alert Event Attributes, you will see a column for each in the Alert Table. To set the value of the Custom Alert Event Attribute for an alert, use the new Alert Data Source command, Set Custom Alert Event Attribute. This command takes 3 arguments: ID - The id of the alert for which you want to set the attribute value. Attribute Name - The name of the Custom Alert Event Attribute you want to set. Attribute Value - The value you want to set on the Custom Alert Event Attribute. Note that this value must be of the type specified for the Data Type on the Custom Alert Event Attribute.
17035: Support alert failover by reading initial values from Historian
RTView alerts have been enhanced to support the persistence of alerts during fail over of an alert engine. With this feature enabled, alerts will be persisted as follows: - If you are running the alerts in a Data Server or in a locally client application (Display Builder, Display Server, Display Viewer), all active and cleared alerts that had not previously been removed from the system will be restored when the application is restarted and all new alerts will be generated using ids that are unique from the previous session. - If you are running the alerts in a Data Server that is configured for High Availability, you should run the backup server in warm standby mode. All active and cleared alerts that had not previously been removed from the system will be restored to the standby server when it becomes the active server. It is not recommended that you run the standby server in hot standby mode when using alert persistence as in that case both Data Servers will persist the same alerts to the database. The alert persistence feature stores the all fields and current state of all active alerts and all cleared alerts that have not been removed from the system in a database using the Historian. Alerts are sent from the application running the alert engine to the Historian via the RTVAgent. More than one alert engine can persist its alerts to the same database table via the same Historian as long as each alert engine specifies a unique Agent Name (see the Alert Engine configuration below). The Historian must be configured to run the RTVAgent data source locally (not via Data Server) to receive alert table updates. Other data sources in the same Historian can still use the Data Server. When the alert engine starts up, it will query the database table containing the persisted alerts and will recreate them at startup in the new alert engine. The persisted alerts will show up in the alert engine after the Initial Delay time specified in the Alert Definitions tab of the Application Options has expired. All alerts that are configured to renotify on a timer will immediately renotify, then continue to renotify on the specified renotification time. To clear the alerts for an alert engine from the database on startup, specify the following command line option: -purgepersistedalerts This will clear all alerts for the alert engine from the database table on startup and no persisted alerts will be loaded. If you are persisting alerts for more than one alert engine in the same database table, alerts for other alert engines will not be removed. For optimization, by default the alert engine does not store updates to the Last Update Time column of the Alert Table unless there has also been another change for that alert. If you want to restore the alerts with accurate values in the Last Update Time column, enable saving out updates for that column with the following command line option: -lutupdatesnewdata Requirements 1. Alert definitions and options must be the same before and after failover. For example, if you are running a primary and standby Data Server in 2 different locations, you must confirm that both are configured with the same alert definitions and option. If your alert options have changed, persisted alerts might be incorrect after failover. 2. If any of the following properties on your alerts are attached to data, those data attachments must be available after fail over and you must specify an Initial Delay in the Alert Definitions tab of the Application Options dialog. This will allow the alert engine restoring the persisted alerts to resolve those data attachments before finishing the processing of the persisted alerts. The Initial Delay time only needs to be long enough for your data attachments to resolve. Any of these properties that use a ; delimited list or a tabular data attachment must include index values. - rowEnabledTable - value*Alert (valueHighAlert, valueLowAlert, valueMediumAlert) - value*Warning (valueHighWarning, valueLowWarning) - value*Text (valueHighAlertText, valueHighAlertCommandText, valueMediumAlertText, valueMediumAlertCommandText, valueLowAlertText, valueLowAlertCommandText, valueHighWarningText, valueHighWarningCommandText, valueLowWarningText, valueLowWarningCommandText) - alertState*AlertText - alertState*AlertCommandText - alertState*Comparison - alertState*UpperRangeLimit - alertState*LowerRangeLimit 3. The database table where the alerts are persisted must contain a column for each column in the Alert Table, along with a couple of additional columns. Therefore, if you add, edit or remove Custom Alert Definition Properties or Custom Alert Event Attributes, the database table will need to be modified. 4. If you have multiple alert engines persisting alerts to the same database table, they must have the same Custom Alert Definition Properties and Custom Alert Event Attributes. Limitations 1. Alerts that attach directly or indirectly to a function that outputs a non-table value (Text or Number) may be incorrectly cleared after fail over. See PAL for task #17154 for more information and a workaround. 2. The nonRepititionTime for an alert restarts after failover. 3. Depending on the frequency of your data that drives the alert, it is possible that an update to an alert might be missed during failover. The likelihood of missing an update increases the longer the time is between the exit of the first engine and the startup of the second. Database Configuration The Historian will store the alerts to a database table. You can either let the Historian create the database table or you can create the table. If you want to the Historian to create the table, there is nothing you need to do - the table will be created the first time the Historian stores an alert. If you want to create the table yourself, we have included table schemas for several databases in RTV\dbconfig\alert_persist. The README.txt file in that directory will assist you in using the schemas to create your table. If you want to create it manually, create a table with the following column names and types in the order listed: AgentName (String) Time (Timestamp) Alert Name (String) Alert Index (String) Severity (Integer) Alert Text (String) Cleared (Boolean) Acknowledged (Boolean) ID (Long) Last Update Time (Timestamp) Comments (String) Owner (String)
current (String) level (Integer) The AgentName and ID fields are primary keys. If you have defined Custom Alert Definition Properties and/or Custom Event Attributes, you will need to insert columns of the correct type in the order they appear in the alert table before the current column. Historian Configuration This section assumes a working knowledge of the Historian and that you have configured the Historian database. 1. In the Application Options dialog in the Display Builder or Configuration Utility, go to RTVAgent->RTVAgent Options and select Enabled. In the Port field, specify the port number on which you would like to receive alerts. Save you options file. 2. Copy the RTVAGENTOPTIONS.ini file that you created in step 1 to the directory where you will be running the Historian. 3. In the directory where you will be running the Historian, run the Historian so you can configure it. 4. In the Alert Persistence Section, select Alert Persistence Enabled and specify the name of the table to use for alert persistence in Alert Persistence Table Name. 5. Save your configuration and Exit the Historian. 6. Note that the Historian must run the RTVAgent data source locally (not via a Data Server) to persist the alerts. If you are running the Historian against a Data Server you can run the RTVAgent data source locally with the following command line arguement: -dsenable:RTVAGENT If you want to persist alerts using a Historian server group instead of a single Historian, you must use a different RTV Agent port for each Historian in the server group. Specify a comma delimited list of the RTV Agent connections in the Agent Connection field (ex. localhost:5665,localhost:5666). Alert Engine Configuration 1. In the Application Options dialog in the Display Builder or Configuration Utility, go to Alerts->Alert Persistence: 2. Select Enabled Persistence to enable alert persistence and fill in the following fields: - Database Name - The name of a database connection that is defined in the SQL tab of the Application Options dialog. This connection must be to the same database that the Historian will be using to persist the alerts. - Table Name - The name of the table where the alerts will be persisted. This must be the same table name specified in the Alert Persistence Table Name of the Historian. - Agent Name - This must be a unique identifier for this alert engine. Multiple alert engines can persist their alerts to the same Historian, so this value allows the alert engine to restore only alerts for this alert engine in the case of fail over. - Agent Connection - The host and port of the RTVAgent connection you are using in the Historian to receive alert table updates. The host will be the host where you are running the Historian the port will be the value you entered in Step 1 of configuring the Historian above. 3. Save your options and exit. When you run the alert engine with these options, your alerts will be persisted. Note that if the Agent Connection specified here is not available, the alert engine will store up alerts to persist until it becomes available. Therefore, you should not run the alert engine with the persistence enabled and the Agent Connection unavailable for a long time as this will result in memory growth. Once the Agent Connection is made, all of the stored alerts will be persisted and the memory growth will no longer be a problem.
17036: New Owner column added to alert table
The Alert Table has been enhanced to include an Owner column to allow users to assign an owner to an alert event. When an alert is generated, the value of the Owner column is blank. You can set the Owner for an alert using the new Set Owner command. This command takes 2 arguments: ID - The id of the alert on which to set the owner. Owner - A string value to set in the owner field for the specified alert. The Self Service Alerts demo has been enhanced to display the Owner field in the Alert Detail Table and to allow you to set the Owner for an alert in the Manage Alert display.
17085: Support multiple ids for setOwner, add/clearComment and setEvent
The Set Owner, Add Comment, Clear Comment and Set Alert Event Attribute commands have all been enhanced to accept a semi-colon (;) delimited list of ids for the Alert ID argument.
17119: New event alert as wrapper for external alert engine events
RTView has been enhanced with a new event alert type. The event alert is meant to be used as a wrapper around an external event source such as Netcool. For this alert, RTView does not do a threshold comparison to determine when to execute or clear an alert or determine the severity of the alert. When the valueTable comes in, the columns in the valueTable are mapped to the columns in the RTView Alert Table using the valueTableMap and customPropertyMap properties. Event alerts behave like the other alerts in terms of notifications (alertCommand, reNotificationCommand, commentAddedCommand, alertClearedCommand are all supported as with the other alerts). They also show up in the Alert Table like the other alerts. These alerts do not have a corresponding per-tabular-alert-table like the limits and discrete alerts. If indexed, the indexes for these alerts are only stored until the alert is cleared, then removed. The valueTable for this alert does not have to be indexed. In order to indicate that you have an index, map the Alert Index property to the index column in your valueTable using the valueTableMap property described below. If there is no Alert Index specified in the valueTableMap, this indicates that the valueTable is not indexed. In this case, an alert will be generated for each row of each table that comes in. No check for duplicates and no support for status change is supported. This means that the only way for an alert to be cleared is via the alertExpireTime property (which will clear the alert after it has been active for the specified amount of time). If there is an Alert Index specified in the valueTableMap, this indicates that the valueTable is indexed. In this case, an alert will be generated for each row where there is not already an active alert for that index. Indexed alerts can be cleared via the valueTable if the Cleared column is also specified in the valueTableMap and the value in the Cleared column equals the alertClearedValue property. Indexed alerts can also be cleared via the alertExpireTime. Indexed alerts support updates to the Severity, Cleared, and Custom Property columns. The following are the properties that will be supported on the Event Alert. Most properties are already implemented for the other alerts, so they don't include descriptions here (see the RTView documentation for more information on those properties): Alert Category - alertClearedCommand - alertCommand - alertExpireTime - New Property. If specified, an alert older than this value (in seconds) will be cleared. This will happen regardless of whether the alert is acknowledged or not. - alertName - commentAddedCommand - reNotificationCommand - reNotificationMode - This works the same as the other alerts with one exception. When the reNotificationMode is set to Data Changed, the alert will renotify when the severity changes for alerts that have not been acknowledged or cleared. - reNotificationTime - alertClearedValue - New property. If the valueTableMap property contains a mapping for both Alert Index and Cleared, the value specified here will be compared to the value in the Cleared column from the valueTableMap. If they match, the alert will be cleared. Data Category - valueTable - this table is required, but all columns are optional - see valueTableMap and customPropertyMap for mapping columns from this table to the columns in the Alert Table - valueTableMap - New property. This allows you to map items in the valueTable to standard columns in our Alert Table. The syntax is AlertProp:valueTableCol;AlertProp2:vlaueTableCol2. The following Alert props are supported, but none of these are required: -- Alert Index - If specified, this is used as the index column and will be used in the Alert Index column of the Alert Table. The Cleared column map and valueCleared properties will be supported, if not specified, this is an un-indexed table and any new rows coming in to the valueTable will just be forwarded to the alert table (with no way to update an existing row). -- Time - If specified, this time will be used in the Last Update Time column of the alert table. This column must be a long or date. If not specified, RTView will set the Last Update Time to the time the alert received the last update. -- Severity - If specified, this column must contain integers > 0. If a value less than 1 is specified, a value of 1 will be used. This will set the value in the Severity column of the Alert Table. If not specified, RTView will assign all alerts as severity 1. -- Alert Text - If specified, the value in this column will be used in the Alert Text field of the Alert Table. If not specified, the Alert Text value in the Alert Table will be "Event Received". -- Cleared - This is only supported if the Alert Index was specified. If so, the value in this column will be matched against the value in the valueCleared property. If there is a match, the alert will be cleared, otherwise not. Interaction Category - enabledFlag - rowEnabledTable - Existing property. This is only supported if the valueTableMap contains a mapping for the Alert Index. Custom Property Category (see the release note for 17027 for a description of these properties) - customPropertyMap -
For all command properties above, the same alert substitutions are supported (with a few exceptions) as the other alerts: - $alertName - supported/same as other alerts - $alertText - supported/same as other alerts - $alertID - supported/same as other alerts - $alertSeverity - supported/same as other alerts - $alertEmailSubject - supported/same as other alerts - $alertEmailBody - supported/same as other alerts - $alertIndex - supported/same as other alerts - $alertLabel - supported/same as other alerts ("Event Alert") - $alertCurValue - supported - this is set to the severity value - $alertCompValue - not supported - $alertTime - supported/same as other alerts - $alertCommandText - not supported - $alertComment - supported/same as other alerts (in commandAddedCommand only same as other alerts) - $alertLastComment - supported/same as other alerts (in commandAddedCommand only same as other alerts) This alert can be used with the Self Service Alerts, but only the Enabled field can be set. The WarningLevel, AlarmLevel, and Duration aren't supported for this alert.
17121: New description field
The RTView Alerts have been enhanced to include a Description property in the Alert category. This field can be used to supply a description of the alert. The value of this property is displayed in the Alert dialog in the Display Builder and in the new Description column of the Alert Variables Table.
17122: New command to clear alerts
The RTView Alerts have been enhanced to support a Clear Alert command. In addition to the new command, the Alert Table has been enhanced with 2 new columns: Cleared Reason - This column will list one of 4 values: - DATA UPDATE - This means that the alert was cleared because it received a value that did not meet the alert condition. - EXPIRED - This means that the alert was cleared because it expired due to the value in the alertExpireTime property on the alert. This property is only supported for Event alerts. - DISABLED - This means that the alert was cleared because the alert definition was disabled. An alert can be disabled by the enabledFlag property, the rowEnabledFlag property or the Enable/Disable alert command. MANUAL - This means that the alert was cleared by the Clear Alert command. The Cleared Time column contains the time that the alert was cleared. The new Clear Alert command is available in the Define Alert Command dialog and takes a single id or a ; delimited list of ids for the argument. 2 new substitutions are available for use in the alertClearedCommand: $alertClearedReason - This contains the reason the alert was cleared. It is same value that is in Cleared Reason column in the Alert Table $alertClearedTime - This contains the time the alert was cleared. It is the same value that is in the Cleared Time column in the Alert Table.
17123: New Count column in the Alert Table
The Alert Table has been enhanced to include a new Count column. When an alert is generated, this column contains a value of 1. The value is then incremented each time the alert receives a data update until the alert is cleared. The Alerts tab in the Application Options dialog has been enhanced to include a new option Update Count on Acknowledged Alerts. Deselect this option to prevent updates to the Count column on Acknowledged alerts. By default, if the New Data Only option is selected on a data attachment to the Alert Table, it will not update if the Last Update Time and Count columns contain the only change for that row. This is also true for alert persistence. In order to enable this update for the Alert Table when the New Data Only flag is selected and to enable this for alert persistence, use the following command line option: -lutupdatesnewdata:true/false
17178: -lutupdatesnewdata command fixed
In previous releases, the -lutupdatesnewdata command line option failed. This has been fixed.
Builder - Property Dialogs
17179: Display Data feature fixed to work with named data server
In prior releases, the Display Data dialog in the Builder did not show data for an attachment directed to a named data server. This has been fixed.
Commands
17023: onOpen/CloseCommand now works if background image is used
The onOpenCommand and onCloseCommand properties are now available in the Model Properties dialog when the "Use Background Image" option is checked in the Background Properties dialog.
Customization
17162: Support $value in command from fx objects
A custom flex object can now specify a string to be substituted for $value in commands configured on instances of the object, in the same manner as is supported for RTView control objects (obj_c1combobox, etc). The custom flex code should make the following method call to specify the string to be used for $value: gmsExt.setControlValue(value); where gmsExt is an instance of the com.sl.gmsext.GmsExt class and value is a String object. If the custom flex code calls the GmsExt.tableCellSelected method, then it must call the GmsExt.setControlValue() first, since the GmsExt.tableCellSelected will trigger the object's command. As mentioned above , this feature allows you to use $value in the custom flex object's command. For example, if a drilldown command is configured, you can specify $value in the Drill Down Display Name field of the command's drilldown properties. However, this feature is not supported in the drillDownTarget property of custom flex objects. Since this discrepancy might confuse users, you can hide the custom flex object's drillDownTarget property so that only its command property will appear in the proerty sheet, by adding the following item to the object's gmsVarInfo array declaration: ['__noddtarget', GmsVarDef.G_INTEGER,], // this hides the drillDownTarget property If the drillDownTarget property is hidden, then the user will need to use the command property to specify all drilldowns from instances of the custom flex object, and so $value can always be used.
Data Historian
16962: Historian optimization for storing cache data
The cache persistence feature was introduced in RTView 5.3 (task 15215). It allows a cache definition file to be used as an Historian data configuration file, so that no additional rtv files need to be configured to store and load cache history from a database. But in some configurations this design results in duplication of effort between the cache data source and the historian: The cache data source (managed by the data server, typically) and the Historian both process the raw data (with RTView functions, perhaps) and both perform the primary data compaction, as configured in the cache definition file. The Historian now supports an optional feature that avoids that inefficiency. When that feature is enabled, rather than receiving and processing raw data the Historian instead receives the rows of cache data to be stored from the cache data source (via the data server, if in use) after the processing and primary compaction has already been performed. In addition, the Historian will query the cache data source (via the data server, if in use) for the caches which should be persisted. This avoids the need for the Historian to load the cache definition files as historian data configuration files. If the Historian is used only to persist cache data, it can be run without specifying any data configuration files, if the new feature is enabled. To enable the new feature, specify the following command-line option when starting the historian: -persistCaches:true Or, add the following line to the HISTORY.ini file: persistCaches true Currently the feature can not be enabled from the historian GUI. If the -persistCaches:true option is specified, the Historian will get all of the cache definitions from the local cache data source and any connected data servers. For each cache it finds that is configured for persistence (i.e. has a non-blank value for either the historyTableName or currentTableName property), the historian will create the corresponding database table if necessary and begin inserting rows into those tables. Even if the -persistCaches:true option is specified, the Historian will still load any files that appear in the Data Configuration Files list (in the GUI) or are listed as history_config lines in HISTORY.ini, even if those files contain cache definitions. So if the -persistCaches:true is used in an existing configuration, it will be necessary to remove those files from the list of Data Configuration Files or from HISTORY.ini. Otherwise data for caches defined in those files will get stored twice.
Data Sources
Cache Data Source
17089: Cache dropdown list correct when DataServer field uses subs
A bug has been fixed which prevented the Builder from populating the list of available caches in the "Attach to Cache Data" dialog, in cases where the value entered in the Data Server field of that dialog contained a substitution string.
17156: RTViewDs meta-table added to show all cache properties
The cache data source supports a new meta-table named RTViewDs.CacheObjectProperties that contains all of the scalar property values for each tabular cache. The table can be viewed by making a cache data attachment with Cache = RTViewDs and Table = CacheObjectProperties. The CacheObjectProperties table contains a row for each tabular cache, with the cache name in the first column followed by a column for each obj_cache_table scalar property, in alphabetic order by property name. Tabular properties, like initialTable and valueTable, are not included. Non-tabular caches defined by obj_cache_double instances are not listed in the table.
JMX Data Source
17158: New option Auto-Discover Filter to limit JMX autodiscovery
The JMX Data Source has been enhanced to support a new option: Auto-Discover Filter. If specified, this limits the auto-discovered connections to the ones where the connection's Display Name starts with the specified string. This filter can be specified in the JMX Administration tab in Application Options or via the command line: -jmxautodiscover:XXX Where XXX is the filter. The filter can either be a single value or a ; delimited list of values. For example, the following filter would limit the auto-discovered connections to classes that start with com.sl: com.sl The following would limit the auto-discovered connections to classes that start with com.sl or org.apache com.sl;org.apache
17159: Connection column added to TabularData
The JMX data source has been enhanced to include a Connections column in the TabularData returns. This column shows the name of the JMX Connection for the data.
Display Server
17079: Tooltip in trend graph no longer missing timestamp
In the thin client, the tooltip for each trace point on an obj_trendgraph02 now includes the time that corresponds to the point. The time string format is determined by the graph's legendTimeFormat property or, if that property is not set, the timeFormat property. In the thin client, note that the tooltips are shown on the trace points only if the graph's cursorFlag property is checked.
17112: FireFox scrollbar no longer moves on update of RTView displays.
A problem has been fixed in the thin client in which Firefox would scroll the entire page in order to keep the selected table row in focus, each time a value in that row was updated.
17134: Adding columns to table no longer triggers drilldowns
The following problem has been fixed: In the thin client, if a table has multiSelectFlag = 1 and has a drilldown target, and if columns are added to the table after the display is initially opened, this may trigger multiple extraneous drilldown requests from the thin client, possibly with bogus substitution values. This may make the display unusable. This is a regression bug in RTView 5.9 due to the changes for task 16919.
17135: Display server exception if dd cmd attachment result is empty
The following display server bug is fixed: If an object has a command with type = "Drill Down or Set Substitution" and the command's Drill Down Display Name is attached to data but the attachment returns an empty string (e.g a tabular attachment with a filter that matches no rows) then when the display is opened in the thin client, the message "error generating image" is displayed and a "String index out of range" exception is thrown by the display server.
17148: navtree.xml in PANELS.ini can now be loaded from jar
The display server can now read the navigation xml file referenced in a PANELS.ini file (e.g. navtree.xml) from a jar file. Previously the display server could only read it as an actual file from the working directory.
17164: New option to treat substitutions like in Display Viewer
The Display Server supports a new option that will preserve the values of local variables for which the "Use as Substitution " option is selected when navigating to different displays in the same panel. This is consistent with the behavior of the viewer. The option can be specified on the command line as follows: run_displayserver -clearsubs:false or in DISPLAYSERVER.ini as follows: clearsubs false or in a properties file as follows: sl.rtview.displayserver.clearsubs=false If the option is not specified, then the display server will set all local variables to their initial values when navigating to a new display regardless of the variable's value in the current display, as in all previous versions of the display server. Global variables are not affected by this option.
17196: Fixed crash of table with strings containing ascii null chars
The following thin client problem has been fixed: An "unterminated string constant" javscript error occurs in IE when drilling down to a display that contains a table with a string column in which any strings contain embedded ascii null characters.
17208: Thin client now applies columnHeaderTextSize=0 to obj_table02
The following problem in the thin client has been fixed: In the builder/viewer, setting columnHeaderTextSize=0 on obj_table02 makes the column header invisible. However, in the thin client the column header is still visible.
17209: gridHorizontal/VerticalVisFlag on obj_table02 now applied
The following problem has been fixed: In the thin client, the horizontal and vertical grid lines are always drawn, even if the value of the gridHorizontalVisFlag or gridVerticalVisFlag property is false.
Distribution
17142: New "simple" package option
A new streamlined package of RTView has been added for users who only require application files. This .zip file is compatible with all operating systems that RTView supports. The RTView_X.X.X.X_simple.zip file excludes the following directories and files: demos custom docs servers lib/signed_jars.zip
17177: Alert Demo Data Server shortcut fixed
Previously the Alert Demo Data Server shortcut under the Windows start menu incorrectly started the Historian. It has been fixed to run the Data Server.
Functions
17075: Join Outer function now allows null input
The behavior of the Join Outer function when one of its input tables is null has been improved. Previously the function would return null in all cases if either input table was null. This behavior has been changed as follows: - In case of a full join or right join, if the first (left) input table is null the result will be the second (right) input table. - In case of a full join or left join, if the second (right) input table is null the result will be the first (left) input table. In all other cases result will be null as previously. Note: the behavior of the Join function has not changed.
17077: Performance optimization for Join
The Join and Join Outer functions will now perform significantly faster, especially with large tables.
17136: Sort function exception fixed
The Sort Table function no longer throws a null pointer exception if the table to be sorted is non-null but has zero columns.
Layouts
17188: URL using panels.jsp now can include initial substitution values
To define initial substitution values in a panels layout, the thin client will now accept a "subs" parameter in URLs that specify panels.jsp. For example: http://SomeHost/rtvdisplay/panels.jsp?subs=$table:production_table The panels file must use the <rtvLayout> tag as described in the RN for 15795. Panels files using older formats will still ignore the "subs" parameter, in the thin client. The substitutions will be applied to the initial display(s) opened in the panel layout. If it is desired that those substitutions be applied to displays that are subsequently opened then either (1) the substitutions should be mapped to global variables, or (2) the -clearsubs:fals option should be specified when starting the display server (see 17164 for details)
Local Variables
17150: Corrected scope conflict local vars and global vars of same name
A problem has been fixed which in some cases caused RTView to use the value of a global variable even though a local variable with the same name but a different value was defined in the current display.
Object Library
17074: Improve mouse over performance on composites
Improvements have been made to reduce CPU usage in the Builder and Viewer for the case where display contains many composite objects and an object's mouseover text (tooltip) is visible in the display.
17144: Mouse over no longer in wrong place after window resize
In previous releases, the mouse over was drawn in the wrong location on displays that had been resized. This has been fixed.
17163: Corrected mouseover clipping on right side of display
In previous releases, the tooltips that displayed next to the right side of the display were sometimes clipped in the following situations: 1. In the Display Viewer, tooltips were sometimes clipped on the right side of displays there were using the Multiple Display Panels layouts and there was another panel such as a navigation panel to the left of the display. 2. In the Thin Client, tooltips were sometimes clipped on the right side of the display if the tooltip text contained mostly upper case letters. Both of these have been fixed.
Composite Object
17080: Opening/closing/scrolling display w. many composites optimized
Improvements have been made that reduce the time required to open, scroll, and dismiss a display containing many composite objects.
Fx Trend Chart
17140: Current table update no longer clears history on fxtrend
A problem has been fixed in obj_fxtrend in which historical data that had recently been plotted via the traceNValueTable property would be cleared by the first update to the traceNValue property.
Pie Charts
17132: obj_pie exception in thin client fixed
The display server no longer throws an array bounds exception when rendering an obj_pie instance that has both the mouseOverFlag and rowSeriesFlag properties set.
Version 5.9.0 Release Notes
Alerts
16909: New Self Service Alert demo
The Self Service Alerts demo has been added to the RTView installation in demos\selfservicealerts. This demo works with the new Self Service Alerts feature and contains displays to view and interact with your active alerts and to configure your alerts. Alert settings are automatically persisted to a database. An audit table is also provided which tracks changes to the settings.
16936: Text in alert table updated when threshold changes
The Alert Table has been enhanced so that the Alert Text updates if the threshold for an active (ie uncleared) alert changes.
16954: New option to add comments to alerts
The RTView alerts have been enhanced to support comments. The Alert Table now contains a Comments column. This column is initially blank, but is updated by the Add Comment and Clear Comments commands. Comments can be added or cleared for any active, cleared or acknowledged alert unless that alert has been purged from the system. The Add Comment command takes 2 arguments: the alert id and the comment to add. The specified comment is timestamped and added to the alert's comments. The Add Comment command does not replace existing comments on the alert - the new comment is added after the previous comment. The Clear Comments command takes 1 argument: the alert id. This command clears all of the comments from the alert. A new property, commentAddedCommand has been added to all alerts. If specified, this command will be executed after a comment is added to the alert by the Add Comment command. All of the substitutions that are supported for the alertCommand are also supported for this command. Two additional substitutions are also supported for the commentAddedCommand: - $alertComment - This is set to the value of the Comments field for the command after the new comment has been added. - $alertLastComment - This is set to the value of the last comment added to the Comments field. The Self Service Alerts demo has been updated to include support for alert comments. In the Alert Table, click on an alert to open the manage alerts dialog. In this dialog, you can view existing comments, add new comments or clear the comments for the alert. To add a comment, enter your comment text in the Enter Comments field, then click Add Comment. To clear the comments for an alert, click the Clear Comment button. If you have enabled the RTView login for the Self Service Alerts demo, the user name is added to the beginning of the comment.
16955: New Data Only option has been added
The following Alert tables have been enhanced to work better with the cache and Historian: Alert Table Alert Variable Table Tabular Alert Tables For these tables, when any row in the table changes, the listeners for that table receive updates containing all rows in the table. This is inefficient for the caches and Historian. A New Data Only option has been added to the Attach to Data dialog for these tables. When selected, the listener is only updated with the rows that change for those tables. By default, if the New Data Only option is selected, the Alert Table will not update if the Last Update Time column contains the only change for that row. In most cases, this update is not needed by the cache or Historian. In order to enable this update for the Alert Table when the New Data Only flag is selected, use the following command line option: -lutupdatesnewdata:true/false
16994: Discrete Alert no longer throws a NullPointerException
In previous releases, the Discrete Alert would throw a NullPointerException if the input value was null. This has been fixed.
Builder
16361: Edit Function and Function Description dialogs positioning issue
In the Display Builder Function Dialog, the Edit Function Dialog when opened for the first time was sometimes positioned too far toward the bottom of the screen, so that its buttons and its help dialog could end up off-screen. The initial position of this dialog has been corrected. Note the position of this dialog is not maintained across invocations of the Builder.
16957: Get Data Server Connection Status now populates initially
The following problem existed in the previous release and is now fixed: If an instance of the "Get Data Server Connection Status" function is created in the builder and a table object is attached to the function, the table is empty until the display is opened in the preview window.
Builder - Options Dialogs
17061: Popup menu now opens on correct monitor in dual monitor setup
If the Builder or Viewer is run on a system with multiple monitors, popup menus and command confirm dialogs will now always open on the same monitor as the window in which the user clicked. In prior releases, the menus and confirm dialog would sometimes appear on the wrong monitor.
Builder - Palette Handling
16690: NPE while dragging an object corrected
In previous releases, the Display Builder occasionally printed a stack trace when an object was dragged when being instanced from the palette. This has been fixed.
Data Historian
16853: Historian's "Store Last Value Only" improved
The historian's "Store Last Value Only" feature has been improved to store the last set of rows applied to each object that specifies a given database table name in its historyTableName property, including the case where multiple objects have identical attachment strings. This is useful in a historian configuration where multiple objects, loaded from unique history config files, are attached to functions with the same name and all specify the same database table name. Previously only the rows for the last such object to be updated were stored.
17020: Enable substitutions for Historian Compaction properties
The "compactionRules" item in the Data Compaction: Secondary (Historian) category may now be edited directly and use directly typed rules, directly typed Substitution variable names and variable names attached via the Attach to Data menu.
Data Server
16729: Server upward compatibility now supported
Future compatibility between clients and servers of different RTView versions is now possible because of changes to avoid serialVersionUID mismatch exceptions and ClassNotFound exceptions due to changes made between RTView versions to serializable classes and obfuscation of fields in those classes.
16751: Utility app for cleanly stopping the Data Server
A new utility, kill_dataserver, has been added for stopping the Data Server cleanly. Both a Windows .bat and Unix shell script version have been provided By default kill_dataserver will kill the Data Server running on port 9020. The following arguments are available. These can be hard-coded in the script by uncommenting the line provided and changing the value, or they can be entered at the command line. -host: -name: -operation: -port: -user: -password: -url: -silent/verbose Example (defaults): -host:localhost -name:RTViewHistorian:name=Manager -operation:killHistorian -port:9020 Example of optional arguments (not set by default): -user:myuser -password:mypass -url:service:jmx:rmi:///jndi/rmi://localhost:9995/jmxrmi
16950: Config column added to data server conn status table
The table returned by the function "Get Data Server Connection Status" now contains an additional column labeled "Config". This column contains the RTView configuration string that identifies the RTView version of the data server.
16968: Timeout added for http client connections to rtvdata servlet
An RTView client application that is connected to the data server via the rtvdata servlet will now retry sending an http request if no reply is received from the rtvdata servlet in 2 minutes. Previously the client would wait forever, which resulted in lost contact with the data server if an http request stalled or was lost.
16969: Stale http clients in rtvdata servlet now removed
In prior releases, if a client was connected to the data server via the rtvdata servlet and the client terminated abruptly or the connection was lost, the client would remain in the data server's list of client indefinitely. Now, "stale" http clients are removed after 10 minutes of inactivity.
Data Sources
16996: rtvagent servlet no longer leaks session IDs
In prior releases, rtvagent would use the initial session ID assigned by the app server (tomcat) even if that session had timed out because of inactivity. This would cause the app server to assign a new session for each subsequent request from the agent. This has been fixed.
CMDB Data Source
16656: New CMDB data adapter
A Configuration Management Data Base (CMDB) data source has been added to RTView. The CMDB data source allows the users to describe a set of configuration items (CIs) and their hierarchical relationships and store that information into one or more databases. Configuration items can by of two types, one is a Container and the other is a Metric Source. This solution allows you to define the configuration information necessary to enable the Metric Source in one (or more) central databases (CMDB). It also allows application builders to construct displays from the RTView Builder with a visual representation of the hierarchical tree based on the relationships of Container and Metric Source configuration items placed in the CMDB.
Cache Data Source
16970: "Mark & Delete" value added to rowExpirationMode cache property
The cache property rowExpirationMode now supports an additional mode named "Mark & Delete", in addition to the other modes named Off, Mark, and Delete. (Those modes are described in task 16725). When Mark & Delete mode is selected, an additional property named rowExpirationTimeForDelete will appear in the property sheet, The Mark & Delete mode is useful in cases where a row in the cache's current table should be marked as expired after the time period indicated by the rowExpirationTime has passed and the row has not been updated, and then later the row should be deleted after the time indicated by rowExpirationTimeForDelete has passed. For example, say a cache has the following property settings: rowExpirationMode: Mark & Delete rowExpirationTime: 30m rowExpirationTimeForDelete: 4h rowExpiredColumnName: Expired If a row in the cache's current table is not updated for 30 minutes, the value of the Expired column for that row will be set to true. If a row is not updated for 4 hours, it will be deleted from the current table.
16971: rowsToDeleteTable now works for any subset of cache columns
The cache rowsToDeleteTable property is intended to be attached to a table that specifies the rows to be deleted from the cache's current table. In prior releases, the rowsToDeleteTable was required to contain all of the columns specified in the cache's indexColumnNames properties. Now the rowsToDeleteTable can contain any subset of the columns in the cache and all the rows in the current cache whose values in those columns match the values a row in the rowsToDeleteTable will be deleted.
16988: Fixed NPE caused by loading history_condensed table
The following bug has been fixed in this release: The cache data source threw a NullPointerException when a listener was added to a cache's history_combo table if the cache's history_condensed table already contained data (restored via database query) but the cache's raw history table did not yet contain any live data.
17004: valueTableCount change no longer hides compaction props
Changing the valueTableCount property on obj_cache_table no longer changes the visibility of the cache compaction properties in the Builder's property sheet.
17039: SQL extend plus multi-column filter with empty values fixed
The following problem is fixed: If a cache attachment has the Extend with SQL option checked and the Filter Column field specifies multiple columns but the Filter Value field specifies multiple empty values then an array bounds exception is thrown.
IBMMQ - IBM WebSphere MQ
16756: More robust handling of errors in manually edited rtv files
Under certain circumstances incorrectly manually edited rtv files would cause issues with the rtview runtime. More robust error handling has been added which will help identify the element at fault: e.g. Error: Unable to URL Decode: xxxx
16768: New IBM MQ data adapter
The IBMMQ Datasource has been added to RTView that replaces the deprecated IBMADM Datasource. The new IBMMQ data adapter allows access to IBM WebSphere® MQ servers and the ability to query metrics from key MQ entities such as Queue Managers, Queues and Channels. Metrics may be obtained from named objects of a variety of types. Names may be single, multiple and/or wildcarded to restrict the subset of Objects queried, if required. The IBMMQ Data Source is built in and requires no additional command line arguments. However it does need the required jars (com.ibm.mq.pcf-6.0.jar;com.ibm.mq.jar;connector.jar) on the RTV userpath as described in the Setup section of the System Requirements documentation for the Data Source. For full details see the IBMMQ Data Source section in the User Guide Documentation.
16776: Reduced connection resources in RTView IBMMQ data source
The Connection resources (number of connections) used by the RTView IBMMQ data source has been reduced when connecting to an IBM MQ server. The Connection used is released if connection fails due to a MQRC_NOT_AUTHORIZED error.
16777: MQRC_NOT_AUTHORIZED at connection now marks connection INVALID
If a MQRC_NOT_AUTHORIZED exception (reason code 2035) occurs at connection time, the offending connection is now marked as INVALID. This means that no subsequent connect attempts will made using this connection.
16905: Channel Status Values Returned for active channels
Active channels now return channel status values in the Status column. (inactive channels cannot be queried, so return no data) Status Values can be one of the following BINDING Channel is negotiating with the partner. STARTING Channel is waiting to become active. RUNNING Channel is transferring or waiting for messages. PAUSED Channel is paused. STOPPING Channel is in process of stopping. RETRYING Channel is reattempting to establish connection. STOPPED Channel is stopped. REQUESTING Requester channel is requesting connection. INITIALIZING Channel is initializing.
16913: conn=* is now supported for the IBMMQ Data source.
You can now use * to specify ALL connections in IBMMQ data attachments. Thus you can use conn=* to show the state of all connections without having to know an individual connection name. The data is queried across the connected connections, and is updated as it is returned from the individual connections. The conn column in returned data is populated with the actual connection used to query the data. Since the data is updated as it is returned from the individual connections, you may need to use the buffer rows function to batch the asynchronous data for display. You may also need to use caches to aggregate the data returned from multiple connections. Limitation: The Join function may not function as you expect when fed with data from multiple connections that arrives asynchronously.
16914: Queues now include Open input count and Open output count
Queue Data now contains Open input count and Open output count Columns Queue Data returned from IBMMQ Data Attachments of Object (Type) Queues or Queues (PCF) now contain Open input count and Open output count Columns. Open Input Count Shows the number of open input handles, that is the total handles open for input on this queue. This gives you an idea of the number of applications that are currently connected to the queue to put messages on the queue . Open output count Shows the number of open output handles, that is the total handles open for output on this Queue. This gives you an idea of the number of applications that are currently connected to the queue to get messages from the queue
16941: Prevent creation of additional Dynamic Queues for Model Queues
Queries of the form Object=Queues obtain their information my using the accessQueue() method on the QueueManager for a named queue. If the named Queue is a Model Queue, then as per the API, a dynamic queue is created on the server. This is not desired behavior for a monitoring tool - so we detect this condition, issue an error message that identifies the cause, disconnect the connection, and mark the connection invalid to prevent further re-occurrences. The Error message is of the form: IBM MQ Data Source: 2011-03-07T16:37:47.0484 : ERROR: connection: vmrh5-3: Accessing model queue: SYSTEM.DEFAULT.MODEL.QUEUE created dynamic local queue: AMQ.4D5C8E6423C42331 from query :ibmmq {conn=* object=Queues names=TEST*%3BSYSTEM* __fmt=av1 __daum=1} IBM MQ Data Source: 2011-03-07T16:37:47.0484 : Marking connection vmrh5-3 as invalid to prevent creation of additional queues If this occurs, the user should investigate the Queues data attachment, and modify it so that model queues are not referenced by the Queues Query , or use the Queues (PCF) query instead.
16942: Connection attempt counter reset after successful connection
Previously the attempt counter was not reset after a successful Connection attempt, leading to an absolute Max Retry Attempts. Now the Connection Attempt Counter is Reset after a successful Connection attempt, leading to unique Max Retry Attempts between successful connection attempts.
16951: Unlimited connection attempts now allowed for a connection
Unlimited connection attempts are now allowed for a Connection, when an -ive value is specified for Max Retries. It is suggested the value of -1 is used to signify this. In this case, unlimited connection attempts will be made until a connection is established. This may be useful when MQ servers are cycled for maintenance, or the servers are expected to be down for a period and a connection is wanted when the servers come back up.
JMS Admin Data Source (for TIBCO EMS only)
16871: Attachments to Topics and Queues now support compound urls
In previous releases, data attachments to the Topics and Queues metrics in the EMS Administration Data Source did not support compound urls for fault tolerant servers. This has been fixed.
16873: Durables query to standby servers no longer throws exception
In previous releases, if the EMS Administration data source was monitoring a fault-tolerant pair of servers and you attached to the Durables table, the following error would print to the console on each update: ERROR: com.tibco.tibjms.admin.TibjmsAdminException: In fault tolerant standby, list of durables not known. (status=1) This has been fixed.
Pipe Data Source
16717: New Pipe Data Source
The RTVPipe data adapter supports data attachments which will launch an external process, read the text output of that process, and convert it into a string or a data table for use within RTView. The external process can be any executable program or script that writes lines of text to its standard output stream. The connection between RTView and the output stream of the process is referred to as a "pipe". The RTVPipe data adapter uses a Java class known as a "pipe handler" to parse the output it reads from the process. The pipe adapter has two simple built-in handlers -- one that converts the process output into a multi-line text string and another that converts it into a single-column table with one row per line of output. For more sophisticated conversions a custom PipeHandler subclass can be written and used. See the RTView javadocs for more details. There are examples of custom handlers in the custom/rtvpipe directory of the RTView installation. Custom handlers are specified in the RTVPipe tab of the Application Options dialog of the Builder. The "Attach to RTVPipe Data" dialog contains the following fields: - Command String: A text field used to specify the command string to be executed by the pipe adapter. The pipe adapter will connect to the output stream of the process that is created by executing the command string, and send the lines of text from that stream to the handler. The command string can contain substitutions. After the substitutions have been applied, the command string must be executable on the host on which the pipe adapter is running. On Windows, this means that the command string must specify a .exe file (which could be "cmd.exe /c x.bat" to run the x.bat script file). On Unix/Linux, the means that the command string must specify an executable program or shell script. In all cases the launched process must write lines of text to its output stream. - Handler: A dropdown list for selecting the name of the handler to be used to process the lines of text input as they are read from the pipe. The names that appear in the list are the two simple built-in handlers (Generic text, Generic Table) plus any custom handlers defined on the RTVPipe tab of the Builder's Application Options dialog. A unique instance of the handler class will be created for each unique pipe (each unqiue data attachment). - Handler Hints: A text filed for specifying string of "hints" to be passed to the handler. If the selected handler does not support hints (the built-in Generic handlers do not) this field is not visible. The expected format of this string is determined by the selected handler. -Run Mode: A dropdown list with choices of Once, Periodic, or Continuous. The run mode specifies what action the pipe adapter should take when the pipe's process terminates (completes). If Run Mode = Once, the adapter will not re-execute the command string after the process terminates. This mode is useful for an on-demand reading of a complete error log file, for example. If Run Mode = Periodic, then after the process terminates the adapter will re-execute the command string again after waiting for the number of seconds specified in the Interval field. This mode is useful for periodic reading of an updating file via a command such as "cat" or "tail" (without the -f/-F option). If Run Mode = Continuous, then after the process terminates the adapter will re-execute the command string immediately, since the assumption in this case is that the process should never terminate unless an error is encountered. This mode is useful for reading an updating log via a continuous command such as "tail -F". - Interval: A text field for entering the number of seconds in each run interval. This field is visible only when Run Mode = Periodic. - Timeout: A text field for entering the timeout in seconds for a continuous process. This field is visible only when Run Mode = Continuous. If no output is read from the process in the timeout period, the process will be restarted. The default value is zero indicating no timeout. The following fields are applicable if the selected handler indicates that it returns a data table from its parseLines method. If instead it returns a string, these fields are not visible. These fields appear in most other RTView data attachment dialogs (such as the "Attach to Cache Data" dialog) and are used to specify a filter on a table: - Column(s): A combo box for specifying the names of the table columns to include in the result, or * (the default) for all columns. - Filter Rows: A checkbox to enable the following 2 fields: - Filter Column: The name(s) of the columns(s) to which the Filter Value should be applied. - Filter Value: The filter value(s) to be applied to the filter columns. See the RTView documentation for details on the format to be used for specifying filter values. Note tha wild cards and regular expressions are not supported in the Filter Value field. For that type of filtering, various standard RTView functions are available. As mentioned above, users can create custom handler classes if necessary to parse the output of specific programs or scripts. In the RTVPipe tab of the Builder's Application Options dialog, a Handler Name and a Java Class Name are assigned to each custom handler that will be used. The Handler Name is used in RTVPipe data attachments, as described above. The Java Class name is the fully-qualified name (java package name + class name) for the class that implements the handler. This class must be in the class path at run time.
16998: Corrected NPE when process exits
A problem has been fixed which caused the pipe data source to occasionally throw a null pointer exception when the pipe process terminated. An exception message and stack trace were printed but the exception had no other side-effects.
SNMP Data Source
16796: Trap receivers now started for all connections
If the SNMP Data Adapter was configured for two or more connections on different ports, and display contained a data attachment to receive traps from "*", only the trap receiver for the default connection would be started. This has been fixed; at the first occurrence of a data attachment to connection "*", trap receivers will be started for all connections.
16848: SNMP debug tracing updated with additional print statements
The SNMP Data Adapter tracing feature has been enhanced with new levels of detail, enabled with snmptrace values of 11 or higher.
16925: New SNMP metadata table
The SNMP Data adapter now provides access to internal metrics tables via the connection name RTViewDs. There are two tables, Data and Traps, which will appear in the Object ID dropdown when a data attachment is being made to RTViewDs. The Data table presents information about SNMP Get requests per-connection and per-OID. The information includes: Total Requests (count), Failed Requests (count), Last Time (msec), Average Time (msec), Last Error (string). The Traps table presents information about SNMP traps received, per-connection and per-OID. The information includes: Traps Received (count), Last Timestamp (date).
16958: New SNMP Data Source
The RTView SNMP Data Adapter has been added to the standard data adapter set. For those who have been using it as a supplemental data adapter it will no longer be necessary to identify it as a "custom" data source (via command line or option file) when running or to add its jars to the RTV_USERPATH environment variable.
SQL Data Source
16705: Quotes around column names respected when queries combined
The following problem in the SQL data source is fixed: If two separate SQL data attachments on the same display specify the same database table but different columns, and neither attachment has the "Enter SQL Query" box checked, the combined SQL query string will not contain any quotes that the user placed around the column names, causing the query to fail on some databases.
16746: Reduced excessive garbage collection calls
The SQL data source no longer forces a garbage collection after each query is completed. This may provide a small performance improvement in some configurations.
Splunk
16681: Splunk Datasource now supports Version 4
The Splunk Data Adapter is now compatible with Version 4 releases of Splunk. This version may still be compatible with version 3 releases of Splunk, but has not been tested with it.
16771: New command line options added to splunk data source.
New command line options have been added to the Splunk data source to provide additional logging information. -splunklog4jlevel:
This option enables using log4j logging in the Splunk API library using the standard log4j levels of FATAL, ERROR, WARN, INFO and DEBUG. For example, the following: -splunklog4jlevel:DEBUG will create output files containing the raw json data returned for a search. (NOTE: Use with caution as this may lead to the creation of a large number of large files) Additional command line options allow testing for ragged data with -splunkTestCols (for output) and -splunkUseCols (to add cols to tabular data).
WMI Data Source
16786: Convert WMI DateTime values to Date values
Previously the WMI Data Adapter did not correctly convert WMI DateTime values to Date values. The WMI Data Adapter now converts WMI DateTime values to Date values in GmsTablularData. The conversion handles both Date Values of DateTime and Interval values of DateTime. Intervals are stored as milliseconds (offset from the epoch start). Converting an Interval Date column to a Long column will extract and convert the offset and thus display the offset in milliseconds as a Long
Demos
16718: New RTVMonitor Demo
The RTVMonitor is a set of displays that will enable users to view the status of all RTView Data Servers, Display Servers, Historian and Tomcat applications in a system. The RTVMonitor, using the the RTView JMX Data Adapter, displays connectivity information available via JMX, as well as all detailed operational and management features currently available via JMX. The displays are viewable on a central browser-based RTView dashboard, as well as an application.
17048: Tomcat App page bug fixed
In the RTVMonitor, a bug had prevented the Tomcat server APP page from displaying data (in most cases). This has been fixed.
Display Server
16477: Removed 1px dark border around checkbox & radio button in IE
In the previous release, an extraneous 1 pixel dark border was drawn around radio button and checkbox controls when a display was viewed in the thin client in Internet Explorer. This problem is fixed.
16766: Localization support added for browser messages
The text displayed by the thin client in its popup menu, login window, status window, and in various error messages is now specified in the file named rtvdisplay_strings.properties. That file is found in the WEB-INF/classes/gmsjsp directory of the rtvdisplay.war file. For localization, the file can be extracted from the war file, copied to a new file with the desired locale suffix (e.g. rtvdisplay_strings_ja.properties for Japanese), and the new file can be packed into rtvdisplay.war, in WEB-INF/classes/gmsjsp. The locale setting of the app server (e.g. tomcat) will be used to determine which properties file to load. If the app server does not have the desired locale setting for the thin client, then edit the original file (rtvdisplay_strings.properties) instead.
16767: Disabled button no longer looks enabled in some browsers
In prior releases, disabled buttons had the same appearance as enabled buttons, in the thin client in Firefox or Safari. Now, the text will be "grayed-out" on disabled buttons.
16861: Display sharing in display server and rtvdisplay servlet
The Display Server and the rtvdisplay servlet have been enhanced to improve performance by sharing specified displays among all clients. This is intended to improve performance in configurations where many clients will typically be viewing the same display simultaneously. The display server will load a single copy of each shared display, rather than loading a separate copy for each client. In addition the rtvdisplay servlet will temporarily store the web page content (html, image, javascript) generated for a shared display and will then reuse that content to satisfy requests for the display from any client, rather than regenerating it for each client request. There are limitations on the features that can be used on a shared display, so displays to be shared should be selected carefully. These limitations are described later in this note. Each display to be shared is identified in DISPLAYSERVER.ini as follows: shared_display <filename> [substitutions] where <filename> is the name of an rtv file and [substitutions] is an optional list of substitution string:value pairs, separated by spaces. If a substitution value contains spaces it must be enclosed in single quotes. For example: shared_display navtop.rtv shared_display summary.rtv $region:East shared_display summary.rtv $region:West shared_display summary.rtv $region:'East and West' The display server will "preload" all of the shared displays at startup, rather than waiting for a client to request the display. Subsequently, any client request for a display (plus substitutions) that exactly matches one of the shared display entries in DISPLAYSERVER.ini will be processed using the corresponding preloaded, shared display. The rtvdisplay servlet is also involved in display sharing. As mentioned earlier, it will keep the web page content that it generates for each shared display and use that same content to respond to all client requests for the shared display that it receives within the "shared display refresh interval". By default the interval is 15 seconds and can be changed by specifying a property named SharedDisplayRefreshInterval in rtvdisplay.properties. If the servlet receives a client request for the shared display after the interval has expired, the servlet will check with the display server to see if the stored content is "stale" (that is, if any data has been applied to the display since the content was generated). If it is not stale the servlet will store the content for another interval. If it is stale, the servlet will get the updated display state from the display server and then regenerate the content. The servlet will periodically purge the stored content for shared displays if it has not been accessed within one shared display refresh interval plus one minute. The JMX Mbean operation named RTViewDisplayServer.Manager.clearDisplayCache can be used to clear and reload all shared displays in the display server and clear all page content for shared displays currently stored in the rtvdisplay servlet Note that the performance benefit of display sharing is obtained only if multiple clients request the same shared display within a single shared display retention interval. So only displays that are frequently requested should be considered for sharing. The maximum number of shared displays for which the servlet will store the content is determined by the MaxSharedDisplays property, which has a default of 10. This property should be set to a value at least as large as the number of shared_display entries in DISPLAYSERVER.ini. Tracing of display sharing in the servlet can be enabled by adding the following line to rtvdisplay.properties: SharedDisplayTrace=true Any client request that specifies a display name and substitutions that does not match a shared_display entry will be processed in the normal "unshared" manner. That is,the server loads a unique copy of the display into its own panel, and closes the panel when the client dismisses the display, and the servlet discards the page content that it generates for the request after returning the content to the client. In the thin client, a user can determine if a shared display is being viewed by right clicking in the display and picking Status from the popup menu, and then checking the Panel ID string shown in the Thin Client Status window. For a shared display the Panel ID string begins with "preload". Metrics about requests for shared displays can be viewed by opening the page named servletstatus.jsp in a browser, for example: http://localhost:8068/rtvdisplay/servletstatus.jsp. The page contains the following info: request count: the total number of client display requests received connection: the current connection from the servlet to the display server started: servlet's start time shared display refresh: the value of the SharedDisplayRefreshInterval property, in seconds shared display hits/tries: the number of client requests satisfied by stored content for shared display / total display requests. A high % indicates that display sharing is effective, a low % indicates that it is not effective for the requests being received. shared display updates: the number of times the servlet has stored or updated shared display content shared displays: number of shared displays stored / MaxSharedDisplays. This is followed by a list of the shared display content which is currently stored in the servlet. Limitations. The following features should not be used on shared displays, since these features can change the state of a display for each user. - A resizeMode of Layout or Scale. - Scrolling on obj_trendgraph02, obj_bargraph, obj_objectgrid. - Paging mode on obj_table02. - User-specific or role-specific substitutions ($rtvuser, $rtvrole, etc). The resizeMode is forced to Crop on all shared displays, user-specific substitutions are not applied to shared displays, and the thin client will never display scrollbars on the objects mentioned above in shared displays. In addition: - The substitutions in a client request for a shared display must exactly match those specified in the entry in DISPLAYSERVER.ini, including the order of the substitutions, otherwise the request will be treated as for a non-shared display. - All shared displays share the same set of global variables and function. On all other (non-shared) displays, the display server uses a separate set of globals that it maintains for each browser session. So, if a any user changes the value of a global variable X from a shared display, all users viewing any shared display will see that same value of X, even users on separate machines. However, the value of X on any non-shared displays will not be affected by that change. - A drilldown to a shared display always behaves as though the "Remove Existing Substitutions" box was checked in the Drill Down Properties dialog. This is necessary so that substitutions in the source display aren't included in the drilldown substitutions, which might prevent them from matching the shared display's substitutions.
16919: Table row selection problem fixed
A problem has been fixed in the thin client in which the row selection in a table object was not properly cleared when the columns in the data table changed, and if the user then selected the same row in the table as was previously selected, the row was not highlighted.
16949: Images with backslash in path in table's filterProp now load
In prior releases, the thin client would fail to load images for table cells if the path to the image (as specified in the table object's filterProperties) contained backslashes. This is fixed.
16960: Immediate refresh of main display after dd or setvar in dialog
In the thin client, setting a global variable by a drilldown or control click in a dialog window will now trigger an update in the main display within a few seconds, so that the main display reflects the change. Previously the main display did not update until the next scheduled refresh interval.
16985: Concurrency problems in heavily loaded display server fixed
Several conditions that caused null pointer exceptions and deadlock in a heavily loaded display server have been fixed.
17007: Export to PDF window now resizeable
The browser window opened by the "Export to PDF " menu item in the thin client is now resizable in all supported browsers.
17030: Corrected occasional stale shared display content
The thin client would sometimes show stale content for a shared display, for extended time periods. This has been fixed.
17057: Long URL in IE8 supported in drilldown to new window
The following problem that affected the thin client in Internet Explorer 8 has been fixed: In the thin client in IE8, a drilldown to a new window fails with the error "Internet Explorer cannot display the webpage" if the URL is longer than 2083 characters. Typically this occurs if the parent display contains many substitution/value since those are included in the URL, unless the "Remove Existing Substitutions" box was checked when the drilldown target was configured.
Distribution
17060: RTView renamed in Windows installer
The Windows Start Menu shortcut directory and installation directory have been changed from: RTView <version> ERTV_<version> to: RTView <version> RTV_<version>
Drill Down
16745: Fixed JS error on custom flex object with slow initialization
A problem in the thin client has been fixed which caused a javascript exception to be thrown if a custom flex object was slow to initialize. The exception was "Error: div.player.setGmsVar is not a function".
16887: $colName and $celldata now correctly passed to drilldown
In prior releases, the $colName and $celldata substitutions were not always set to the correct values for the selected bar, when performing a drilldown from a bargraph whose drillDownSelectMode property was set to "Anywhere" and whose mouseOverFlag and mouseOverHighlightFlag properties were both unchecked. This is fixed.
16967: Navtree drilldown now sent to correct panel
A bug has been fixed that affected PANELS.ini files using the tree and accordion navigation controls with the rtvlayout tag. This bug sometimes caused the display selected from the tree/accordion control to be opened in the RTView panel that last received a mouse event (a popup window, for example) rather than in the main RTView panel. This bug only affected the Viewer, not the thin client.
Functions
16533: Format Table Columns function now supports date/time formatting
The Format Table Columns function has been enhanced to accept date/time patterns for formatting columns of type Date. For example consider a column 'Timestamp' with the value 'Sep 06, 2008 7:27:36 AM'. If it was formatted with 'Timestamp':'MM/dd/yyyy' the result would be '09/06 /2008'. If it was formatted with 'Timestamp':'hh:mm:ss' the result would be '07:27:36, etc. The full list of formatting codes comes from the Java documentation for the class SimpleDateFormat: Letter Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day in week Text Tuesday; Tue a Am/pm marker Text PM H Hour in day (0-23) Number 0 k Hour in day (1-24) Number 24 K Hour in am/pm (0-11) Number 0 h Hour in am/pm (1-12) Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zone -0800
16703: GroupBy funcs now allow mult group if Use Column Names" 0
The GroupBy... functions now allow "Use Column Names" to be set to zero when multiple grouping types are specified.
16860: Group by Time function no longer fails with non-english locale
All Group by Time functions will no longer fail with non-English locale settings or on machines running non-English versions of Windows.
16910: New Table Contains Values function
RTView has been enhanced with a new Table Contains Values function. This function returns a copy of the specified Table with a new boolean column containing a value of true for each row where the value in the Comparison Column is in the Comparison Table. Table - A table containing a column in which to search for values from the Comparison Table. Comparison Column Name - The name of the column in the Table in which to search for the values in the Comparison Table. Result Column Name - The name of the boolean result column to add to the Table. If no name is specified, the column will be named Result. Comparison Table - A one column table containing the values to look for in the Comparison Column of the Table.
17042: Distinct function no longer crashes if data includes nulls
In prior releases, if the table input to Distinct Values function contained null strings in the specified column, a null pointer exception was thrown. This is fixed. Now a null string is treated as an empty string.
General
16874: New java option to include timestamp in console output
RTView applications have been enhanced to include timestamps in the console and log file output. By default, all output will include timestamps. To disable timestamps, include the following jvm option in your RTV_JAVAOPTS: -Dcom.sl.rtview.logTime=false
17049: rtv_init.ksh no longer adds ":" to the beginning of PATH
Previously the rtv_init.ksh script would pre-pend an unnecessary ":" to the start of the PATH variable. This has been fixed.
Object Library
16931: labelMinTabWidth removed from obj_ind_panel indicator
In previous release, the obj_ind_panel object had the labelMinTabWidth property. This property was not used and has been removed.
Composite Object
16961: mouseOverText within composite no longer disables drilldown
In previous releases of the thin client, a click on object with mouseOverText (but no drilldown or command set) in a composite did not trigger the drilldown or command defined on the composite object itself. This is fixed.
Control Objects
16911: Double text entry control now accepts NaN
In previous releases, the double text entry control (obj_c1textedit_d) did not accept NaN. This has been fixed.
Heatmap
16760: One-node heatmap now drawn when colorValueAutoScaleMode=on
In previous release, the heatmap node would not paint if the colorAutoScaleMode was set to On and there was only one node. This has been fixed.
17024: Heatmap exception with multiple index columns fixed
In previous releases, the heatmap object would sometimes throw an exception when there were multiple indexColumnNames specified. It happened in cases where either the colorValueGroupType and sizeValueGroupType were different or when the valueQualityColumnName property was specified. This has been fixed.
Pie Charts
16965: Mouse hover on on pie chart exception corrected
In previous release, the pie would throw an exception during mouse over of a wedge if the wedge had a 0 value. This only happened if the 0 value wedge was the last one in the pie. This has been fixed.
Status History
16713: Sort Column Name feature added to Status History Object
A Sort by Column Name feature was added to the Status History Object (obj_statushistory). There are two new properties under Sort named "sortColumnName" and "sortByLabelsFlag". The new behavior is as follows: 1) sortByLabelsFlag = true : The sortColumnName property is hidden, and the bars are sorted by their labels. This is the default behavior. 2) sortByLabelsFlag = false, sortColumnName =
: The bars are sorted by the value in the column in the last (most recent) row. 3) sortByLabelsFlag = false, sortColumnName = "" : The bars are drawn in unsorted (natural) order. For (3), the unsorted order of the bars is the order in which the 1st row for each bar was encountered in the data table attached to valueHistoryTable or valueTable. Also in (3) the sortAscendingFlag property has no effect.
Trend Charts
16915: yAxisFlag now consistently makes Y axis invisible
In prior releases, yAxisFlag was ignored for some yAxisMultiRangeMode settings. Unchecking the yAxisFlag property of obj_trendgraph02 will now hide the Y axis labels and tick marks regardless of the yAxisMultiRangeMode setting.
17056: Builder freeze fixed
A bug has been fixed which caused the Builder to enter an infinite loop if an obj_trendgraph02 instance was configured so that yValueMin = 0 , yValueMax = 0, traceCount = 1, "demodata" was cleared from the trace1ValueTable property, and yAxisPosition was Inner Left or Inner Right.
Reporting
16724: Exported PDF headers/footers may now be customized and localized
Exported PDF Headers and footers can be customized by use of properties defined in the rtvreport.properties file (in the custom/rtvreport directory) Default headers and footers will be overridden if two conditions are met 1) The appropriate property is defined in the rtvreport.properties file 2) The rtvreport.properties file is on the classpath of the application exporting the PDF File The rtvreport.properties file gives details about defining property values Since "." (the current directory) is on the default classpath for RTView applications, one of the simplest means of using the rtvreport.properties file is to copy it into the directory where the application is started. (Typically, this will be where the initial .rtv files reside) If you wish to use a single rtvreport.properties file for multiple applications in different directories, then you can use the RTV_USERPATH environment variiable to definee a classpath that includes a reference to where the rtvreport.properties file resides. NOTE: The rtvreport.properties file is treated as a resource bundle, and thus follows the java convention for localizing resource bundles (rtvreport is followed by an underscore and a two-letter language code (ISO 639-2 code) that specifies the language that the resource bundle deals with. ) e.g for spanish and french create rtvreport_es.properties and rtvreport_fr.properties
16903: PDF output no longer fails for tables with filter properties
Previously, producing PDF output ( Display or Report) for a display that contains a table with filterProperties would produce an NPE ( Null pointer exception) and incomplete PDF output. This is no longer the case.
Security
16306: Enhanced isAllowed method to include user id
The following method has been added to the custom role manager class: public boolean isAllowed (String displayName, String role, String user); This method is only invoked by the display server. Subclasses can optionally override this method to return the appropriate value based on the displayName, role, and user. The default implementation of this method is simply: return isAllowed(displayName, role); The display server may call this method simultaneously on different threads. The arguments are: displayName: the name of the display the user wants to open role: the role of the user trying to open the display user: the name of the user trying to open the display Returns: true if display is allowed, else false.
Substitution
17005: Problem setting global var via setsub in composite fixed
A bug has been fixed in obj_composite which caused extra data listeners to be added if a Set Substitution function in the composite display changed the value of a global variable.
Transaction Message Monitor
17006: Transaction Monitor script error corrected
Previously the run_tm.bat script for the Transaction Monitor failed to execute. This has been fixed.
Version 5.8f1 Release Notes
Data Sources
TIBCO Rendezvous Data Source
16812: RTViewDs.HostStatusCurrent now calculating deltas
In previous releases, the idl, odl, irrs and orrs columns in the RTViewDs.HostStatusCurrent table showed current values instead of deltas. This has been fixed.
16881: New Disable Data Cache option
A Disable Data Cache option has been added to the new TIBCO Rendezvous Cache tab in the Application Options dialog. This option allows you to disable the caching of data in the TIBCO Rendezvous Data Source. When selected, the initial update on data attachments to multiple subjects (ex. orders.STATUS.*) will return a table with a row for each message, but subsequent updates include only the rows that have changed. This option is useful when using TIBCO Rendezvous data attachments as input to the Cache data source or the Historian. This flag also applies to the following RTViewDs tables: RTViewDs.HostStatusCurrent RTViewDs.HostStatusTotal It does not apply to the following tables as they store history and should not be used with the cache: RTViewDs.HostStatusHistory RTViewDs.HostStatusHistory2 It does not apply to the following tables since they are not cached regardless of the value of the Disable Data Cache: RTViewDs.MulticastPacketsDest RTViewDs.MulticastPacketsSource RTViewDs.MulticastPacketsTotal RTViewDs.MulticastSubjectsDest RTViewDs.MulticastSubjectsSource RTViewDs.MulticastSubjectsTotal RTViewDs.ConfigServices RTViewDs.ConfigClientTransports
16889: TIBRV_HOME requirement now prompts an error message
The TIBRV_HOME environment variable is required for the RTViewDs.Config* data attachments with the current version of TIBCO Rendezvous. In previous release, if this was not set, the tables failed silently. This has been fixed so that the error is reported.
16899: RTViewDs.Config* now updates multiple tables correctly
In previous releases, if you had 2 tables attached to RTViewDs.ConfigServices or RTViewDs.ConfigClientTransports for different urls, the first table would update incorrectly when the second table updated. This has been fixed.
16900: The TIBCO Rendezvous RTViewDs.Config* tables now update
The TIBCO Rendezvous RTViewDs.Config* tables now update. Previously, they were only queried once. To specify how often these tables update, specify a value in seconds in the Tibrvconfig Update Period field of the TIBCO Rendezvous Monitoring tab of the Application Options dialog. This value will be rounded to the closest multiple of the update period specified in the General tab of the Application Options dialog. For example, if the update period is 10 and the Tibrvconfig Update Period is 15, the updates will occur every 20 seconds. You can also set this value on the command line as follows: -rvds:rvconfig.period:XX Where XX if a numeric value greater than 0. The default is to update every 15 minutes.
Version 5.8e1 Release Notes
Data Sources
Cache Data Source
16929: Improved handling of old property names in cache files
The following bug existed in 5.8d. It is fixed. For task 16725, several properties of obj_cache_table were renamed. When an existing cache file containing the old property names is loaded, the old property names should be automatically converted to the new property names. This is done correctly if the property values are constants, but if the old property is attached to data, the conversion is not done and the data attachment is ignored. The property assumes the default value (typically zero or an empty string) instead. The old property names affected by this bug are as follows: maxNumberOfRows (renamed to maxNumberOfHistoryRows) timeSpan (renamed to historyTimeSpan) deleteTable (renamed to rowsToDeleteTable) indexColumnNamesForDelete (renamed to rowExpiredIndexColumns)
JMS Admin Data Source (for TIBCO EMS only)
16898: New Server URL column to Routes table
A new field called serverURL has been added to the Routes metrics table in the JMSADM data source. This field contains the URL of the EMS server which defines the route.
XML Data Source
16934: RTView DS for the XML data source
The XML data source now supports attachments to a source named RTViewDs, which provides information about the listeners currently active in the XML data source. This information can be useful when troubleshooting data server clients, because it is the XML data source that handles listeners for ALL RTView data attachments that are redirected to a data server. The RTViewDs source supports the following Data Keys: 1) listeners: This will display a table with one row for each unique data attachment to another xml source and a row for each unique data attachment that has been redirected to a data server. The "Source" column displays the name of the xml source (file) or the name of the data server. The "Local" column is checked if the source is an xml Source, it is unchecked if the source is a data server. The "Adapter" column shows the name of the data adapter, which will be "xml" for local xml attachments and "cache", "sql", etc for redirected listeners. The "Key" column displays the entire data attachment string. The "Listeners" column shows the total number of listeners for the attachment string. The "Updated" column shows the time when data was most recently applied to the listener. 2) cacheListeners: This will display a table with one row for each unique cache data attachment that has been redirected to a data server. It displays most of the same information as in the "listeners" table described above, plus additional columns for the most commonly used fields in a cache data attachment (Cache name, table name, columns, filter columns, filter values). The "Local" and "Adapter" columns are not specified since only remote listener for the cache data adapter are shown. Note that the cacheListeners table does NOT show local cache listeners, it only shows cache listeners that have been redirected to a data server. The RTViewDs source will not appear in the dropdown list of XML sources in the Attach to XML Data dialog, instead the RTViewDs name must be entered manually in the XML Source field.
Display Server
16882: Export to Excel no longer fails with japanese characters
Japanese text is now properly handled by the thin client's "Export Table to Excel" feature.
16906: RTViewDisplayServer.Attributes.DisplayData again returns data
The 5.8d display server always returned an empty table from the jmx MBean RTViewDisplayServer.Attributes.DisplayData. This is fixed.
16907: Fixed JS error in thin client if button's valueToSet changed
Previously, if the valueToSet property of a button control was changed by a data attachment, a javascript error "rtobj is null" was reported by the thin client. This has been fixed.
16923: Fixed bad drawing behavior with multiple connection threads
A display server problem has been fixed in which objects were sometimes misdrawn or missing if displays containing composite objects with bgOpaqueFlag = 0 were open, and multiple clients were connected and requesting displays simultaneously.
Functions
16928: DeltaAndRateRows function NPE fixed
In release 5.8d the function "Delta And Rate Rows" threw a NullPointerException. This is fixed.
Object Library
Fx Bar Chart
16648: drillDownSelectMode = Element Only fixed for thin client
In previous releases, setting drillDownSelectMode = Element Only had no effect on obj_fxbar or on a custom fx object that supported the drillDownSelectMode property, when the object was displayed in the thin client. The object always behaved as though drillDownSelectMode = Anywhere when displayed in the thin client. This problem has been fixed.
Tables
16926: Multiple Hide Rows action on a row no longer causes exception
Previously if the filterProperties of an obj_table02 applied the Hide Rows action more than once to the same table row, a NegativeArraySizeException may have been thrown.
Version 5.8d1 Release Notes
Builder - Property Dialogs
16838: Dialog tables for viewing current data adjusted for consistency
In the display builder, the alert, cache, function, and local variable dialogs make use of a table to display information about the current set of objects. The appearance and behavior of these tables has been improved and made consistent among the four dialogs as follows: - the Name column is set as "row header" so it is displayed with a shaded background and is not resizable. The dialog will control the width of this column so the full length of each name is visible. - The remainder of the columns will be initialized by the dialog and may be adjusted by the user without interference. They will be resized by the dialog only when the dialog itself is resized (in width). Finally, in the Caches dialog, the column "MaxRows" has been renamed to "HistoryRows" for clarity.
Data Server
16775: -logfile option incompatibility with Linux logrotate resolved
The -logfile option will now create the RTView log file in a manner that is compatible with the copytruncate directive of the Linux logrotate utility. In the previous release, the log file could not be truncated to zero bytes by that utility.
Data Sources
16804: Global var set in OPTIONS.ini no longer causes extra listeners
The following problem has been fixed: If a global var $x is defined with an initial value in a global definition file, and a value for $x is also assigned in OPTIONS.ini or on the command line, and if $x is used in a data attachment, and if the value of $x is later changed, the listener corresponding to the initial value of $x is not removed.
Cache Data Source
16725: Support eviction of rows from Current Cache
The cache data source has been enhanced as follows: - A new property named maxNumberOfCurrentRows has been added. Its value specifies the maximum number of rows to be kept in a cache's current table. The oldest rows in the current table will be removed if necessary to maintain this limit. The default value of the property is blank, indicating no limit on the number of rows. (In many cases it is not necessary to place a numerical limit on the rows in the current table, since the rows will be limited by the number of unique combinations of index column values, or rows will be removed via other properties described below. Or, in the case of a cache with no index columns, each update replaces the entire current table). A value of zero can also be used to specify no limit. The cache data source will check the maxNumberOfCurrentRows limit at approximately 10 second intervals, so the limit may be exceeded if new data is applied to the cache between those intervals. - A new property named rowExpirationMode has been added. This property gives users means for expiring rows in the current table. The possible values for rowExpirationMode are Off, Mark, and Delete. The default value is Off, indicating that row expiration is disabled. If set to Delete, expired rows are deleted from the current table. If set to Mark, an "Expired" column is added to to the current table and its value is set to true in each expired row. If rowExpirationMode is set to either Mark or Delete, the following additional properties appear in the property sheet: rowExpirationTime - If a row in the current table is not update for the time interval indicated by this property, then the row is considered to have expired. The value should either be a number indicating seconds, or a number followed by s, m, h, or d indicating seconds, minutes, hours, or days. The default value is blank, indicating no expiration time. (The cache data source will check the expiration time limit at approximately 10 second intervals, so the limit may be exceeded by up to 10 seconds). rowExpiredIndexColumns - The value of this property should be a semicolon-separated list of column names, which must be some or all of the names specified in the cache's indexColumnNamesProperty. On each update to the cache, the set of values contained in the update for the specified columns is recorded. After the update, any row in the current table that has matching values for those columns, but was not updated, is considered expired. In previous releases, this property was named indexColumnNamesForDelete. See the release note for 15490 for more information and examples. The default value is blank. rowExpiredColumnName - This appears in the property sheet only if rowExpirationMode = Mark. Its value indicates the name of the Boolean column that should be added to the cache's current table to indicate if a row is expired. The default value is "Expired". - To help clarify which properties affect the current table of a cache and which affect the history table, two new categories have been added to the Builder's property sheet for cache objects. These categories are named "Cache Current Table" and "Cache History Table". All of the new properties described above are in the Cache Current Table category. As indicated below, several existing cache properties have been moved to one of the new categories, and some have also been renamed. Category: Cache Current Table Properties: maxNumberOfCurrentRows (new) rowExpirationMode (new) rowExpirationTime (new, hidden if rowExpirationMode = Off) rowExpiredColumnName (new, hidden unless rowExpirationMode = Mark) rowExpiredIndexColumns (existing, previously named indexColumnNamesForDelete, hidden if rowExpirationMode = Off) rowsToDeleteTable (existing, previously named deleteTable) Category: Cache History Table Properties: allowDuplicatesInHistoryFlag (existing) maxNumberOfHistoryRows (existing, previously named maxNumberOfRows) historyColumnNames (existing) historyTimeSpan (existing, previously named timeSpan) initialTable (existing)
16728: New commands to load/reload/release caches
Commands to add (load) and remove (unload) a cache definition file have been added to the cache data source. The name of the cache definition file and the substitutions, if any, to be applied when loading the file are specified when the command is defined. If an Add Cache Definition File command is executed and the file has already been loaded with the same subs as specified in the command, the file will be unloaded and then loaded again. If a * (asterisk) is specified as the cache definition file for a Remove Cache Definition command, then the command will unload all cache definition files. (The substitutions specified for the command, if any, are ignored). If a * is specified as the cache definition file for an Add Cache Definition command, then the command will unload and then reload all cache definition files. (The substitutions specified for the command, if any, are ignored).
16825: Show only hist columns in Compaction GroupBy Columns dialog
When configuring a cache table, if columns have been specified in the historyColumnNames property, then only those columns will appear in the condenseRowsGroupBy dialog. Previously all column names from the valueTable attachment appeared.
JMS Data Source
16795: JMS Resources now released when connection lost
Previously, under some circumstances JMS connections would not release external resources when a connection was lost. This is now no longer the case.
JMX Data Source
16732: Optimizatings of MBeanInfoCache loading
Two new options have been added to the JMX Data Source. 1. jmx_optimize_mbics false (default) - mb info caches are updated every update cycle true - wait to update mb info caches until data objects are about to be updated 2. jmx_mbeans_change_dynamically true (default) - mb info caches are updated every update cycle false - mb info caches are NOT updated again after initial kick start. This is useful for mBeans that stay the same all the time.
16827: Allow substitutions for the JMX Poll Interval
Users my now enter a substitution for the Poll Interval in JMX data attachment dialog.
Display Server
16755: Carriage return in text area no longer causes js exception
The following problem is fixed: In the thin client, if a display has a text area control whose text string contains a carriage return (\r) character , an "unterminated string constant" javascript exception is thrown when the user drills down to the display.
16781: Concurrency issues when under load fixed
As described in the RN for 16502, the display server now processes requests from multiple clients concurrently. Under heavy load, the display server may throw null pointer or array bounds exceptions because of concurrency issues. These have been fixed.
16799: rtvdisplay servlet unresponsiveness fixed
A bug which caused the rtvdisplay servlet to be unresponsive after several clients opened pages using tab or accordion navigation controls has been fixed.
16803: Fixed deadlock on Get Data Server Connection Status function
A bug has been fixed which sometimes caused a deadlock in RTView while loading a display file containing an instance of the function "Get Data Server Connection Status".
16816: Fixed mem leak if objects in composite are attached to globals
A memory leak in the display server, which involved objects in composite displays attached to global variables or global functions, has been fixed.
Drill Down
16840: Drilldown/commands now executable from thin client tooltip
In the thin client, an object's drill down or command can now be initiated by clicking on the tooltip dot or bulls-eye. In prior releases, clicking on the tooltip dot had no effect. There are still some known issues: - In IE, if a click on the tooltip dot triggers a drilldown in another window, the pop-up browser window may open behind the main browser window. - In some cases it may be necessary to click on the dot twice to trigger the drilldown or command. Usually this happens if a display refresh occurs just before or at the same time as the click.
Functions
16727: New function Mark Time Gaps
A function named Mark Time Gaps has been added. Its description is as follows: Prepare a table to be plotted on a trend graph so that a break or a specific value will appear in the graph's trace line wherever the time gap between 2 points is longer than expected, as follows: If the time interval between any two rows in the table is greater than the expected interval, then insert 2 new rows between those rows in which the value of each column to be marked is set to NaN or other specified value. (NaN indicates "not a number". A trend graph will break a trace line when a NaN is encountered). The timestamp of the first new row is set to a value of 1 msec more than the timestamp of the last row before the graph and the timestamp of the second new row is set to a value of 1 msec less than the timestamp of the next row after the gap. It is assumed that the table is sorted by timestamp in ascending order. On the second and subsequent updates of this function, the timestamp of the first row in the table is compared to the timestamp of the last row from the previous update. The function takes these arguments: Table - The table to be checked for time gaps. The table must have a timestamp column and must be sorted by timestamp in ascending order. Name of Timestamp Column - the name of the table's timestamp column. Expected Interval - The maximum time interval than should occur between consecutive rows in the table. If this interval is exceeded, it is considered a gap. Specify the interval in seconds or specify a value followed by m, h, d, for minutes, hours, or days. Names of Columns to Mark - the names of the columns to be marked with the specified value when rows are added to mark a gap. Separate multiple column names with semicolons. If no column names are specified then all columns with floating point values will be marked. Mark Columns Width - The value to be assigned when marking columns in the rows added to mark a gap. The default is NaN, but any numeric value can be used.
16839: EnsureColumns enhanced to allow the definition of default values
In the Display Builder, the Ensure Column function has been enhanced to include a new argument, Value(s). This may be used to supply a list of values which will be used to initialize columns that have been added to the table (existing columns are not changed). The values are applied to the new columns in the order they are created and converted to the corresponding column type if possible; (otherwise the result is blank for string, 0 for integer/long, NaN for double.)
Object Library
Fx Trend Chart
16845: Trace line on fxtrend no longer wobbles if timeShift > 0
The following problem affecting obj_fxtrend has been fixed: If an obj_fxtrend has timeShift > 0 and a trace is attached to data from a data server or a data source whose timestamps are offset from the time on the local host by more than the timeShift value, then the trace line may jump back and forth horizontally when a new data table is applied to the trace. This occurs because the time axis will briefly be drawn with the newest data timestamp at the right edge, and then immediately be redrawn with the local time + timeShift at the right edge.
Version 5.8c1 Release Notes
16497: borderWidth property removed from obj_c1button
In previous releases, the button control (obj_c1button) had an extraneous property, borderWidth. This property has been removed.
Alerts
15764: New alertClearedCommand property
The discrete, limits and multi state alerts have been enhanced to support a new property, alertClearedCommand. If specified, this command is executed when an alert is cleared. This command supports all of the same alert substitutions as the alertCommand and reNotificationCommand: $alertCommandText $alertCompValue $alertCurValue $alertEmailBody $alertEmailSubject $alertID $alertIndex $alertLabel $alertName $alertSeverity $alertText $alertTime
16474: Substitutions now correct when renotify command is multiple type
In previous releases, if the reNotificationCommand was a multiple command or if no reNotificationCommand was specified and the alertCommand was a multiple command, the alert substitutions were not applied correct to the renotification command. This has been fixed.
16483: AlertCommandText no longer chokes when receiving null data
In previous releases, if a null value was found in a table attached to any of the following properties, a NullPointerException was thrown: Discrete Alert: valueHighAlertCommandText valueMediumAlertCommandText valueLowAlertCommandText Limits Alert: valueHighAlertCommandText valueHighWarningCommandText valueLowAlertCommandText valueLowWarningCommandText Multi State Alert: alertStateNAlertCommandText This has been fixed.
16486: Alert renotification now shows the current values of an alert.
The alert renotification command has been enhanced to include current values for the $alertCurValue, $alertEmailBody and $alertText properties. In previous releases, this has been the value that triggered the alert, but it has now been enhanced to show the current value.
16578: Alerting Engine enabled status now available for use in displays
The enabled status of the alerting engine is now available for use in displays. The AlertingEnabled status is exposed as an Alert Data Source data attachment with the Alert Variable (table) name AlertingEnabled. This is a table of one row, with one column of Type Boolean. The column name is AlertingEnabled.
16637: Optimize alert performance
The performance of the alert data source has been improved. Both the processing and the listener updates have been optimized to increase performance.
Builder
16321: TIBCO EMS 5.x jars now found
RTView has been updated to find TIBCO EMS jars in either TIBJMS_ROOT/lib, or in TIBJMS_ROOT/clients/java.
Commands
16318: Command parameters now support function and DS attachments
Several fields in the drill down dialog and command dialogs have been enhanced to support data attachments. To attach a field to data, right-click and choose Attach to Data or double-click on the field. The popup menu also supports Copy, Paste, Detach from Data and Display Data which behave the same way the corresponding popup menu options do in the Object Property Dialog. All command properties support data attachments except for Heartbeat Commands. The following fields have been enhanced to support the new popup menu: Drill Down Target Dialog: - Drill Down Display Name - Window Title - The Value column in the Drill Down Substitutions table System Command Dialog: - All fields in the main dialog except the Command Type field and the Browser Window field. - In the Drill Down Target sub dialog: Drill Down Display Name, Window Title and the Value column the in Drill Down Substitutions table - In the SNMP sub-dialog: Destination Address, Destination Port and Community Name SQL Command Dialog: - Database Name - SQL Command JMX Command Dialog: - The method argument fields Alert Command Dialog: - All fields except Command and Data Server JMS Command Dialog: - Destination Type - Message Type - Topic Name - The Value column in the Fields & Properties table TIBCO Rendezvous Command Dialog: - Message Subject - The Value column in the Fields table TIBCO Hawk Command Dialog: - The method argument fields
16583: Custom SMTP port can now be specified for system email commands
It is now possible to define a custom SMTP Port for sending email via a System Command.
Customization
15780: Access provided to custom GmsRtViewDsAdapter from GmsRtViewDs
The com.sl.gmsjrtviewds.GmsRtViewDs class now includes a field, "dsAdapter", to access the GmsRtViewDsAdapter for the custom data source.
Data Historian
15789: Column now compacted using "count" when it is the only column
Previously, if a column was being compacted using the "count" groupByTime, and it was the only column of data being compacted, the SQL statement would insert the compacted data incorrectly. The word "Count" was substituted for the column name of the compacted column. This has been fixed.
16427: Historian now correctly resigns in redundant server group
A bug has been fixed which under certain conditions allowed more than one Historian to be the primary server in a redundant server group.
16449: Errors with column names and table creation fixed
The quoteColumnNames property on a Historian table was being ignored when: * quoteColumnNames is true * Compaction Rules have been specified that involve Multiple Output Tables * the default level of database table reset is used. i.e. no -rebuildtables and no -noreset arguments, which implies resetting and purging the tables on every use.
16616: "store last value" now stores table rows from all attachments
The historian's "Store Last Value Only" feature has been improved to store the last set of rows applied to each object that specifies a given database table name in its historyTableName property. This is useful in a historian configuration where multiple objects specify the same database table name. Previously only the rows for the last object to be updated were stored.
Compaction
16415: New data now collected when smoothing process is active
New data is now stored while the smoothing process is active.
16595: Historian Displacement support improved
The Historian displacement feature is now supported for DB2, MySQL, and Sybase.
Data Server
16219: New rtvquery web app rtvquery added
A new web app named rtvquery has been added to RTView. The rtvquery servlet allows custom client applications to retrieve data tables from the RTView Data Server via a REST interface. The client sends an http GET to the servlet specifying the query parameters and the servlet returns the query result in XML, JSON, or plain text format. For a complete description of the features and use of the rtvquery servlet, see the README.txt file in the servlets/rtvquery subdirectory of RTView installation directory. Also, several examples of client apps can be found the subdirectory custom/rtvquery-samples. See the README.txt file in that directory for details.
16451: Verbose mode syntax corrected
The Data Server -verbose option was corrected to output "push N bytes to client" rather than "push N xml chars to client", since the Data Server sends data to client as binary data not xml text. Note that the byte count is an approximation and should only be used for comparing the relative sizes of data sets pushed by the Data Server.
16519: Empty string for Data Server field in command correctly handled
In prior releases, if a substitution was entered in the Data Server field of a data source command the the substitution's value was an empty string, and if a default data server was in use when the command was executed, an error dialog with the message "Unable to execute command" would appear. This has been fixed so that an empty string in the Data Server field will be treated the same as
. That is, the command will be executed on the default data server, if any. If there is no default data server then the command should be executed locally. This is consistent when an empty string is specified for the Data Server field in a data attachment.
Data Sources
Cache Data Source
16425: Cache persistence bug for certain databases fixed
In 5.7, the cache persistence feature did not work if a mixed-case or lower-case table name was specified for the cache's currentTableName or historyTableName property and a case-sensitive database, such as hsqldb, was used. This is fixed.
16457: Additional metadata available in RTViewDs cache tables.
The cache named RTViewDs cache contains tables with information about each table maintained by the cache data source. In this release, the RTViewDs table named Tables has been enhanced to include a column named "%Full" and a new table with cache configuration information, named CacheDefs, has been added. 1. %Full column: RTViewDs.Tables contains runtime information about the size of each cache table. In this release, a new column named "%Full" has been added to the table. For history tables, this column shows the table's actual row count divided by its maxNumberOfRows limit or (if the cache's timeSpan limit is nonzero) the table's actual time span divided by its timeSpan limit, whichever is larger. The value is converted to a percentage between 0 and 100. Note that if the history table's size is limited by the timeSpan property, the %Full value may never quite reach 100%, because the actual time span of the rows remaining in the table after old rows are removed may be somewhat less than timeSpan. For non-history (current) tables, the value of the %Full column is always NaN, since RTView does not impose a size limit on those tables. 2. RTViewDs.cacheDefs table: This new table contains the following columns, with one row for each table defined by the cache data source: Tag - cache name + "." + table name Cache - cache name Table - table name AllColumns - all column names IndexColumns - index column names DataColumns - non-index column names TimestampColumn - timestamp column name AllColumnTypes - data types for all columns ("string","int","double","date",etc) MaxRows - value of maxNumberOfRows property (history table only) TimeSpan - value of timeSpan property (history table only) Description - value of description property File - name of rtv file from which cache definition object was loaded
16459: Exception in cache page filtering fixed
The following problem affecting the advanced filter option in a cache data source attachment has been fixed: If an attachment was made to the current table of a cache and the value of Rows Per Page was greater than zero and the value of Page Number times Rows per Page was greater than the total number of rows in the cache's current table, then an ArrayIndexOutOfBoundsException was thrown.
16512: Filter on non-index column of current cache now allows updates
The following problem with the cache data source has been fixed: If a cache has one or more index columns and an attachment is made to the current table of that cache, and the attachment specifies a filter column which is not also an index column, then the attachment will always behave as though the "Update Once" option is checked, even if it is not. That is, the current table will be applied to attachment once when the display is opened, but any subsequent updates to the current table are ignored.
16517: Allow Time Ranged Cache queries to access historical database
The cache data source has been enhanced to use SQL to extend the time range of a cache's history table. Background (cache history features supported in this release and prior releases): A cache's history table is kept in memory. The size and time range of the data in the history table is determined by the cache's maxNumberOfRows property and (optionally) its timeSpan property. The cache persistence feature (15215, introduced in RTView 5.3) allows a cache definition file to be used as a data configuration file for the Historian, so that the cache history data is stored in a database table. The database and table names are specified by the cache object. When the cache data source is initialized, it will preload the history table's of all cache's that use the cache persistence feature, by making appropriate SQL queries. However, the number of rows that will be loaded from the database into the cache's in-memory history table is limited by the cache's maxNumberOfRows and (if specified) its timeSpan property values. When making a data attachment to a cache's history table, the Advanced Filter options in the attachment dialog can be used to specify the time period of interest, using the Time Range, Begin Time, and End Time fields. Enhancement (cache history feature added in this release): Beginning with this release, a cache can be configured so that an SQL query will be used to retrieve data from an external database if the time period specified in a data attachment extends beyond the range available in the cache's in-memory history table. This feature provides a convenient way to retrieve cache data that was stored in a database by the RTView Historian and use it on displays. To use this feature for a cache named "C1" : - C1 must have a database table name assigned to its historyTableName property - C1 must have maxNumberOfRows > 0 - The rtv file that defines C1 must be loaded by the RTView Historian as a Data Configuration file (so that the Historian will store the cache data in the database table specified by C1's historyTableName property) - There must be an SQL database connection defined for the database specified in C1's databaseName property or, if C1's databaseName property is blank, there must be an database connection to the default RTVHISTORY database. When making a data attachment to C1's history table, the user can select "Filter Rows = Advanced" and specify the time period of interest, and check the new "Extend with SQL" option. If the time period extends beyond the oldest row of data in the cache's history table, an SQL query will be performed to fetch the data for the missing time period. The database specified by cache C1's databaseName property will be used for the query, or if databaseName is blank then the default "RTVHISTORY" is used. The table name used in the query is the value specified by C1's historyTableName property. The "Extend with SQL" checkbox will be enabled only if either the "Time Range" or the "Begin Time" fields are non-blank, and the selected table name in the Table dropdown list is not "current". See the release note for task 15936 for a description of the usage of these fields. Note that a substitution string (e.g. $beginTime) can be entered for any of these fields. If the value in the "Maximum Rows" field (labeled "Rows per Page" in previous releases) is nonzero, then it will be used to limit the row size of any SQL query that is performed to satisfy the time period in the attachment. When "Extend with SQL" is selected, a default value of 1000 is automatically entered but can be changed by the user. A value of zero or blank means no limit.
16518: Compaction mechanism implemented for cache data source
A data compaction feature has been added to the Cache Data Source. This feature condenses the history table of a cache by periodically applying a calculation (average,min, max,etc) to each column and storing a single result row in another cache table. This new feature complements the Historian's data compaction feature, available in prior releases, which can be configured to compact rows in databases tables as the data "ages". To distinguish between these features, the Historian feature is referred to as "secondary compaction" since it operates on database tables, and the new cache data source feature is referred to as "primary compaction" since it operates on in-memory cache tables. When a tabular cache object is selected in the Builder, the property sheet will show a category named "Data Compaction : Primary (in-memory)". Initially this category contains a single property named condenseRowsFlag, which is unchecked by default. If the condenseRowsFlag property is checked, the primary compaction feature is enabled for the cache and the cache will maintain four data tables, instead of just "current" and "history". The tables are as follows: 1. current: stores the most recent row of raw data for each unique index column value combination 2. history: stores raw data history, for the time span specified by the cache's condenseRowsRawDataTimeSpan property (see below). 3. current_condensed: stores the most recent row of condensed data for each unique index column value combination. 4. history_condensed: stores condensed data history, limited by the cache's timeSpan and/or maxNumberOfRows properties. In addition, if the condenseRowsCombineHistoryFlag property is checked (see below) a fifth table will be maintained by the cache: 5. history_combo: stores rows of recent raw data followed by rows of older condensed data. The raw data rows extend from the current time back for the number of seconds specified by the condenseRowsRawDataTimeSpan property. The condensed rows are limited by the timeSpan and/or maxNumberOfRows properties. When condenseRowsFlag is checked, the following additional properties will appear in the property sheet. condenseRowsInterval : The time interval at which the cache history should be condensed. Enter a value in the format NNu where NN is a number and u is a single character s,m,h,d,w for seconds, minutes, hours, days, or weeks, indicating the time unit. If only a number is entered, it is assumed to be seconds. condenseRowsGroupBy: A string that specifies the calculation to be performed on each data column in the cache table. The format of the string is name1:calc1;name2;calc2... where nameN is the name of data column N and calcN is the calculation to be performed on the values in the column for each time interval. The supported calculations are average, min, max, and sum. The value for this property is configured from a dialog which allows the user to pick a column name and then pick the calculation for that column. If a calculation is not specified for a data column, then "sum" is used. Calculations are not applied to the data table's index columns or to the timestamp column. condenseRowsRawDataTimeSpan : The time span of raw data kept in the cache's history table and, if enabled, its history_combo table. condenseRowsCombineHistoryFlag: If checked, the cache will keep the history_combo table as described above. The condenseRowsFlag also affects the RTView behavior when persisting a cache to or restoring it from a database. If condenseRowsFlag is checked on cache C1 then: 1) if the cache def file is used as an historian config file, the historian will store only the condensed rows for C1, in the database table specified by C1's historyTableName property 2) when the cache def file is loaded by an RTView app (other than the historian) the database table specified by C1's historyTableName is queried to get the initial rows for C1.history_condensed and, if enabled, C1.history_combo. This is useful in cases where the historian should only store data that has already undergone primary compaction, rather than storing raw data which arrives in high volumes.
16620: New historyColumnNames property for obj_cache_table
By default, the current table and the history table of a cache store the same columns. In many cases this is desirable. But data sources may supply data tables containing columns whose values are static (e.g units, version number, description, etc).While it can be useful to store these values in the cache's current table, they will take up memory and database space when storing repeatedly in the history tables at each update. To address this issue, a property named historyColumnNames has been added to the cache table object. The property can be used to specify a semicolon-separated list of the names of the columns which should be stored in the cache history. The default value is blank which indicates that all columns from the current table should also be stored in the history table. The columns specified by historyColumnNames must be a subset of the columns in the cache's current table. If a column specified in historyColumnNames does not appear in the current table, it will be ignored. If a column is not specified in historyColumnNames but the column is specified in either indexColumnNames or timestampColumnName, the column will still be included in the history table. This is because the index columns and the timestamp column are needed for use and maintenance of the history table. The order in which the column names are specified in historyColumnNames does not affect the order in which they will appear in the history table, they will appear in the same order as they do in the current table. Changing the names specified in historyColumnNames could lead to incompatibility with data previously stored by the historian. Note that this is also an issue with changes made to the cache's schemaTable or the cache's valueTable attachment.
16653: Cache data dialog no longer replaces sub in Table field
A problem has been fixed in the Attach to Cache Data dialog that caused the Table field to show the value with substitutions applied, rather than the user-entered value.
16654: Cache Attach to data Dialog discovers caches on data servers
If the Builder is connected to a data server, it will retrieve the names of the caches deployed on the default or named data servers. These names will populate the Cache, Table, and Columns drop down lists and will be available for selection in the Attach to Cache Data dialog. The names shown in the dropdown lists are determine by the value selected in the Data Server field of the dialog, as follows: If Data Server = <default> then the names of the caches deployed on the default data server are shown. If the Builder is not connected to a default data server, the names of the caches loaded locally by the cache data source are shown. If Data Server = <none> then the names of the caches loaded locally by the cache data source are shown. Any other value for Data Server is assumed to be the name of a Named Data Server, and the names the caches deployed on that data server are shown. If the Builder requests the cache names from a data server and gets no response within 10 seconds, the dropdown lists will be empty. This enhancement does not affect the cache names shown in the Caches window that is opened from the Builder's Tools menu. That window only displays caches that are loaded locally by the cache data source.
16657: Empty Filter Value for cache attachment again returns no rows
If a cache data attachment specifies a valid Filter Column and the Filter Value specifies a substitution whose value is an empty string, the attachment will return a table with no rows. That was the behavior prior to release 5.6. In 5.6 and 5.7, all rows were returned as though the data attachment specified no filter, which was incorrect.
IBM WebSphere MQ Administration Data Source
16560: Option to allow user to specify PCF request wait interval
A new command line argument to specify the PCF request wait interval has been added. The syntax of the command is: -mqwaitinterval:
: e.g -mqwaitinterval:sltest:100 The additional argument -mqdstrace can be used to provide information about the PCF request elapsed time. -mqdstrace:3 will return elapsed time -mqdstrace:5 will provide elapsed time and additional information about the content of the PCF request
16564: Added Capability to specify model queue name for connection
A new command line argument, -mqmodelqueuename, has been added. This argument is used to specify a named model queue for a named connection. It sets the name of the model queue used by the agent to create its reply queue, which is a temporary dynamic queue. The syntax of the command is: -mqmodelqueuename:
: e.g. -mqmodelqueuename:myConn:MY.MODEL.QUEUE.NAME The additional argument -mqdstrace can be used to provide confirmation about the value specified on the command line e.g. ibmadm: Model Queue Name for connection: myConn : specified as : MY.MODEL.QUEUE.NAME -mqdstrace:3 will show the use of the value when a connection is established e.g. ibmadm: ... Setting model queue name specified for MQ connection: myConn : to : MY.MODEL.QUEUE.NAME
JMS Data Source
16577: Custom jms handler added for BytesMessages and ObjectMessages
The JMS data source has been enhanced to support a custom JMS handler to parse BytesMessage and ObjectMessage content. To get the content from a BytesMessage or ObjectMessage, create a subclass of com.sl.gmsjjmsds.GmsJRtViewCustomJmsHandler and add it to RTV_USERPATH. By default, RTView looks for a class named MyJmsHandler. To specify an alternate name, use the -jms_customhandlername:className command line option. Include gmsjrtview.jar and gmsjjmsds.jar (in the lib directory of your RTView installation) and the jms.jar from your JMS vendor in the classpath when building this subclass. The GmsJRtViewCustomCommandHandler has 3 methods you may override in your subclass: public void initialize() - This method is called once after the class is instanced in case the subclass needs to perform some initialization. public String getBytesMessageStringContent (BytesMessage bytesMsg) - This method is called every time a BytesMessage is received. Subclasses should override this method to return a String representation of the byte[] from the message body. public GmsTabularData getObjectMessageTableContent (ObjectMessage objectMsg) - This method is called every time an ObjectMessage is received. Subclasses should override this method to return a GmsTabularData representation of the Object in the message body. For example: import com.sl.gmsjjmsds.*; import javax.jms.*; import javax.jms.*; import com.sl.gmsjrt.*; public class MyJmsHandler extends GmsRtViewCustomJmsHandler { public void initialize () { } public String getBytesMessageStringContent (BytesMessage bytesMsg) { try { byte[] bytes = new byte[(int)bytesMsg.getBodyLength()]; bytesMsg.readBytes(bytes); return new String(bytes); } catch (Exception e) { System.out.println("ERROR: Can't parse BytesMessage < " + bytesMsg + ">. Caught exception: " + e); } return null; } public GmsTabularData getObjectMessageTableContent (ObjectMessage objMsg) { try { Object obj = objMsg.getObject(); if (obj == null) return null; if (obj instanceof Vector) return processVector((Vector)obj); else return processString(String.valueOf(obj)); } catch (Exception e) { System.out.println("ERROR: Can't parse Object < " + objMsg + ">. Caught exception: " + e); } return null; } private GmsTabularData processVector (Vector<String[]> v) { GmsTabularData data = new GmsTabularData(); data.addColumn("Plant", GmsTabularData.STRING); data.addColumn("Status", GmsTabularData.STRING); data.addColumn("Units Completed", GmsTabularData.STRING); String[] plants = v.elementAt(0); String[] statuses = v.elementAt(1); String[] units = v.elementAt(2); if (plants == null || statuses == null || units == null) return data; for (int i = 0; i < plants.length; i++) { data.addRow(""); data.setCellValue(plants[i], i, 0); data.setCellValue(statuses[i], i, 1); data.setCellValue(units[i], i, 2); } return data; } private GmsTabularData processString (String s) { if (s == null) s = ""; GmsTabularData data = new GmsTabularData(); data.addColumn("Value", GmsTabularData.STRING); data.addRow(""); data.setCellValue(s, 0, 0); return data; } } XML data embedded in both BytesMessage content and ObjectMessage content can be used to define a JMS alias. To show all xml content of a bytes message add the following to your JMSALIAS.ini file: OrderInfo myConnection orders.STATUS.* $xml:<TEXT> To show the data from a specific xml tag in the bytes message content, add something like the following: $xml:<TEXT>::Orders::Order Where Orders::Order specifies the path to the xml element to display. Since the ObjectMessage callback returns a GmsTabularData, use the column name of the field containing the xml data: OrderInfo myConnection orders.STATUS.* Production::$xml:OrderData Where OrderData is the name of the column containing the xml data. Note that only the value from the cell in the first row is used. To show the data from a specific xml tag of an ObjectMessage table, add something like the following: CustomerInfo myConnection orders.STATUS.* $xml:OrderData::Orders::Order::Customer Where Orders::Order::Customer defines the path to the xml element to display.
JMX Data Source
16274: String arrays nested within TabularData now handled in JMX DS
String arrays nested within TabularData are now handled in JMX Data Source.
16441: Connection information now always available
All JMX Connection types, including single connection, * connection and connections groups now show the Connection attribute by default. The command line argument to turn off surfacing the Connection argument for non-multiple connections is -jmxdsShowConnectionOnlyOnMultiples and the JMXOptions.ini file keyword is jmxdsShowConnectionOnlyOnMultiples true"
16455: Support Commands with JMX Connection Groups
Support has been added for commands to work with defined JMX Connection Groups.
16624: JMX arguments now visible for two mBeans with same method name
If same method existed in two JMX mBeans, the second one did not show the argument in the RTView JMX Command dialog.
16625: A key and attribute of the same name no longer causes blank rows
The following problem has been fixed: If a JMX mBean delivers both an Attribute and a Key Property with identical names, the data returned would show two rows for each bean instead of one. Additionally, the Attribute column would be missing. Now the Attribute column is shown with a "2" or a "_2" appended to ensure uniqueness. This code uses the RTView JMX DS convention that a Column name collision and use of one of the two colliding columns in column zero will force the column zero use to be assumed to be the Attribute and renamed.
16659: Host var no longer NULL when JMX connection is using a url
The Host and Port values in the RTViewDs:type=Connection mBean could be Null if the URL method of connection was used. This could cause Exceptions to be thrown in the Console under certain circumstances.
SQL Data Source
16317: Attach To SQL Data's Query interval now allows variables
A substitution string can now be entered in the Query Interval field of the Attach to SQL Data dialog. Previously only a numeric value was permitted.
16531: Cancel SQL query when last listener removed
The SQL data source has been enhanced to abort a query if it is still executing when the last data attachment to the query is removed, to improve overall performance. In prior releases, the query was allowed to complete even though the query result was then discarded.
StreamBase Data Source
15887: Corrected problems with stream filter interface.
In the Display Builder Application Options for StreamBase, if you create a physical stream with no logical stream, the SBOPTIONS.ini file was written incorrectly, using the keyword "stream" instead of the correct keyword "sbstream". This could also happen if you had read in and were converting an options file from previous releases containing the keyword "streams", which would result in an options file containing one or more instances of the incorrect keyword "stream". This has been fixed.
TIBCO Hawk Data Source
16329: Loading order of TIBCO jars changed
The library tibrvj.jar is now added to the classpath after tibrvjms.jar, to avoid Hawk Agent errors.
Display Server
14651: Pagination supported added to tables in the Display Server.
A new Display Server option improves the performance of displays containing table objects (obj_table02) with many rows. The option enables server-side table paging and sorting mode, or "paging mode" for short. In paging mode, the display server sends only a portion (a "page") of the the table's data rows to the thin client, rather than sending all of the rows at once. This avoids the sluggish performance, timeouts, and out-of-memory exceptions that might otherwise occur from processing and transmitting all of the rows at once. The page of rows sent from the display server to the thin client will include all of the rows currently visible in the thin client plus additional rows above and/or below the visible rows. If the user scrolls beyond the rows contained in the current page or clicks on a column header to change the sorting order, the display server will send another page of rows in response. The new option can be specified on the command line as follows: > run_displayserver -cellsperpage:NNNN or in the DISPLAYSERVER.ini file as follows: cellsperpage NNNN where NNNN specifies the number of table cells that the server should include per page. The number of cells in a table is the number of rows times the number of columns. For example, say cellsperpage = 10000 and a display named D1 contains a table T1 with 5 columns. The display server will use a page size of 2000 rows for table T1. This means that the display server will send at most 2000 rows to the thin client at a time, for table T1. If T1 contains, say, 40,000 rows then when a user opens D1 in the thin client the display server will send rows 1 through 2000 to the thin client. If the user then scrolls to the bottom of the table, the server will send rows 38,001 through 40,000 to the thin client in response. Similarly, if the user clicks on a column header to sort by that column, the display server will sort the table and send the first 2000 sorted rows to the thin client. After the user scrolls or sorts a table in paging mode, the thin client will display '...' in each cell and an hourglass cursor will appear over the table while it waits to receive the new page from the server. A smaller value for cellsperpage reduces the memory requirements for processing large tables in the Display Server, App Server, and browser. A larger value makes for smoother scrolling in the thin client because it increases the number of rows through which the thin client can scroll before it needs to request another page from the server. Typical values for cellsperpage are 10000 to 30000. If the cellsperpage option is not specified or if a value < 1000 is specified then paging mode is disabled and the display server will always send all data rows to thin client for all tables regardless of the table size (as in all prior releases). Also, if a table contains fewer cells than the cellsperpage setting, the display server will send all rows for that table. Notes: - Paging mode only affects the behavior of obj_table02 objects, and only in the thin client. - The maxNumberOfRows property on obj_table02 is still used to limit the maximum number of rows that will be shown in the table, regardless of the cellsperpage setting. Know Issues / Limitations: - After scrolling to a new page, if the user immediately drags the scrollbar again, the table may not react. The user may need to nudge the scrollbar knob or click on the scroll up/down arrows to force the table to react. - The "Export Table to Excel/HTML/PDF" feature of the thin client is not affected by paging mode, so attempts to export a table with many rows may result in timeouts or out-of-memory exceptions in the display server or in the rtvdisplay servlet. To avoid those errors, see the description of the Display Server options "cellsperexport" and "cellsperreport" in the release note for 16438. - When displaying a table with more than 75,000 rows in Internet Explorer version 8, the last row in the table may partially obscured even if the scrollbar knob is dragged to the bottom position. The last row can be made visible by using the mouse wheel but that may cause unused space to appear at the bottom of the table. - After the user clicks a column to sort a table, the table's vertical scrollbar is reset to the top position. - The thin client ignores the scrollToSelectionFlag property on a table that is in paging mode. - A table's row selection is cleared when a different page of rows is received from the display server. So if a table is in paging mode, then only rows that are on the current page can be selected, even if the table's multiSelectFlag property is checked.
16391: Displayserver now recognizes users/roles files in OPTIONS.ini
In prior releases, the Display Server did not recognize the users or roles path in OPTIONS.ini. This is fixed.
16438: Display server option to limit data export
The Display Server supports to new options, -cellsperexport and -cellsperreport. These options can be used to limit number of table cells included in HTML/Excel exports and PDF exports, respectively, requested by the thin client, to avoid memory exceptions and timeouts when exporting tables with many rows. These new options would typically be used in conjunction with the -cellsperpage option described in the RN for 14651. An export to PDF is more CPU and memory intensive than an export to Html/Excel, so typically the value of the cellsperreport option would be smaller than cellsperexport. For example, if an export to HTML/Excel was performed on a table had 5 columns and 100,000 rows, and the option -cellsperexport:30000 was specified when the Display Server was launched, then 6000 rows (30000/5) would be included in an exported HTML/Excel file for that table. If the -cellsperreport:5000 option was specified, then an export to PDF would include 1000 rows from the table. Note that the exported HTML/excel table will start with the same first row (give or take a row) that is visible in the thin client. That is, if you scroll to row 900 in the thin client and then do an HTML/excel export, the exported table should start at about line 900. However, in an exported PDF file, the scroll position of the thin client has no effect on the starting row in the PDF. If the cellsperexport option is not specified or if a value < 1000 is specified then the display server will always attempt to export all rows for all tables regardless of the table size (as in all prior releases). Also, if a table contains fewer cells than the cellsperexport setting, the display server will export all rows for that table. If the cellsperreport option is not specified or if a value < 1000 is specified then the display server will always attempt to include all rows for all tables in a PDF report regardless of the table size. Also, if a table contains fewer cells than the cellsperreport setting, the display server will include all rows for that table in a PDF report. If the rows included in an export to Html/Excel are limited by the cellsperexport option, then the first row in the exported file will be the same as the first row currently visible in the thin client. In an exported PDF file, however, the scroll position in the thin client has no effect on the rows that are included in the PDF report. The options can be specified on the command line or in DISPLAYSERVER.ini. For example, on the command line: > run_displayserver -cellsperpage:10000 -cellsperexport:30000 -cellsperreport:5000 The equivalent in DISPLAYSERVER.ini: cellsperpage 10000 cellsperexport 30000 cellsperreport 5000 Note that none of these options are recognized by the Builder or Viewer.
16502: Provide Multiple Connection Threads for Display Server
To improve response times on multi-CPU systems, the rtvdisplay servlet has been enhanced to use a pool of connections to the Display Server. By default, the servlet will open up to 10 simultaneous connections to the Display Server, allowing it to process up to 10 display requests simultaneously. The connection pool size is determined by the following entry in rtvdisplay.properties: DisplayServerConnectionPool=10
16525: Corrected memory leak with non-flex graph mouseover
A display server memory leak has been fixed. The leak was triggered by non-flex objects with mouseover enabled, and affected releases 5.6c1 and 5.7c1 only.
16528: Row header now always resizes correctly in thin client
A problem in the thin client which sometimes caused the row header column in a table to have the wrong width has been fixed.
16570: rtvuser change no longer delayed in thin client
In a thin client URL the rtvuser and rtvpass parameters or the rtvsign parameter can be used to specify the username and password, to bypass the interactive login prompt. In this release a problem has been fixed which delayed the effect of a change to these parameters until the first refresh of the thin client. Until the first refresh, user-specific substitutions either had no value or, if another user was previously logged in from the same browser session, remained set to the values for the previous user.
16614: Newline in control's mouseover text no longer causes js error
In previous releases, if the value of a control object's mouseOverText property contained a newline the thin client would throw an "unterminated string constant" javascript exception when the display was refreshed. This is fixed. Even with this fix, only Internet Explorer will display multiple lines of text for the mouseover on a control object. In all other browsers, the mouseover text for a control object is always shown as a single line.
16702: Setting global var to value of a sub/var on dd now works
The following problem which affected the Display Server in prior releases has been fixed: A drilldown substitution configured to set $var = $sub, where $var is a global variable, would set $var = "$sub" rather than $var = value of $sub, in the case where $var was a global variable.
Functions
16393: Selector list returns "All" option if Selector Table is empty
In the Display Builder, the Create Selector List function would return a null table if the Selector Table had no rows. It will now return a single row consisting of the All Selector Name.
16440: Join function now correctly copies NaN values
In the Display Builder, the Join and Join Outer functions, when encountering a NaN value in a Float or Double, would substitute zero. The NaN value will now be copied into the output table by these functions.
16628: GroupBy now allows "count" in conjunction with other types
The GroupBy functions have been enhanced so that a "count" type encountered within a set of multiple types will force the returned column to be of integer type so it works properly.
16629: New "Delta And Rate Rows" function
In the Display Builder a new function Delta And Rate Rows has been added. This is an extension of the Delta Rows function that returns a rate of change as well as a delta values column for each selected data column. The function help text follows. The Delta And Rate Rows function returns a table including, for the specified columns, new values for the difference between this update and the previous, along with the rate of change per second. The new values may be appended to the input table in columns named by prefixing "Delta" and "Rate" to the column name, or the delta columns may replace the corresponding input columns (the rate columns will still be appended to the table). Table - The table of interest. Delta Column Names - The names of one or more columns for which deltas will be calculated. At least one name must be given. Index Column Names - The names of one or more columns that uniquely identify a row in the table. If left blank, the default is to calculate deltas for all rows as if they had the same value. The values contained in each index column are concatenated to form a unique index used to organize the resulting summary data. Time Column Name - The name of a timestamp column that will be used to calculate the rate of change. A name must be given. If the specified column is not found in the data it will be added, and its values will be taken from the current time on each update. Replace Data With Deltas - If set to 1, the delta values replace the original values in the same column in the returned table; otherwise they are in new columns appended to the table. Display Negative values - If set to 1, the delta values less than zero will be displayed with a negative sign and the value; otherwise they will be displayed as zero.
16661: Split Columns function now returns no row if blank input string
In the Display Builder the Split function, if given a blank string, would return a table with one (blank) row. It will now return a table with no rows.
16662: Validate Substitution function enhanced
In the Display Builder the Validate Substitution function has been enhanced as follows: The following new arguments may be specified: Clear If Invalid: If set to 1 this will cause the function to return an empty string if the substitution is not found in the table. Allow Multiple Values: If set to 1 this will allow the substitution to be a semicolon separated string of values; each value will be tested for validity and the final result will be assembled from all the valid values (if any).
16664: Rename Columns now permits more renames than input columns
In the Rename Columns function, the number of specified rename columns had to exactly match the number of new names. Sometimes the number of input columns is unknown and yet you want to specify N new names, egardless how many are specified. This function has been changed so it gives an error only if the number of entered columns is greater than the number of new names specified.
16665: New "Ensure Columns" function
A new function has been added that can be used to ensure that columns of a certain type exist prior to passing data to subsequent functions for further processing. The function accepts an input Table, and a list of column names and types. The specified columns are guaranteed to exist in the order and with the types specified.
16691: New "EnsureTimestampColumn" function
The new function Ensure Timestamp Column has been added to the Display Builder. The function's help text follows: The Ensure Timestamp Column function guarantees the given table will include a timestamp column of the given name. If the column is found it just returns the table; otherwise it returns a copy of the given table with the specified added and filled with the current time. Table - The table of interest. Time Column Name - The name of the timestamp column that will be ensured. Append Column - If set to 1 the timestamp column will be appended to the end of the table; else it will be inserted as the first column.
General
16381: Preceding and succeeding spaces now work in Combo/List Boxes
In previous releases, the listValues property in the List Box and Combo Box controls did not parse leading and following spaces correctly. This has been fixed. To specify a space or an empty item as the first item in the list, use single quotes: '';item2;item3 - adds an empty item to the beginning of the list ' ';item2;item3 - adds a space to the beginning of the list To include a space preceding the first element or following the last element, also use single quotes: ' item1';item2;'item3 '
16407: run_exchange_simulator.bat fixed
In the previous version the run_exchange_simulator.bat script was broken. This has been fixed.
16409: run_tibjmsadmin.bat fixed
In previous versions the run_tibjmsadmin.bat script was broken. This has been fixed.
16410: Option -jmxdsCheckValidAttributeNames
The command line option "-jmxdsCheckValidAttributeNames" and the JMXOPTIONS.ini property "jmxdsCheckValidAttributeNames true/false" is now accepted and preserved. Setting this option to true ensures that only column names that the MBean recognizes are used.
16447: NPE when switching displays fixed
In version 5.7c1, the mouseOverText feature threw an occasional null pointer exception when switching displays. This has been fixed.
16478: New -bg and -logfile options to support redirection of output
Three new command-line options are supported by all RTView applications: #1) -bg Run the RTView application as a background process. When this option is specified, the GmsLauncher process and run scripts will exit immediately after the RTView app is started, rather than continuing to run. This reduces the host system's process count, but note that : (a) the RTView application's output and error messages will not appear in the command/shell window from which it was launched. (b) Ctrl-c cannot be used to terminate the application #2) -logfile:
Redirect output and error messages to . The RTView application's output and error message streams will be redirected to the indicated file. The file is created if it doesn't exist, otherwise its previous contents are cleared. #3) c: Prepend to the filename specified by the -logfile option. If the -logfile option is not specified, then this option is ignored. ----- Example: > run_dataserver -socket -bg -logfile:DataServer.log ----- Note that all of these options are only recognized on the command line. They are not read from, or saved to, any RTView options files.
16491: New -processName command arg
A new command line option, -processName:, has been added to the Display Builder, Display Viewer, Historian, Data Server and Display Server. For example, run_displayserver -processName:XX This adds the following jvm option to the java call: -DPROCESS_NAME=XX Where XX is the value you specified for the -processName: argument. This is useful for identifying applications running as background processes on Unix. If no process name is specified, the application name will be used as the process name. Values with spaces cannot be used for the process name on Unix.
16551: New command line encoder utility
A new utility, encode_string, has been added to RTView. This is useful in cases where it is necessary to hand edit configuration files that include encoded strings such as passwords. If you need to hand edit a configuration file, contact Technical Support for information on supported syntax. To run encode_string, enter the following on the command line: encode_string type stringToEncode The type argument is optional. This only needs to be used if you are encoding a string for a data source and should be the key for that data source. For example encode_string sql MyPassword This will encode MyPassword in the format that the sql data source recognizes. When encoding a string for an application like the Historian, omit the type string or use encoder1 for the type string. For example encode_string MyPassword will return the same result as encode_string encoder1 MyPassword
GmsTabularData
16571: Function crash on empty data sets fixed
In previous versions some functions that manipulated GmsTabularData with 0 rows may have raised the java.lang.ArrayStoreException. This is no longer the case.
Licensing
16613: Include click-through licensing for configuration utility
The configuration utility has been enhanced to show the click-through license if it has not already been accepted. The tibco license agreement has been updated.
16622: install_keys scripts removed from deliverable
The install_keys utility has been removed, as system-independent keys can now be installed using the same registration utility that system-specific keys use.
Object Library
15151: Indicator Palette enhanced
All of the indicators previously on the Indicators tab of the Object Palette have been replaced with the following 4 new indicators: obj_ind_discrete - This indicator supports 3 discrete comparisons. obj_ind_limits - This indicator supports 2 high and 2 low thresholds. obj_ind_multi - This indicator supports an unlimited number of comparison values. For each comparison, you can specify whether the value property must be equal, not equal, greater than or less than the comparison value. obj_ind_panel - This is a panel of 3 indicator lights. Each indicator light supports a discrete comparison. For all indicators, attach the value property to data, and setup your comparisons using the properties in the Alert category. See the documentation for more detailed information on the object properties. The indicators that were previously on the Indicators tab of the Object Palette have been deprecated. They will continue to work as they did before in existing displays, but are no longer available in the Object Palette.
16374: New symbol library
A library of symbols has been added to RTView. These images can be used on any object that supports images. Users can also define their own custom image library. To access the images, edit the image property on an object. Instead of typing in an image name, click on the ... button. This will bring up a dialog with a tree on the left. The tree will have up to 3 top level nodes: 1. Current Directory - this lists the images in the current directory and one level of subdirectories. 2. Custom Image Library - if the user has specified a custom image library, this node will list the images in that library 3. Symbol Library - the symbol library containing a subdirectory for each category of symbols Navigate in the tree to the image you would like to use and select it. A preview of the image will draw in the pane to the right. Click OK or Apply to set the image on your object. Note that you can still simply type your image name into the image property field instead of using the dialog. You can access the same image editor dialog from the Image Name field in the Background Properties dialog and also when editing images in the filterProperties property on the table object. The custom image library allows you to add images to the tree in the image dialog. To add an image library, place your images .jar file and add it to the RTV_USERPATH environment variable. The images must be in a directory (ie not in the top level of the jar). They may be organized into sub-directories of one top level directory if desired. In the Display Builder, select Tools->Builder Options and in the Custom User Library Path set the path to directory containing your images in the jar. This jar must be included in the RTV_USERPATH for your deployments as well. For example, if you have a jar with this directory structure: com/mycompany/Images com/mycompany/Images/Blue Images com/mycompany/Images/Red Images com/mycompany/Images/Green Images In the Builder Options Custom User Library Path, add com/mycompany /Images. This will add a node named Images to the tree in the image dialog. It will have 3 nodes under it: Blue Images, Red Images, Green Images. Note that only directories that contain images will be added to the tree in the dialog.
16378: value*BgGradientColor2 added to general object thresholds
The obj_rect_ilvx_ra4, obj_circ2d_ilvx_ra4, obj_rect_ilvs_da3 and obj_circ2d_ilvx_da3 General Objects have been enhanced to support a second gradient color for the threshold properties. The following properties have been added: obj_rect_ilvx_ra4 and obj_circ2d_ilvx_ra4: Alert Category: valueLowAlertGradientColor2 valueMediumAlertGradientColor2 valueHighAlertGradientColor2 Quality Category: valueQualityNoDataGradientColor2 valueQualityLostDataGradientColor2 obj_rect_ilvx_da3 and obj_circ2d_ilvx_ra4: Alert Category: valueLowAlarmGradientColor2 valueLowWarningGradientColor2 valueHighWarningGradientColor2 valueHighAlarmGradientColor2 Quality Category: valueQualityNoDataGradientColor2 valueQualityLostDataGradientColor2 Each property sets the second gradient color when that condition is met. In previous releases, the bgGradientColor2 property was used for the second gradient color for all thresholds. Old displays will continue to use the bgGradientColor2 until the new color properties are saved from the Display Builder.
16490: Table object no longer crashes sorting columns with null strings
Previously a table object referencing a dataset with string columns containing null values would cause a crash when loaded into RTView. This problem has been fixed.
16526: obj_speed meter object now accepts double data
The obj_speed meter object has been enhanced so that the following properties now support double values: valueMin valueMax valueHighAlarm valueLowAlarm Existing displays that use integer values for these properties will continue to work as they did before unless the value passed in for valueMin and valueMax from a data attachment was a double. In that case, the tick labels will change to show the double value. Previously double values were displayed as ints.
Composite Object
14804: Link alignment to composite objects. corrected
In previous releases, links did not work correctly with composite objects. There was a gap between the end of the link and the composite object. This has been fixed.
Control Objects
12107: New axisDirection property added to the slider control object
A new property, axisDirection, has been added to the slider control (obj_c1scale). This property allows you to set the axis direction of the scale to the following: Bottom to Top - vertical orientation with min on the bottom and max on top Left to Right - horizontal orientation with min on the left and max on the right Top to Bottom - vertical orientation with min on the top and max on the bottom Right to Left - horizontal orientation with min on the right and max on the left
16536: Improved support of style sheets for Date Chooser
The Date Chooser control has been enhanced to support 3 new properties: fgColor - The font color of the text entry area. Default is black. validColor - The font color to use while editing in the text entry area if the entered value is using the correct format. Default is green. invalidColor - The font color used during and after editing in the text entry area if the entered value is not using the correct format. Default is red. The validColor and invalidColor are not supported in the thin client deployment.
16633: Tick Mark color added to sliders
The obj_c1scale object has been enhanced to support the fgColor property. This property sets the tick mark color. You can either select a color or select the Default color to use the color for your look and feel. The fgColor is only applied when the control is enabled, so tick marks on sliders in the main builder window will not use the fgColor (preview your display to see the fgColor applied). Note that this change does not apply to the Thin Client deployment as the sliders in the Thin Client do not have tick marks.
16683: Thin client now respects bgColor of listbox control.
The bgColor property of a listbox control is now respected in the thin client, except in Internet Explorer version 6 or older.
Fx Trend Chart
16423: The -fxreplace option conversion improved
The fxreplace option now properly converts the the following properties when replacing an obj_fxtrend with an obj_trendgraph02: bgGradientFlag legendBgGradientFlag yAxisMultiRangeMode
16535: Corrections to FX trend problems with trace groups
The following problems with trace groups on the Fx Trend Graph are fixed: 1. Lower band is too dark even when traceFillStyle = transparent 2.The value trace is obscured by the upper band, if the trace values overlap. 3. Autoscaling for some traces in group is incorrect if trace numbers in group are not in ascending order.
Heatmap
16634: Heatmap now reflects property changes before next data update
In previous releases, the colorValueAutoScaleMode, colorValueMax and colorValueMin properties on the heatmap were not always applied before the next data update. Also, changes to the column list in the data attachment were not applied until the next full update. This has been fixed.
Object Grid
16492: Drill down from objects in object grid fixed for thin client
In the previous version, in the thin client, a click on an obj_trendgraph02 contained in an object grid did not initiate the drillown operation configured on the grid object. This has been fixed.
Tables
16604: Hidden table columns no longer visible in thin client
The following thin client problem has been fixed: Under certain conditions, the columns specified in the columnsToHide property of a table object may become partially visible in the thin client. This problem occurs if the data for the table is not available when the display is opened, so the table is initially blank. If the data arrives on a subsequent refresh of the thin client, the columns that should be hidden may instead be partially visible. The problem is more likely to occur in Firefox. It is also more likely to occur in a Display Server + Data Server deployment since in that case there can be a delay before the Display Server gets data from the Data Server. Also, after the problem occurs, some columns may not be resizable in the thin client.
16615: Fix crash when rows removed from table with Date col during draw
The following problem is fixed in this release: If an obj_table02 is attached to a data table containing a Date column and rows are removed from the data table as the obj_table02 is being drawn, then the following exception is sometimes thrown: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
Trend Charts
16514: Trends now visibile when plots lie on the X Axis
In prior releases, a thin trace line on obj_trendgraph02 was not visible where its points had a value that corresponded to the minimum y value, since it was obscured by the 1-pixel black border that is drawn around the trace area. This is fixed except in cases where the trace color is black and yAxisMultiRangeMode is not set to "Strip Chart."
16627: FX trend now shifts if timeShift > 0, even if no new data
The Fx trend graph will now shift at the interval specified by its timeShift property (if > 0) even if no new data points are plotted. This is consistent with the behavior of the standard trend graph object (obj_trendgraph02). In prior releases, the fx trend graph would only shift when new points were plotted. Note that if the user wants the trend graph to shift only when new points are plotted and also wants the time axis boundaries to be rounded to N seconds, the timeShift property should be set to -N. (This is not a new feature, just mentioned here for completeness).
Security
16422: Fixed JS error when excluded display accessed in thin clnt
A problem has been fixed which caused the thin client to encounter a javascript error when a user attempted to open a display which was in the list of excluded displays for the user's current role in roles.xml. Now a message will appear on the page indicating that the user was denied access to the display.
Substitution
16476: Setsub or validsub function now setting initial value correctly
In prior releases, if a function (named F1, for example) has an input argument with an attachment that is affected by a substitution, and the initial value of that substitution is set by another function (named F2, for example) which appears later in the rtv file, the input argument for F1 may end up with two attachments, one using the correct substitution value and another using the initial (incorrect) substitution value. This problem is fixed.
Version 5.7d1 Release Notes
Builder - Property Dialogs
16439: Function Result Scroll Columns broken
In release 5.7c1, the checkboxes in the Display Data dialog did not work. This has been fixed.
Demos
XML Data Simulator
16489: Fixed crash in XML Simulator
In 5.7c1, the XML Simulator would crash on non-English operating systems. This has been fixed.
Version 5.7c1 Release Notes
16171: Option to alphabetize object properties fixed
In the Display Builder Object Properties dialog, if the properties were displayed alphabetically their order was not correct. This has been fixed.
Alerts
16299: Formatting of $alertCurValue, $alertCompValue in alertCommand
A property named valueCommandFormat has been added to the limit and multi-state alert objects. This property specifies the format to be used for numeric values in the $alertCurValue and $alertCompValue substitutions in the object's alertCommand. The valueCommandFormat is initially blank, which indicates that the default format should be used.
Builder
15827: Column and row numbers added to Display Data window
In the Display Builder, the Display Data dialogs now show the the number of columns and rows in the current table.
15960: Corrected bug with alert/function/cache tab after layout reset
In the Display Builder, under certain circumstances if you used the Reset Layout function and subsequently opened a tab in the tabbed pane, the pane would close. This has been fixed.
16312: Column Types now always show in Show Content dialog
In the Display Builder data display dialog, if the dialog was showing multiple tabs (such as cache current and history tables) and one of the checkboxes such as (Show Column Types) were checked or unchecked, the change was applied to the current tab only. This has been fixed.
Builder - Applet
16238: Drilldown to new display in existing window no longer fails
A problem affecting the Viewer applet after performing a drilldown to a new display in the current window or a named window, in version 1.6.0_10 or newer of the Java plugin, has been fixed.
Builder - Editing
16006: Pasting properties of cache/alert/function now excludes name
In the Display Builder, when you would "Paste All Properties" or "Paste Static Properties" from one cache, alert, or function to another, the properties that were pasted included the cache, alert, or function name, and resulted in either a dialog prompting for a new name, or a warning about duplicate names. This has been fixed..
16013: Limitation removed from mouseOverText property
The mouseOverText in the Display Builder, Display Viewer Application and Display Viewer Applet have been enhanced. In previous releases, there were several scenarios where the mouseOverText was obscured by other objects in the display. The mouseOverText is now drawn above all objects except the Flex Graphs which are still sometimes drawn on top of the mouseOverText. This change impacts the following objects: - all non-Flex graph objects that support the mouseOverFlag property - all non-graph and non-control objects that support the mouseOverText property No change was made to the control objects as their mouseOverText was not being obscured. In previous releases, if multiple non-control objects with mouseOverText overlappped and the mouse was positioned on the overlapping area, the mouseOverText would display for both. This has been fixed, so that only the mouseOverText for the front object is displayed. As part of this change, the mouseOverText positioning behavior for the graphs was modified. Previously, the mouseOverText location was contstrained to stay within the graph object's extent. It is no longer constrained to the graph object's extent. There is one known limitation for editing displays. If multiple non-control objects overlap and the stacking order is changed in the Display Builder, the mouseOverText may show up for the back object instead of the front object when the mouse is position on the overlapping area. This problem is resolved by saving and reloading the display.
Data Historian
16051: New option to store less data than received
An option has been added to the Data Historian that allows it to store less data than it receives. This can be useful in a configuration where the Data Historian receives data from the Data Server, but at a higher rate than is needed for historical storage. The new option is labeled "Store Last Values Only" and appears in the Data Cache Options section of the Configuration tab. This option is available only if the Cache Data option is checked and the Cache Duration value is greater than zero, in which case the Data Historian does not store data records immediately but rather keeps them in a cache to be stored later. If the "Store Last Values Only" option is unchecked (the default), the Data Historian will store all of the records in the cache each time the Cache Duration period expires. But if the option is checked, the Data Historian will instead store only the last (most recent) value in the cache for each unique data attachment the historian is configured to store. For example, say the data server pushes tables from two SQL attachments to the historian: Query1: select * from table1 Query2: select * from table2 Say the Data Server executes those queries every 10 seconds, and the historian has cache duration = 60 seconds. In that case, every 60 seconds the Data Historian's data cache will contain 6 result tables from Query1 and 6 result tables from Query2. If "Store Last Values" is unchecked, the historian will store all 12 tables in the database. If the option is checked, however, the Data Historian will only store the 6th (most recent) result table for Query1 and the 6th table for Query2. It will discard all the other result tables in the cache. The new option can be enabled on the command line with the -cachelast option.
16288: Historian again performs retention if timestamp type is SQL
The timestamp:sql mode of the Historian once again fully supports the -retention:nn method of archive trimming.
16289: "quoteColumnNamesFlag" no longer ignored when accessing tables
The Data Historian no longer ignores quoteColumnNamesFlag when accessing SQL tables.
16295: Echo logging lines removed for .ini file settings
Advanced Historian settings will no longer be printed to the console if they are set in HISTORY.ini. They will continue to be present when set from the command line.
Compaction
16113: retentionMax implemented for frequency of cleanup
The command line and HISTORY.ini file parameter retentionMax, which already existed for old style historian archival has been implemented for Historian Compaction. The parameter -retentionMax:5 or keyword retentionMax 5 specifies the maximum number of minutes that each compaction rule may run before the Data Retention logic is processed. If a rule has a shorter retention span than the retentionMax then the rule's retention span is used.
Data Sources
Cache Data Source
16319: Cache data dialog no longer fails if attaching to boolean
An exception is no longer thrown when attaching a boolean property (visFlag, for example) to cache data.
JMS Admin Data Source (for TIBCO EMS only)
15230: Default passwords in servers.xml and JMSADMOPTION.ini now work
In previous releases, if the password for a server in servers.xml was the same as the Default Admin Password, connections to that server were inconsistent. This has been fixed.
JMX Data Source
16114: RTViewDs:type=connection no longer throwing exception
Choosing RTViewDs:type=connection as the mBean could cause an exception and if a connection group was in use only the first connection would appear in objects.
16232: Auto-detection of JMX MBean severs implemented
A new option to auto-discover local MBean Server has been added to the JMX data source. To enabled this feature, select the Automatically Discover Local MBean Servers option on the JMX Administration tab in the Application Options dialog. You can also enable it with the following command line option: -jmxautodiscover When enabled, RTView will get the list of local MBean Servers once each poll interval (note that the poll interval is set by either the Default Poll Interval on the JMX Administration tab or by the Update Period on the General tab). All new servers that are discovered will be added as connections using the process id for the connection name. Connections to auto-discovered servers that have exited are removed. Automatically discovered connections are not saved to JMXOPTIONS.ini. All auto-discovered connections are also added to a JMX Connection Group named RTViewDs-Auto. This group cannot be removed or edited, and is not saved to JMXOPTIONS.ini. A new column, Display Name, has been added to the Connections table. For auto-discovered connections, this will list the main class and arguments passed into java.exe for the MBean Server process. The auto-discover features requires a 1.6 JDK installation. The tools.jar from your JDK installation must be included in the RTV_USERPATH in order for this feature to work.
SNMP Data Source
16123: MIB defintion file included in lib
RTView's MIB definition file, SL-RTVIEW-MIB.txt, is now included in %RTV_HOME%\lib.
SQL Data Source
16117: Data Server no longer gives exception for malformed ORACLE query
Previously the data server , when using an ORACLE DB would generate ORACLE SQL exceptions under certain circumstances involving TIMESTAMPS in the WHERE clause of a SELECT statement . This is no longer the case.
Display Server
15482: Tooltips in Display Server now consistent with application
The look of the mouseOver in the Thin Client is now consistent with the look of the mouseOver in the other deployments. Multi-line tooltips now display correctly in all supported browsers.
Functions
15970: Multi-column join in Join and Join Outer functions supported
In the Display Builder, the Join and Join Outer functions have been enhanced so that multiple pairs of columns may be specified for the join. The Column Name argument fields may now be used to specify lists of columns by entering column names separated by semicolons (;) (note that ; is not allowed in column names). The column name lists must be the same length and the corresponding columns in each list must have the same type. All pairs of values must match for a row to be included in the join.
16197: Better handling of commas in string args in Evaluate Expression
In the Display Builder, there was a problem with the Evaluate Expression functions when certain built-in string functions were used. String functions which take multiple args (e.g. substring(string, start, end) would fail with the error "Invalid use of quotes" if there was a comma in the string value supplied. This has been fixed.
General
15952: RTView Run Scripts now use JAVA_HOME
All RTView command-line scripts will now preferentially use JAVA_HOME/bin /java.exe. If it is not found, then the java.exe that is first in the PATH will be used. NOTE: This does not apply to Windows Start Menu shortcuts. If you wish JAVA_HOME\bin\java.exe to be used, make sure it is first in PATH.
16072: DateChooser now accepts a yyyy-MM-dd date as its selectedValue
In previous releases, the selectedValue on the date chooser control sometimes did not set the initial date value. The date chooser control has been enhanced to try parsing the selectedValue using the dateFormat if the default date formats fail.
Java Version Dependencies
16191: Windows Service install now works with JRE
In previous releases, running RTView applications as Windows services required a jdk installation. It has been enhanced to work with either a jdk or jre installation.
Layouts
15795: PANELS.ini enhancement for navigation controls
A new format is supported for the PANELS.ini file. To simplify deployment, this format is fully supported by both the Viewer and the Display Server. The new format supports display navigation using tree, accordion, or tab controls. The appearance of the controls can be set by a stylesheet file. Several tags have been added for use with the new format, as follows: <rtvTreePanel> : This tag creates a tree navigation panel. <rtvAccordionPanel> : Creates an accordion navigation panel. <rtvDisplayPanel> : Create an RTView display panel. <rtvTabbedDisplayPanel> : Create a tabbed RTView display panel. <rtvLayout> : This tag indicates that the new PANELS.ini format is to be used. The new tags listed above can only be used within an <rtvLayout> tag. The PANELS.ini formats and the associated tags that were supported in previous releases are still supported. However, the new tags listed above cannot be mixed in the same PANELS.ini file with any of the older tags. ========================== EXAMPLE 1. The following PANELS.ini uses the new tags to create a title panel at the top, an accordion panel on the left, and a main display panel in the enter, with draggable dividers between all the panels: <xml version="1.0" ?> <panels xmlns="www.sl.com" version="1.0"> <rtvLayout title="Accordion Example" dividers="true"> <rtvDisplayPanel region="north" name="title_panel" display="title.rtv"/> <rtvAccordionPanel region="west" width="200" navdata="navtree.xml"/> <rtvDisplayPanel region="center" name="main_panel" display="chart_main.rtv"/> <rtvLayout> <panels> ========================== EXAMPLE 2. The following PANELS.ini uses the new tags to create a tabbed display panel at the top, and a title panel at the bottom: <xml version="1.0" ?> <panels xmlns="www.sl.com" version="1.0"> <rtvLayout title="Tab Example"> <rtvTabbedDisplayPanel region="center" tabs="navtabs.xml" display="stock_chart"/> <rtvDisplayPanel region="south" name="title_panel" display="title.rtv"/>> <rtvLayout> <panels> ========================== The attributes and use for each of the new tags are defined below. A. <rtvLayout> tag: - Can appear only once in PANELS.ini - Expects each child tag to specify region="x", where x is north, south, east, west, or center. This determines the layout of the child panels. Attributes: 1. title default value: none description: string to display in title bar of Viewer or browser 2. dividers default value: false description: if dividers="true" then a draggable divider is drawn between each child panel in the rtvLayout. ----------- B. <rtvDisplayPanel> tag: - Creates a panel for an rtview display. Attributes: 1. display default value: none description: the name of the rtview display file to be loaded into the panel example: display="Disp101.rtv" 2. subs default value: none description: the substitutions to be applied to the display example: subs="$sub1:value1 $sub2:value2" 3. name default value: none description: name for panel, can be specified as a drilldown target 4. region default value: center description: the position of this panel in the rtvLayout: north, south, east, west, or center ----------- C. <rtvAccordionPanel> tag: - Creates a panel containing an accordion control for display navigation. - The accordion control assumes there is an rtvDisplayPanel in the center region, and send its navigation commands to that panel. - In the thin client, the accordion contents cannot be more then 2 levels deep. If deeper nesting is required, use rtvTreePanel instead. Attributes: 1. navdata default value: none description: the name of xml file that specifies the contents of the accordion control See the Navigation Data section below, for more info on the format of this file. example: navdata="navtree.xml" 2. width default value: 125 description: pixel width of the panel 3. region default value: center description: the position of this panel in the rtvLayout ----------- D. <rtvTreePanel> tag: - Creates a panel containing a tree control for display navigation. - The tree control assumes there is an rtvDisplayPanel in the center region, and send its navigation commands to that panel. Attributes: Same as rtvAccordionPanel above. ----------- E. <rtvTabbedDisplayPanel> tag: - Creates a panel for an rtview display, with tabs for navigation. Attributes: 1. tabs default value: none description: the name of xml file that specifies the tab contents See the Navigation Data section below, for more info on the format of this file. example: tabs="tabs.xml" 2. display default value: none description: the name of the initial rtview display file to be loaded into the panel example: display="Disp101.rtv" 3. subs default value: none description: the substitutions to be applied to the display example: subs="$sub1:value1 $sub2:value2" 4. region default value: center description: the position of this panel in the rtvLayout 5. placement default value: top description: determines placement of tabs, either "top" or "bottom" ============================ Intended Usage: Typically, an rtvLayout will contain one of the following combinations of tags: 1) a main rtvDisplayPanel with region="center", plus either an rtvAccordionPanel or rtvTreePanel with region="west" or "east", and possibly other secondary rtvDisplayPanels in other regions. 2) a main rtvTabbedDisplayPanel with region="center", and possibly other secondary rtvDisplayPanels in other regions. Other combinations have not been tested and may not function as expected. ============================ Navigation Data file formats: The content of an rtvAccordionPanel or rtvTreePanel is determined by the file specified by its 'navdata' attribute. This is expected to be an XML file with the format shown in the following example. <xml version="1.0" ?>> <navtree version="1.0"> <node label="Displays"> <node label="Charts" display="chart_overview.rtv"> <node label="Chart One" display="chart1.rtv" subs="$sub1:123"/> <node label="Chart Two" display="chart2.rtv"/> <node> <node label="Reports" display="report_overview.rtv"> <node label="Report 1" display="rep1.rtv"/> <node label="Report 2" display="rep2.rtv"/> <node> <node> <navtree> In the accordion, note that the root node (the node labeled "Displays" in the above example) will not be visible. Also, the accordion only supports two levels of nodes, not counting the root node. The contents of the tabs in an rtvTabbedDisplayPanel are determined by the file specified by its 'tabs' attribute. This is expected to be an XML file with the format shown in the following example. <xml version="1.0" ?> <navtree> <node label="Bar Chart" display="disp1.rtv"/> <node label="History Graph" display="disp2.rtv" subs="$v1:xyz"/> <navtree> ============================ Stylesheets: (The use of stylesheets in RTView is described in the release note for E15734). When the rtvLayout tag is used in a panels configuration, stylesheet entries can be used to specify the colors, fonts, and other properties of the navigation panels and controls. The following property names are supported: 1. bgColor, fgColor - the background and foreground (text) colors. The value is either a color index from the RTView color palette, or an RGB value in #rrggbb format where rr, gg, bb are the red, green, and blue intensities in hexadecimal values between 00 and ff. 2. font - the index of the font for navigation controls. The RTView font index assignments are listed at the end of this section. 3. fontIndex - the point size for fonts on all navigation controls. 4. bgGradientFlag - if true (the default), the accordion controls and the tab controls use a gradient fill, if false they use a solid fill. The properties listed above can be specified for any of the following class names. If a property is specified for more than one class, the value for the highest precedence class is applied. The classes are listed from lower to higher precedence. 1. rtnav: Properties specified for this class are applied to all navigation panels and controls. 2. rtnav-state-default: Properties for this class are applied to all navigation controls that are in the default (unselected) state. 3. rtnav-state-hover: Properties for this class are applied to the navigation control that the mouse cursor is currently positioned over (affects tab and accordion controls only, and only in the thin client) 4. rtnav-state-selected: Properties for this class are applied to all navigation controls that are in the selected state (for example, the selected tab in a tabbed panel). Example: rtnav {bgColor: 7; fgColor: 12; } rtnav-state-default {bgColor: 256; font: 1; } rtnav-state-selected {bgColor: #4c5d65; font: 7;} rtnav-state-hover {bgColor: #004157; } ----------- The following properties of the accordion panel can be specified using the rtnav-accordion class name: 1. buttonWidth : the width in pixels of all buttons in the accordion, default is 160 2. spacing : the vertical space in pixels between buttons, default is 5 3. indent : the left pixel indent of leaf buttons in the accordion, the default is 10 Example: rtnav-accordion {buttonWidth: 200;} The following properties of the rtnav class control the appearance of the borders drawn around the navigation panels 1. bgBorderColor : color of draggable or non-draggable borders 2. bgBorderWidth : pixel width of non-draggable borders A draggable border is drawn between all panels in a panel configuration in which the "dividers" attribute of the rtvLayout tag is true; a non-draggable border is drawn around navigation panels if "dividers" is false. ----------- Here are the RTView font index assignments: 1 sans-serif 2 monospaced bold 3 monospaced 4 serif 5 monospaced italic 6 serif bold 7 sans-serif bold 8 sans-serif italic 9 serif bold italic 10 serif italic 11 sans-serif bold italic 12 monospaced bold italic
Licensing
16258: Copy/paste popup added menu to registration application
A popup menu has been added to the Pin, Key and TSN fields of the registration application. It allows you to copy the selected text in those fields to the system clipboard or paste the system clipboard contents into the Key or TSN fields.
Object Library
16212: Greyscale choices added to default color palette
The Color palette has been enhanced to include 18 new shades of gray. These have been added to the end of the color palette.
16226: Foreground color properties added to obj_meter20
The following properties have been added to obj_meter20: fgGradientColor2 - set the second color in the foreground gradient fgEdgeColor - set the foreground main edge color fgEdgeColor2 - set the secondary foreground edge color Note that all of these properties only apply if the fgGradientFlag is selected.
Charts (General)
16118: Automated replacement of Fx graphs with standard graphs
Fx graph objects in a display can now be automatically replaced by the equivalent standard graph objects. This is useful when exporting a display to a PDF file or generating PDF reports, or in situations where the Flash player is unavailable. The replacements are: Trend Graph: obj_trendgraph02 replaces obj_fxtrend Bar Graph: obj_bargraph replaces obj_fxbar Pie Graph: obj_pie replaces obj_fxpie The replacements are made under any of the following conditions: 1. In any deployment, when a PDF file is generated from a display using the Export menu or the RTView reporting tool, the fx graph objects are replaced before the PDF file is generated. (This is necessary because the fx graphs do not support PDF generation). After the PDF file is generated, the fx graph objects are restored to the display. So the PDf file shows the replacement graph objects but the display will continue to show the fx graphs (assuming none of the cases below apply). 2. In the Display Builder, Dipslay Viewer, and Display Server, if the -fxreplace option is specified on the command line or "fxreplace true" appears on a line in the OPTIONS.ini file then the fx graph objects are replaced immediately when each display is opened. 3. In the viewer application and the builder preview window, if the Flash player or wrapper is unavailable then the fx graph objects are replaced immediately when each display is opened. (This case does not apply to the thin client. If the Flash player is unavailable in the thin client, the display will contain a link for downloading the player. This case also does not apply to the main edit panel in the builder, to avoid inadvertently saving the display after the fx graphs have been replaced). 4. In the Display Viewer Applet (which does not support the Flash wrapper) the fx graph objects are replaced immediately when each display is opened. Note: In case 2 above, if the display is saved from the builder it will be saved with the replacement graphs. A confirmation dialog to that effect is shown to the user before the save is performed. In a Display Viewer Applet deployment, the applet's ARCHIVE parameter must include gmsjflash.jar otherwise a ClassNotFound exception will be thrown for each fx graph on a display. For example: ARCHIVE="gmsjrtview.jar,gmsjmodels.jar,gmsjext.jar,gmsjrtvreport.jar,gmsjflash.jar,snmp.jar" Limitations: - Custom Fx objects are not replaced. - The replacement graphs do not exactly match the fx graphs in appearance. There are minor but noticeable differences in colors, gradients, fonts for legends and axis labels, tick marks, axis line style and thickness, spacing and placement of graph components, etc. - The following properties of obj_fxtrend are not supported in obj_trendgraph02: legendPosition, logAxisFlag, alarmGlow, traceNShadowFlag. So an obj_trendgraph02 replacement will always have a linear Y axis and its legend, if visible, will be on the right. - Interactive changes made by the user to an fx graph's scrollbar knob position, legend size, or time range are not applied to the replacement graph. Also, current data that has been applied to an fx trend graph is not re-applied to the replacement graph. So, the trace data, legend position, scrollbar position, and time range on the replacement graph will appear as though the display was opened just before the replacement was created. - The pie on an obj_fxpie object is always drawn as a circle but on obj_pie it is drawn as an ellipse that fills the available rectangular area.
Control Objects
16129: Slider control range problems in thin client fixed
In prior releases, there were two problems with the slider/scale control in the thin client: 1. If a slider control is configured so that (valueMax - valueMin) < 5 then in the thin client the slider is always disabled. 2. If a slider control has a minValue > 0, then in the thin client the control's upper limit is incorrectly set to maxValue + minValue, instead of maxValue. Both problems are fixed in this release.
16256: Input validation implemented for text entry controls
The text entry controls (obj_c1textedit, obj_c1textedit_i, obj_c1textedit_d) have been enhanced to support input validation. The following properties have been added to the text entry controls in the Interaction category: inputValidVarToSet - Attach to a local variable. This variable will be updated when the control executes with a value of 1 if the input is valid or a value of 0 if the input is invalid. invalidInputMsgVarToSet - Attach to a local variable. This variable will be updated when the control executes with an error message if the input is invalid or an empty string if the input is valid. Furthermore, if the validation fails, the control's actionCommand is not executed. The following properties have been added to the numeric text entry controls: valueMin - The minimum valid value. If no value is specified, there will be no minimum value validation. valueMax - The maximum valid value. If no value is specified, there will be no maximum value validation. The non-numeric text entry control has 3 new properties in the Data category: characterCase - Select Mixed Case, Upper Case, or Lower Case. minCharacters - The minimum number of characters allowed in the field. If no value is specified, there will be no validation done on the minimum number of characters. maxCharacters - The maximum number of characters allowed in the field. If no value is specified, there will be no validation done on the maximum number of characters. The validation occurs whenever the control executes. This happens when the user presses enter on a text field. If the executeOnFocusLostFlag is selected, the control also executes whenever the object loses focus. If the executeOnKeyStrokeFlag is selected, the controls also executes whenever a key is pressed while the object has focus. If the validation fails, the control's actionCommand is not executed. This task also enhances the Thin Client to reject invalid characters if they are typed in a numeric entry field. However, invalid characters can still be copied & pasted into a numeric field.
16377: Edit box shows but won't parse 1000s separator
In previous versions, the thin client would automatically insert a comma as the thousands-separator in an integer- or double-type edit box (obj_c1textedit_i and obj_c1textedit_d), but the display server would not parse numeric values correctly if they contained commas. In this release, the thin client will not automatically insert commas as the thousands- separator.
Fx Trend Chart
16284: Fixed autoscale problem when using multi-trace table
A problem in the Fx trend graph has been fixed which caused the y-axis range to be too large when the multiTraceHistoryValueTable property was attached to a function result.
Object Grid
16061: Composite in object grid no longer drawn 1 pixel too small
In version 5.5 and version 5.6, the composite object was rendered 1 pixel too small if the resizeMode was Size to Display and the bgVisFlag and/or bgBorderFlag were off. This problem has been fixed.
Pie Charts
16292: Fixed memory leak with gradient fill on obj_piescale
A memory leak that affected obj_piescale when pieGradientMode was set to any value other than None has been fixed. A minor leak that occurred on a drilldown to the current window has also been fixed.
Radar Charts
16228: New properties to set axis and grid colors on Radar Graph
Three new properties have been added to the Radar Graph (obj_radar): gridColor - set the color of the grid lines valueAxisColor - set the color of the value axis and value axis labels radialAxisColor - set the color of the radial axis and radial axis label
Tables
16225: Cell properties added to rotated table (obj_table03)
The following properties have been added to the rotated table (obj_table03): cellBgColor - set the cell background color cellBgStripeContrast - set the contrast level for the stripes if cellBgStripedFlag is on cellBgStripedFlag - select to set alternating striped rows cellTextColor - set the cell text color cellTextFont - set the cell text font cellTextSize - set the size of the cell text (in pixels) or set to -1 to use the default size
RTView Display Panel
15734: RTView has been enhanced to support style sheets
RTView has been enhanced to support style sheets. Style sheets allow you to set the values for graphical object properties in your displays from one or more external style sheet files. See the documentation for information on how to use style sheets.
16254: A minimum size for a display can now be specified
A minimum size for a display can now be specified. If the Resize Mode for the display is "Layout" and the user resizes a panel containing a display, the display will not be made any smaller than its minimum size. This can be useful to prevent objects from overlapping in Layout mode. In the Viewer, a panel cannot be resized smaller than the minimum size of the current display in the panel. In the thin client, a panel can be made smaller than the minimum size of the display, but in that situation scrollbars will appear in the panel. A display's minimum size is defined by two properties named resizeWidthMin and resizeHeightMin, which appear in the Interaction category of the display's Model Properties. (To configure a display's Model Properties in the Builder, select File/Background Properties then click the Model Properties button). The default value for each property is zero, which means the display has no minimum size. The resizeWidthMin and resizeHeightMin properties can be specified in a stylesheet file, as shown below: m_basemodel {resizeWidthMin:600; resizeHeightMin:400} This can be useful for setting the minimum size for multiple displays. If resizeWidthMin or resizeHeightMin are set to values that are larger than the display's full width and height, they are ignored and no minimum size will be enforced on the display. The full width and height for a display are defined in the Background Properties dialog, using the Model Width and Model Height fields.
TIBCO EMS Manager
16264: Purging of multiple destinations at once now possible
The TIBCO EMS Manager has been enhanced to allow the purging and deleting of multiple topics or queues in a single operation. In the Manage Topics page, you can select multiple topics from the table at the bottom of the page by holding the shift or control key while either clicking multiple rows or using the arrow keys to highlight multiple rows. The same can be done to select multiple queues from the table at the bottom of the Manage Queues page. The selected topics or queues will be presented as a semi-colon delimited list.
TIBCO EMS Manager - Administration
16263: New Manage Connections administration page
The TIBCO EMS Manager has been enhanced to include a new Manage Connections administration page. On this page, you can select a server at the top of the page to see a list of connections for that server at the bottom of the page. To delete a connection, select it from the Connections table and click Delete Connection. Note that this will disconnect the client using the connection from the server, so this feature should be used with caution. A new command has been added to the TIBCO EMS Administration data source: delete_connection. The arguments are as follows: delete_connection serverUrl connectionID For example: tcp://emsserver1:7222 delete_connection 555
Viewer - Applet
16260: Error message when applet is refreshed has been removed
A bug has been fixed which caused the Viewer applet to throw an InstanceAlreadyExistsException if the applet was reloaded. The applet no longer prints the message "ERROR: cannot create RTView MBeans" at startup.
Version 5.6c1 Release Notes
Alerts
15701: Support for custom alert text as part of alert command added
The discrete, limits and multi state alerts have been enhanced to support custom command text. The following properties have been added to the alerts: Discrete Alert: valueHighAlertCommandText valueMediumAlertCommandText valueLowAlertCommandText Limits Alert: valueHighAlertCommandText valueHighWarningCommandText valueLowAlertCommandText valueLowWarningCommandText Multi State Alert: alertStateNAlertCommandText The values of these properties are used in the $alertCommandText substitution which can only be used in the alertCommand property. These properties take either a string or a tabular data. The scalar value is supported whether the useTabularDataFlag is selected or not. If a scalar value is specified, this will be used for the $alertCommandText substitution. The tabular value is only supported if the useTabularDataFlag is selected. When specifying a tabular alert text value, the input table must contain two columns. The first column must contain indexes and the second column must contain alert command text values. The index value for each row in the input table attached to valueTable will be used to lookup the corresponding alert command text value. If the index is not found in the specified alert text table, the $alertCommandText substitution will be set to an empty string. If the useTabularDataFlag is off, the $alertCommandText substitution will be set to an empty string if the alert text value is tabular. If value is entered, the $alertCommandText substitution will be an empty string.
15740: New option renotifyCommand aded to all alerts
The discrete, limits and multi state alerts have been enhanced to support the reNotificationCommand property. If specified, this command will be used instead of the alertCommand for renotifications. If not specified, the alertCommand will be used as before.
15848: Tabular data allowed for value*AlertText property
The alert text properties in the discrete, limits and multi state alerts have been enhanced to support tabular data. This includes the following properties: Discrete Alert: valueHighAlertText valueMediumAlertText valueLowAlertText Limits Alert: valueHighAlertText valueHighWarningText valueLowAlertText valueLowWarningText Multi State Alert: alertStateNAlertText When specifying a tabular alert text value, the input table must contain two columns. The first column must contain indexes and the second column must contain alert text values. The index value for each row in the input table attached to valueTable will be used to lookup the corresponding alert text value. If the index is not found in the specified alert text table, the default alert text is used. If the useTabularDataFlag is off, the default alert text will be used if the alert text value is tabular. If a string value or no value are entered, the previous behavior is used. Whether a tabular, scalar or no value are entered, the $alertText and $alertEmailBody substitutions will contain the same string shown in the Alert Text field of the alert table. The same substitutions that are supported for the string value are also supported for tabular values.
15889: Link objects no longer fail to change color
In 5.4c1 a bug was introduced to the link object so that the link color did not change based on the link's value*Alert properties. This has been fixed.
15895: Alert state now correct if input table changes concurrently
In previous releases, an incorrect alert state could be generated for tabular alerts if the input to the alert was updated while the alert was being evaluated. Similarly, the "Evaluate Expression By Row" function could produce invalid results if its input table changed while the function was updating. Both problems have been fixed.
Builder - Editing
15859: Label obj_label11s no longer changes coordinates after saving
In versions 5.2c1 through 5.5c1, the obj_label11 and obj_label11s objects were shifted 8 pixels to the left every time the .rtv file containing the object was saved. This has been fixed.
15900: Builder Options->File List Size can now be set to 0
In the Display Builder's Builder Options Dialog, the field for "Recently Used File List Size" should accept a value of 0, but it did not. This has been fixed.
Builder - Options Dialogs
15748: Substitutions column has been added to the Caches tab
A column labeled Substitutions has been added to the Caches tab in the Options dialog. This column has the same functionality as on on the Alerts and Globals tab, where it has always been available. The substitutions defined in the column will be applied to the corresponding Cache Definition File when it is loaded. This allows the same cache definition file to be specified multiple times with different sets of substitutions. In that case, each cache that is defined in the file should contain a substitution in the cacheName property, since cache names must be unique. As usual, substitutions are specfied as name:value pairs, with pairs separated by spaces. If a value contains a space, the entire value should be enclosed in single quotes. Substitution names may not contain spaces or colons.
Builder - Property Dialogs
15945: Property Dialog Categories again alphabetical
In the Display Builder Object Properties dialog, the property categories where themselves not alphabetized. This has been fixed.
Commands
14453: SNMP Trap command can now send alert notifications
The RTView System Command "Send SNMP Trap" has been enhanced in conjunction with RTView Alerts. Now, when you select SNMP Trap for the Alert Command, you will have in the Define SNMP Command window a Specific Trap named "Alert". This trap is sent with the name "rtviewAlert" and includes the alert notification data (see MIB defintion below). In addition, traps sent by RTView now use enterprise OID "private.enterprises.sl" (.1.3.6.1.4.1.34605). MIB defintion of the rtviewAlert type: rtview OBJECT IDENTIFIER ::= { sl 1 } rtviewNotifications OBJECT IDENTIFIER ::= { rtview 1 } rtviewAlert NOTIFICATION-TYPE OBJECTS { rtviewAlertName, rtviewAlertIndex, rtviewAlertTime, rtviewAlertLastUpdateTime, rtviewAlertSeverity, rtviewAlertText, rtviewAlertID, rtviewAlertLabel, rtviewAlertCommandText, rtviewAlertCurrentValue, rtviewAlertComparisonValue } ::= { rtviewNotifications 2 }
15245: Commands no longer trigger after window is closed
In previous releases, the text entry and password controls executed an extra command if the executeOnFocusLostFlag was on and the commandCloseWindowOnSuccessFlag was also on. In this case the extra command was executed after the window closed and did not use the correct substitution values. This has been fixed so that the extra command after the window closes is no longer executed.
Data Historian
15472: Historian no longer ignores dataserver settings in OPTIONS.ini
In prior releases, the Historian ignored the dataserver and xmlredirect options specified in OPTIONS.ini. This is fixed.
15967: -compactionVerbose option fixed
In the previous version, the option to set -compactionVerbose:n on the command line was broken. This has been fixed.
Data Server
15904: Supported added for "As Needed" Data Server connections
In prior releases, all connections to Data Servers are opened when the RTView client application starts and are closed only when the client exits. In this release, each Data Server connection has an Activate option, with a choice of "At Startup", for the traditional behavior just described, and "As Needed". An "As Needed" connection is not activated (opened) until the client application loads a display that contains attachments directed to that server. Later, the connection will be deactivated (closed) if all such attachments are removed and a configurable idle time period (default is 15 seconds) has elapsed. To support this feature, a combo box labeled "Activate" with the choices "At Startup" or "As Needed" has been added to the data server option tab and to the Named Data Servers dialog. The default choice will be "At Startup" and it can be set independently for the default data server connection and each named data server connection. Each dialog also allows for the definition of an idle period for deactivation if "As Needed" is selected. These options can also be specified from the command line. For example, to set the default data server connection to activate as needed with an idle time of 30 seconds: run_viewer -dataserver:remote:MyHost:3278;activate=AsNeeded;idle=30 To set the connection to the data server named "Blue" to activate as needed with an idle time of 60 seconds, and with a primary and a backup connection: run_viewer -dataserver:name=Blue;connect=PrimaryHost:3456,BackupHost:3456;activate=AsNeeded;idle=60 This feature affects the Get Data Server Connection Status function. If an As Needed data server connection is not active because it is not needed, then the Status column of the table returned by the Get Data Server Connection Status function will contain the string "inactive". (The other possible values for the Status column are 'OK', 'no connection', and 'no service' as described in the release note for 15126)
16050: Extraneous add/remove listener calls on client discarded
The Builder and Viewer have been enhanced to avoid sending extraneous add and remove listener requests when a display is opened that contains a grid object with composite displays.
Data Sources
Cache Data Source
15749: The cacheName property now supports substitutions
The cacheName property of a cache definition object may now contain a substitution. The substitutions to be applied to a cache definition file can be specified in the Caches tab of the Options dialog, as described in the release note for 15748.
15876: New "Send Table" function
A new function has named "Send Table" has been added. The function can be used to send a table to a remote instance of the Data Server, over a socket or an http connection. The RTVAgent data adapter is used to receive the table in the Data Server. Typically, the function will be used to create an RTVAgent at each site that has data tables to send, as follows: 1. One or more instances of the Send Table function are configured to send the data tables of interest. Typically, the function's "Table to Send" argument is attached to the data table using one of the RTView data adapters. 2. The function instances from (1) are saved in an rtv file, named SendTables.rtv for example. 3. A new script, run_agent, is used to start the agent and load the rtv file from step (2). For example: > run_agent SendTables.rtv The Data Server to which the data tables are sent is configured to receive the data. Typically the data tables from all of the agents in the same agent class are stored in a cache table. This is done by attaching the valueTable property of a cache object to RTVAgent data. The arguments of the Send Table function are: Connection - the connection string for the remote RTVAgent adapter. This should either be a hostname:port string, for example localhost:5665, or a URL for the rtvagent servlet, for example http://SomeServer/rtvagent Agent Name - a string that identifies this agent (sender) to the RTVAgent data adapter. This should be unique among all agents in the same Agent Class. Example: District 5 Agent Agent Class - a string that uniquely identifies the class (type) of agents to which this agent belongs. Example: MyCompany.DistrictAgent Table Name - a string to identify the table when its received by the RTVAgent data adapter. Example: Sales Table Table to Send - the table to be sent to the remote RTVAgent data adapter. This is the only argument that should change on each update Insert Column For Agent Name - an integer. If 1, then a column named AgentName will be inserted into the table before it is sent. The column is filled with the value of the Agent Name argument. This column is useful for identifying which rows were received from which agents, if multiple agents in the same class send tables with the same Table Name. Insert Column For Agent Time: - an integer. If 1, then a column named AgentTime will be inserted into the table before it is sent, and the column is filled with the current time.
15936: Enhance Cache Data Attachment Dialog
The data attachment dialog for the Cache Data Source has been enhanced to provide additional filtering options. Clicking on the radio button labeled "Filter Rows = Advanced" will make 5 new filter fields appear in the dialog, as described below. Typically this will be used in attachments to the cache history table. Time Range: This specifies the time range of rows to be returned. The units are seconds by default, but a suffix of m,h,d,M can be specified for minutes, hours, days, Months etc. If Time Range is left blank or is zero or less, then the rows are not filtered by time range. If Time Range is specified but neither Begin Time nor End Time (see below) is specified, then the most recent rows of data within the specified time range are returned. If both Begin Time and End Time are specified, then Time Range is ignored. BeginTime The minimum timestamp of data to be returned, specified as a date string or as a long timestamp. If Time Range is also specified but End Time is not, then the time of the data returned will span from Begin Time to Begin Time + Time Range. End Time The maximum timestamp of data to be returned, specified as a date string or as a long timestamp. If Time Range is also specified, then the time of the data returned will span from End Time - Time Range to End Time. Rows per Page: The maximum number of rows to be returned from the attachment. The default is blank (or zero) which means return all rows. Page Number: This is used to determine the offset of the rows to be returned. For example if Rows per Page = 10 and Page Number = 2, then the the attachment will return rows 11 to 19. For historical data, page 1 contains the most recent data.
15998: Multiple cache data inputs support
The tabular cache definition object (obj_cache_table) has been enhanced to support multiple input attachments. A new property named valueTableCount has been added. The default value is 1, which results in the cache object having a single property named valueTable which can be attached to tabular input data. If valueTableCount is assigned to 2, then another property named valueTable02 will appear in the property sheet and it can be attached to a different tabular input., and so on up to valueTableCount = 99.
16004: Filtered cache attachment no longer throw array bounds exception
The following problem has been fixed: In prior releases, if a cache table has multiple index columns and an attachment to it has a row filter involving two or more of the index columns, and if a data table is applied to the cache and the data table contains a row in which an index column contains an empty string, an array bounds exception is thrown by cache data source.
JMS Admin Data Source (for TIBCO EMS only)
15860: URL Metadata included in column
A new column, URL, has been added to the following EMS Administration data source metrics tables: Users ListenPorts Producers Durables Queues Topics A new column, serverURL, has been added to the Connections table. The URL and serverURL columns contain the URL of the server returning the data. All of the server tables and the rest of the metrics tables already had a URL column, and have not been modified. Existing displays with data attachments to these tables, and * selected for the Field(s) will now show the new URL column.
15861: Wildcard support added to Server field in data attachments
All of the TIBCO EMS Administration data source metrics tables have been enhanced to support * in the Server field of the data attachment. Note that the server tables already supported * in the Server field. When * is used in the Server field of the data attachment, the table returned will contain rows for all active servers.
JMX Data Source
14697: Wildcarding allowed for JMX connection field
The ability to add a wildcarded connection name like "Sample*" has been added as a member of a JMX Connection Group. Wilcarded names may contain one or more * characters in them.
15828: Bug in composite data display if first record null is fixed
In version 4.6c1 a bug was introduced to the JMX data source that caused it to process composite data incorrectly if the first element in the data was null. This has been fixed.
15923: JMX queries now multi-threaded
The JMX data source has been enhanced to run MBean queries in a separate thread. This prevents slow queries from blocking the main application thread and improves application responsiveness.
15971: JMX Connection Groups have been implemented
JMX Connection Groups have been implemented allowing the user to select a subset of the available connections as a group. That group name may be then used wherever a connection name was previously valid.
16009: Jmx Notifications performance enhancement
Attachments to JMX notifications have been optimized.
16015: JMX attachments to Operations no longer return null table
In previous versions, if a client mBean offered no attributes RTView would show a null table as a result of an operation. This has been fixed.
Demos
RV Monitor Demo
15888: Function Errors in summary totals fixed
In previous releases, the rvmonitor demo generated errors about missing functions. This has been fixed.
Display Server
15857: Data Server setting in OPTIONS now has effect on Display Server
In prior releases, the Display Server ignored the dataserver and xmlredirect options specified in OPTIONS.ini. This is fixed.
15935: Fix for incorrect drawing routine in server jvm
Sun bug #6876276 has caused a problem in the drawing routine when using the server jvm in java version 1.6.0_14-1.6.0_17. Sun fixed the bug in version 1.6.0_18. The problem has been fixed in RTView with a work around, but it is not recommended that these versions of java be used for applications running on the server jvm.
Functions
15823: EEAS function no longer fails if parameter contains a comma
In the Display Editor, when defining a function of type Evaluate Expression and using the condExpr evaluator function, the result would be incorrect if a string argument to condExpr contained a comma. This has been fixed.
15863: A new function named Store Table in Cache has been added.
A new function named Store Table in Cache has been added. The cache is specified by name. A value of zero is returned if the named cache is not defined otherwise 1 is returned. The arguments for the function are as follows: Table - the table to be stored. Cache Name - the name of the cache in which the table should be stored. The cache must already be defined.
15898: Function GetDataServerConnectionStatus no longer null if no data
In previous releases, the GetDataServerConnectionStatus returned an empty table (no columns or rows) if no data server connections were defined. Now it returns a table with no rows but with all of the expected columns.
Object Library
15481: Tooltips for all non-flex graphs now are the same as flex graphs
The look of the mouseOver in the non-flex graphs has been improved. They are now consistent with the flex graphs and the non-graph objects. This change does not apply to the thin client.
Charts (General)
15921: New Status History Chart
A new graphical object named status history chart has been added. It appears on the Graphs palette in the Builder. It shows discrete status values as horizontal bars drawn against a horizontal time axis. The chart is intended to be attached to a data table that contains a status column and one or more index columns. One horizontal bar is drawn for each unique combination of index column values. The value of the status column is used to determine the fill color and fill style of the bar segment or cell at the corresponding time interval. A label appears at the right edge of each bar, containing the unique name that corresponds to the bar. A circular indicator also appears next to the label indicating the most recent status value for that bar. For example, consider a data table that holds time-based status information for nodes on a network. It has three columns: time_stamp, node_name, status The time_stamp column contains the timestamp for the row. The node_name string is unique for each node so it is used as the index column for the table. The status column contains either "up", "down", or "unknown". Here is an example of the contents for a network with 2 nodes: 12:00, Node01, up 12:00, Node02, up 12:01, Node01, up 12:01, Node02, down 12:02, Node01, up 12:02, Node02, up ... and so on ... This table could be attached to the valueHistoryTable property of the status history chart. The barProperties property would be configured to assign a fill color and style that corresponds to status=up (solid green, say) and another for status=down (crosshatch red, say) The chart would draw 2 horizontal bars, one for Node01 and another for Node02. Each bar would contain a segment or cell for each time interval the table for that node. Given the example table above, if the chart was observed at 12:03, each bar would contain 2 cells, one for the 12:00 to 12:01 interval and another for the 12:01 to 12:02 interval. The fill color and style of the cell would correspond to the status at the start of that interval, as determined by the barProperties property. Note that no cells would be drawn for the interval starting at 12:02, since there is no end point for that interval in the data table. Instead, the status value for the last data value is always used to control the fill color and style of the circular indicator that appears at the right end of each bar, next to the bar's label. The important properties of the status history chart are as follows. A. properties in the Data category: timestampColumnName: The name of the table column that contains the timestamp for each row. If blank, the chart will look for a column named "time_stamp" in the table and use that if found, otherwise if the first column in the table contains timestamp data, then it will be used. If still no timestamp column is found, then the current time will be used. indexColumnNames: The name of a column or multiple columns which can be used to uniquely identify which rows in the table should be plotted on the same horizontal bar. In the example above, node_name would be assigned to this property. If indexColumnNames is blank, the chart will assume that the table's second column is the index column. valueColumnName: The name of the column containing the status value used to determine the fill color and style of each bar cell. This column can contain a string, a number, or a boolean value. Its value will be compared to the barProperties property to find the appropriate fill color and style. If valueColumnName is blank, the third column in the table will be used. labelColumnName: The name of the column containing the string to show on the label for each bar. If blank, the label string will be composed by from the index column values for the bar. descriptionColumnName: The name of the column containing addition information for each row. This information will be included in the mouseover (tooltip) text shown when the mouse is over a bar cell (if the mouseOverFlag property is checked). If descriptionColumnName is blank, then no additional information is not included in the tooltips. valueHistoryTable: This property should be attached to a data table containing the historical data for the chart, if any. It should contain a timestamp column, index columns, and a value column as described above. When a data table is applied to this property, any previously plotted data is removed and the entire chart is replotted. Typically this property will be attached to the history table of a cache. valueCurrentTable: This property can be attached to a data table containing rows of current data for the chart. It should contain index columns, and a value column as described above. If it does not contain a timestamp column, then the current time will be assumed for each for in the table. When a data table is applied to this property, the data is assumed to be newer than any other previously plotted data is removed and is appended to it. Typically this property will be attached to the current table of a cache. maxNumberOfRows: The maximum number of rows of historical plus current data that the chart will maintain. Older rows will be discarded as necessary, which may cause bar cells to be removed from the left edge of the chart. B. properties in the Bar category: barHeightSpacing: The vertical distance, in pixels, between the bottom of each bar and the top of the bar below it. This must be an even number >= 2. barHeightFitFlag, barHeightMin, barLabelTextHeight: These properties are used together to determine the height of each bar. The minimum height of each bar, in pixels, is the larger of the barHeightMin property and the pixel height of the bar's label, which is approximately 1.9 * barLabelTextHeight. If the chart's plot area is not tall enough to display each bar at its minimum height, then a vertical scrollbar will appear to show the remaining bars. One the other hand, if the chart's plot area is taller than needed and if the barFitFlag property is checked, then each bar will be stretched vertically to fill the additional space. barCellBorderFlag: If checked, a vertical line is drawn between each cell of each bar. These lines correspond to the location of the data points that mark the start and end of each cell. Note that the lines may be evenly spaced, or not, depending on whether or not the data is updated at regular intervals. The color of the lines is determined by the gridColor property. barLabelBgColor: The background color of the label for the first (topmost) bar and every other bar below it. barLabelBgColor2: The background color of the label for the second bar from the top and every other bar below it. barLabelMaxLength: The maximum length, in pixels, for each bar label. If the label is longer it will be clipped. A value of zero indicates no maximum length. barOutlineFlag: If checked, each bar will be outlined in the grid color. barGradientStyle: Indicates whether a gradient should be applied when filling a bar cell. Note that this property is ignored for cells that have a fill pattern specified by the barProperties property. barProperties: This property is used to map each possible status value to a corresponding fill color and style. The property is configured from the Bar Properties dialog. A fill style can be solid or one of several patterns. A value of * can be configured to specify the fill color and style for any values that are not explicitly specified. C. Other properties. mouseOverFlag: If checked, a mouseover tooltip will appear when the mouse is over a bar cell or a bar label. Over a cell is, the tooltip will show information about the data row that corresponds to the left edge of the cell. Over a bar label, the tooltip will show information about the last (most recent) data row for that bar. drilldownColumnSubs: A drilldown can be performed by clicking on a bar cell or a bar label. If a cell is clicked, the drilldown substitutions will be set to match the data row that corresponds to the left edge of the cell. If a bar label is clicked, the drilldown substitutions will be set to match the last (most recent) data row for that bar. sortAscendingFlag: If checked, the bars are sorted alphabetically by their labels. If unchecked, the sort is in reverse alphabetical order. The chart defines a number of other properties that are common to the other graph objects. These have the same purpose as on the other graphs.
15942: Object selection no longer required for graph mouseover
The trend, spark, bar, pie, radar, stock and xy graphs have all been enhanced so that you no longer have to select the object in order to see the mouse over or cursor.
Fx Bar Chart
15976: drillDownColumnSubs and drillDownSelectMode properties added
The Interaction properties drillDownColumnSubs and drillDownSelectMode are now available in the Fx Bar Chart. Functionality is identical to the respective properties of the standard Bar Chart.
Heatmap
15922: Heatmap no longer requires object selection for mouseover
The heatmap has been enhanced so that you no longer have to select the object in order to see the mouse over text.
Trend Charts
15984: Drilldown/mouseover in thin client if resizeMode=scale now works
In the previous release, the drilldown and mouseover feature did not work on a trendgraph in the thin client if the display resize mode was "scale".
Security
15893: Display Server now calls getSubstitutions for each login
The Display Server will now call the custom user manager's getSubstitutions(String userName) method once for each login session. Previously, the method was only called once for each unique username, even if the same user logged out and back in from a different browser session. The new behavior allows the custom user manager to return a different set of substitutions for each user session.
Viewer
15772: New option to set default window title
The Display Builder, Display Viewer and Display Viewer Applet have been enhanced to support a new window title option. By default, window titles contain the name of the application followed by the display name. For example: RTView mydisplay.rtv The new Custom Window Title option on the General Tab of the Application Options dialog now controls the window titles. If specified, the Custom Window Title will be used, if not, the default window title will be used. This window title takes precedence over the title specified in your panel configuration file. The Window Title option in the Drill Down Properties dialog takes precedence over the Custom Window Title. To specify an empty window title, enter a single space in the Custom Window Title field. If this option is modified in the Display Builder, the new setting will only be applied to new windows. The titles of windows that are already open will not be changed. The custom window title can also be specified from the command line or applet parameter: command line: -customWindowTitle:myTitle applet: param=customWindowtitle value=myTitle
Viewer - Multi-Panel Frameworks
15906: Option to disable preload of tabbed panels added
The tabbed panel configuration file for the Viewer now supports an option to control the loading and unloading of displays in tabs. By default, the displays for all tabs are loaded at startup and are never unloaded. A new attribute named "preload" can be set to false on the TabbedPanel tag to change this behavior so that only the display for the first tab is loaded at startup and the display for a tab is unloaded when the user selects another tab. In other words, if preload=false then only one display at a time is loaded in a tabbed panel. Example: <?xml version="1.0" ?> <panels xmlns="www.sl.com" version="1.0"> <TabbedPanel title="Test of Tabbed Panel" placement="top" preload="false"> <RtViewPanel title="Table Overview" display="overview"/> <RtViewPanel title="Production Table" display="production_table"/> <RtViewPanel title="System Table" display="system_table"/> </TabbedPanel> </panels>
Version 5.5c1 Release Notes
Alerts
15157: $alertTime added to the list of alert variables
A new substitution, $alertTime, has been added to the Discrete Alert, Limits Alert and Multi State Alert. This substitution can be used in the actionCommand on the alert. The value of this substitution is the time that the alert was generated. This is the same value that is shown in the Time column of the Alert Table.
15833: Alerts now show a timestamp of the last data update
A new column, Last Update Time, has been added to the AlertTable. This column shows the date/time that the alert last received a data update. This column is updated whenever new data is received for active (ie. not cleared) alert. A new property, timeColumnName, has been added to the Discrete, Limits and Multi State alerts. If specified, the value in that column of the valueTable will be used for the Last Update Time instead of the time the alert last received data. The column specified in the timeColumnName property must be of type date or long. If the timeColumnName is not specified, is not found, or is not of type long or date, the time the alert received the data will be used instead of the column value. The timeColumnName property is only supported if the useTabularData flag is turned on. It is not supported for scalar alerts. For scalar alerts, the time the alert last received the data is always used.
15841: reNotificationMode added to alerts
A new property, reNotificationMode, has been added to the Alert category for Discrete, Limits and Multi State alerts. This property allows you to configure how your alert will renotify. The reNotificationMode property supports the following options: None - Do not renotify. The alertCommand is executed once when the alert is activated, then never again. Renotify on Timer - Renotify based on the value in the reNotificationTime property. The alertCommand is executed once when the alert is activated and then it is re-executed every reNotificationTime seconds until the alert is cleared or acknowledged. If the reNotificationTime is 0, the alert will not renotify. Renotify on Data Changed - Renotify when the input value changes. The alertCommand is executed once when the alert is activated and again when a different value is received until the alert is cleared or acknowledged. The new value must be different than the previous value for the alert to renotify. Renotify on Data Updates - Renotify when the input value is updated. The alertCommand is executed once when the alert is activated and again whenever a value is received until the alert is cleared or acknowledged. The new data value may be the same or different than the previous value for the alert to renotify. The default value is Renotify on Timer. Note that the reNotificationTime property is ignored unless the reNotificationMode property is set to Renotify on Timer.
Builder
15689: Jide components updated to correct crash with jdk 1.6
When running the Display Builder builder under JDK 1.6, the following exception might appear: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 2 at java.awt.Container.getComponent(Unknown Source) at com.jidesoft.swing.JideSplitPane.setDividersVisible(Unknown Source) ... This problem has been fixed by updating the Jide components to version 2.7.2.
Builder - Options Dialogs
15814: Cache Display Data tabs fixed to show correct content
In the Display Builder Caches dialog, if a given cache has both current and history tables, the Display Content dialog will have two tabs, one for each. However the tab labels were reversed from the actual contents of the tabs; this has been fixed.
Data Sources
15834: RTView Agent Data Adapter
An RTVAgent data adapter has been added to RTView. It accepts connections from remote agent applications. Once connected, agents can send data tables to the RTVAgent data adapter and objects can be configured with data attachments to those tables. Agents are written using the com.sl.gmsjagent package, also new in this release. The package is documented in the Customization section of the RTView Users Guide. An example agent can be found in the custom/rtvagent directory of the RTView installation. An agent can make either a direct socket connection to the RTVAgent data adapter, or it can make an http connection via the rtvagent servlet. The rtvagent servlet is also new in this release, and can be found in the servlets/rtvagent directory of the RTView installation. When it connects to the RTVAgent data adapter, an agent identifies itself by two strings: its Agent Class and Agent Name. The Agent Class should be globally unique (e.g. "MyCompany.AgentType1") while the Agent Name should be unique among agents with a given class (e.g. "Site 01", "Site 02", etc). When an agent sends a data table to the RTVAgent data adapter, it specifies a Table Name string. The table name should be unique among all tables that that agent sends (e.g. "ProductionTable", "SalesTable"). To attach an object property to a table received from an agent, the Agent Class and the Table Name (described above) must be specified in the RTVAgent data dialog. The object property will receive all tables from all agents with the matching Table Name and Agent Class. The Agent Name will appear as a column in the table. Typically, the valueTable property of a cache object will be attached to RTVAgent data, and the AgentName column will be specified as an index column for the cache. See the rtvagent example described above for a complete example. There is a predefined Agent Class named RTViewDs that supports one table named Agents. The Agents table contains a row for each agent that is currently connected. The columns in the table are: AgentName, AgentClass, Last Receive Time (the time at which a table was most recently received from the agent), Total Rows Received (cumulative count of table rows received from the agent), and Client ID (a unique number assigned to the agent connection, which is < 10000 for agents using a socket connection and > 10000 for agents using an http connection). The Options dialog in the Builder now has an RTVAgent tab. The options on that tab are as follows: - Enabled : This option enables the RTVAgent data adapter. If the option is unchecked, connections from agents will not be accepted. It is unchecked by default. - Port : The port on which the RTVAgent data adapter will accept agent connections. Note that only one application at a time can accept connections on a given port. The default port is 5665. Valid port numbers are greater than 1024. - Use SSL : If checked, a secure socket will be used for each agent that makes a direct socket connection to the RTVAgent data adapter. Data is encrypted before transmission over a secure socket. Note that this option does not apply to agents that connect indirectly via HTTP and the rtvagent servlet. For secure connections in that case, an HTTPS connection should be used from the agent to the rtvagent servlet. (It may be necessary to configure your webserver to support HTTPS connections, but that configuration is outside the scope of RTView). Changes made to the RTVAgent Options tab do not take affect until the options have been saved and the RTView application is restarted. The options are saved to the file named RTVAGENTOPTIONS.ini. The options can also be specified on the command line, as follows: -rtvagentoption:enabled=[false|true] -rtvagentoption:port=[port_number] -rtvagentoption:ssl=[false|true] If the port number is changed from its default value then the rtvagent servlet, if used, should also be reconfigured. The servlet.properties file, found in the servlets/rtvagent directory of the RTView installation, should be edited and the following line changed to specify the appropriate port: ServicePort=5665 Then the make_war script should be run and the rtvagent.war file should be redeployed.
JMS Data Source
15824: Crashes caused by data type changes fixed
In previous releases, the JMS data source would crash under 2 scenarios: 1. data for a message field or property initially came in with one data type, then came in later with a different data type 2. data for a message initially came in as a number or boolean type, then came in with a null value. This has been fixed.
15840: Duplicate JMS data in history cache removed
In prior releases, if the valueTable property of a cache had an attachment to JMS data with a row filter, duplicate rows might appear in the cache history table. This is fixed.
TIBCO Hawk Data Source
15612: Rounding of Hawk double types to 2 decimal places eliminated
In previous releases, Hawk MicroAgent return columns with the type double were rounded to 2 decimal places by the data source. This has been changed so that no rounding occurs. Most objects have a valueFormat property that can be used to round the displayed value. To revert to the previous behavior and round doubles in the data source, use the -hawkrounddoubles command line parameter.
Display Server
15800: Display Server now executes system commands if via Data Server
A bug which prevented the Display Server from executing system commands when it was connected to the Data Server has been fixed.
15868: thin client support for panel resize
The release note for 15784 describes the resize mode and anchor/docking features that were added to the Display Builder and Display Viewer in this release. These features are also supported in the thin client. The behavior in the thin client differs from the Display Builder/Viewer in the following cases: - When the initial display is opened in the thin client, the browser frame is not resized to match the display size as it is in the Display Viewer. Instead, in crop mode, the display will appear in its full size, and if the browser frame is larger than the display, unused space will appear below and to the right of the display, and if the browser frame is smaller than the display, scrollbars will appear. In layout and scale modes, the display will briefly appear in its default size, and will then resize to fit the browser frame size. This may also occur if another tab is opened in the browser and the browser is resized, and then the browser tab that contains the thin client is re-opened. - In layout and scale modes, after resizing the browser frame, table objects and Fx charts will revert to their original states. For example if the user has clicked on a column header in a table to sort the column, then after a resize the table will revert to its default sort. Likewise, if the use has scrolled in a table or an Fx chart, or resized the legend or zoomed in an Fx chart, then after a resize the scrollbars and legends will revert to their initial position and size. - When resizeMode = scale, there will be unused space in the browser frame. This is because in scale mode the display will only use the largest 4x3 rectangular area of the frame, to ensure equal scaling in both dimensions. The unused area will have the same color as the display background, but will not have a gradient fill.
Functions
15767: Extra reference appearing for function w/ empty include file
In the Display Builder Function dialog, the reference count for a function could become incorrect if: (1) the function is used more than once in data attachments to a given object, and (2) an include file is added or removed. This has been fixed.
Object Library
Composite Object
15843: Composites with labels are no longer drawn at wrong position
In previous releases, composite objects with labels were drawn in the wrong y position. This has been fixed. This fix will not break existing displays. The y position of composites in existing displays will be adjusted so the objects are drawn in the same location when opened in the new version of RTView.
15844: Composite borderPixels are no longer off by 1
In previous releases, the borderPixels property was not applied correctly to the composite object. The number of pixels drawn was one less than the number specified in the borderPixels property. This has been fixed. When a display with a composite created with a previous version of RTView is loaded into the new version of RTView, the number of borderPixels will be reduced by one so that the object will be drawn the same as it was in the previous version.
15845: Support for resizing composite objects added
A new property, resizeMode, has been added to the Composite category of the composite object. When set to Size to Display (default), the size of the composite is determined by the size of the display it contains, and the composite cannot be resized. If set to Layout, the composite can be resized and the objects in the composite display will be laid out according to their anchor and dock properties. If the resizeMode is set to Layout, the dock and anchor properties may be set on the composite so that it will resize during a window resize if the window resize mode is also set to Layout. If the window resize mode for the display containing the composite is set to Scale, the composite object will do a scale instead of a layout. Note that the dock and anchor properties should not be setup to stretch the composite object if the resizeMode is Size to Display. This will cause the object to toggle back and forth between stretched and not stretched when the window is resized in Layout mode.
Control Objects
11275: Text wrapping added to rectangular general objects
A new property, labelWordWrapMode, has been added to all of the rectangular objects on the General palette. If set to a value other than None, the text specified for the label property will be wrapped to fit the width of the object. The obj_rect_ilvs has a new valueWordWrapMode property that does the same for the valueString text. The labelWordWrapMode and valueWordWrapMode properties support the following values: None - don't auto wrap text Space - Whenever possible, only add line breaks at whitespaces. If a single word is longer than the object is wide, the line break will be added to the word so that the text fits within the width of the object. Space and Punctuation - Whenever possible, only add line breaks at whitespaces and punctuation characters. Supported punctuation characters are comma(,), period(.), semi-colon(;), colon (:), hyphen(-), question mark(?), asterisk(*), ampersand(&), greater than(<), less than(>), backslash(\), forward slash(/), pipe(|), plus(+), exclamation point(!), and at(@). If a single word is longer than the object is wide and none of these characters is in the word, the line break will be added to the word so that the text fits within the width of the object. The labelWordWrapMode is ignored in the following cases: labelTextPosX = Outside Right labelTextPosX = Outside Left labelTextPosY = Tab labelTextPosY = Title The valueWordWrapMode is ignored in the following cases: valueTextPosX = Outside Right valueTextPosX = Outside Left In those cases, the text will not be wrapped.
Fx Bar Chart
15603: barFitFlag property now supported
The Fx Bar Graph now supports the barFitFlag property found on the standard bar graph. The default for barFitFlag is ON (checked).
15826: Fx Bar labels now draw correctly
Value labels on bars that were scrolled off screen would still appear usually over the axis or margin areas. This has been fixed so that labels first check the scrolled status of their associated bars, and only draw themselves if those bars are visible.
Fx Trend Chart
15798: FX trend autoscale inconsistency corrected
The Fx trend graph will now use the yValueMin and yValueMax properties to determine the y axis range in the case where all of the y data values are zero, which is consistent with the behavior of obj_trendgraph02. In previous releases, the Fx trend graph would use a range of 0 to 100 in that case.
15799: Fx Trend chart label size in stripchart mode made consistent
In prior releases, the y axis labels on the Fx trend graph would sometimes be too small, when yAxisMultiRangeMode = Strip Chart and the y axis range changed dynamically. This is fixed.
15813: Log axis no longer stuck at 1 to 100 if any y values <= 0
A problem with the Fx trend graph, in which the log axis range would always be 1 to 100 regardless of the data values if any y values were <= 0, has been fixed. Note that y values that are <= are still not plotted, since the log of such values is not defined.
Object Grid
15591: Object grid bug for empty valueTable fixed
In previous releases, the object grid would not display the icons correctly if the valueTable was initially null then came in with only one column. This has been fixed.
RTView Display Panel
15784: Options to move/resize objects when panel is resized
RTView has been enhanced to support display layout options for window resize in the Display Builder and Display Viewer. Three window resize modes are now supported: 1. Layout. When the window is resized, the display is resized to fit the available space. The objects in the display are laid out according to their anchor and dock properties (see below). The window is not forced to maintain its aspect ratio. Objects that are not docked or anchored will move relative to their offset from the top left corner of the display. For example, if the object is centered on the display, the object will move 50% of the resize amount. If the object is centered at 3/4 of the display, it will move 75% of the resize amount. 2. Scale. This is the default for the Display Builder, Display Viewer and Display Viewer Applet. When the window is resized, the display and all of the objects in it are scaled to fit the available space. The window is forced to maintain its aspect ratio. 3. Crop. This is the default for the Thin Client. When the window is resized, the display stays the same size. If the window is bigger than the display, empty space will show around the display. If the window is smaller than the display, scrollbars will show up. The window is not forced to maintain its aspect ratio. All 3 of the above modes support zooming the display (right-click -> zoom). In both Layout and Scale modes, if the window is resized while the display is zoomed, the resize will further zoom the display. If Default is selected, the default window resize mode will be used. The default is Crop for the Thin Client, and Scale for everything else. In the Display Builder, the window resize modes are only applied to drill down windows. The main window of the Display Builder is always in crop mode. The application level window resize mode can be set in the General tab of the Application Options dialog or on the command line: -resizeMode:XXX Where XXX is layout, scale or crop. It can also be set in the applet parameter: parameter=resizeMode valid values = layout, scale and crop If the window resize mode is changed in the Application Options dialog in the Display Builder, the new value will only be applied to new windows that are opened. Windows that are already open will not change modes. The window resize mode can also be set on each display in the Background Properties dialog. If set to Default, the application level resize mode is used. Otherwise, the specified resize mode will be used for that display. Two new properties have been added to the objects in order to support Layout mode. 1. dock - Select one of the following options: None (default) Top Left Bottom Right Fill When the dock property on an object is set to one of the sides (Top, Bottom, Left, Right), it is moved to the specified side of the display and stretched to fill that side of the display. If the size of the display changes, the docked objects will stretch to fill the available space. For example, if the dock property is set to Top, the object will be moved to the top of the display and the width of the object will be changed to fill the width of the display. If the display is then made wider, either by changing the Background Properties on the display or by resizing the window in Layout mode, the width of the object will change to match the new width of the display. Multiple objects can be docked to the same side of the display. In this case, the first object is docked against the side of the display, the next object is docked against the edge of the first object and so on. When a display has multiple side docked objects, the object order controls how the dock layout is applied. The layout is applied to the object list from back to front. For example, if the first object in a display is docked to the top, and the second object is docked to the left, the first object will fill the entire width of the display, and the second object will fill the left side of the display from the bottom of the first object to the bottom of the display. When the dock property on an object is set to Fill, it fills the available space left in the display after all of the side docked objects have been positioned. When multiple objects in a display have the dock property set to Fill, those objects are laid out in a grid in the available space. By default, the grid has one row and as many columns as objects. You can change the grid rows and columns in the Background Properties dialog. If both are set to 0, the default will be used. If both the rows and columns are specified, the row value is used and the number of columns is calculated based on the number of objects. If the row value is 0 and the column value is specified, the number of rows will be calculated based on the number of objects. The objects are laid out left to right, top to bottom according to the order of the objects in the display. The objects with the dock property set to Fill are always laid out after all of the other docked objects. Once an object is docked, there are some limitations on how you can modify that object in the Display Builder. You can no longer move it by dragging or changing objX and objY in the property sheet. Side docked objects can only be resized toward the center of the display (ex. if the object is docked to the top of the display, it can only be resided to be taller). Fill docked objects cannot be resized at all. You cannot resize any docked objects using the objWidth or objHeight properties in the property sheet. You must drag on the valid resize handle to resize it. It will not be moved by Align or Distribute. Objects can be aligned against a docked object, but the docked object will not be moved to align against another object. Docked objects are ignored by Distribute. Note that when an object is docked, the objX and objY along with objWidth or objHeight on object is changed. For example, you instance a General object from the palette. The properties of the object are as follows: objX:250 objY:250 objWidth:64 objHeight:48 When you set the dock property to Top, the properties are modified as follows: objX:368 objY:520 objWidth:736 objHeight:48 (no change) If you then change the dock property to Left, the objWidth isn't changed, but the objHeight stays the same, so the object fills the entire height and width of the display. When you change the dock setting to None, these properties stay the same. Only objects that support the objWidth and objHeight properties have the dock property. 2. anchor - Select none, one or more of the following options: Top Left Bottom Right The anchor property is only applied when the display is resized either by changing the Background Properties on the display or by resizing the window in Layout mode. The anchor property anchors the specified side of the object to the same side of the display. When the display resizes, the number of pixels between the specified side of the object and that side of the display remain constant. If an object is anchored on opposite sides (ie. Top and Bottom or Left and Right), the object will be stretched to fill the available space. Only objects that support the objWidth and objHeight properties support anchoring on opposite sides. If an object has the dock property set, the anchor property is ignored. The composite object supports both dock and opposing anchor sides, but does not behave like other objects if the resizeMode is set to Size to Display. In this case, the composite size is controlled by the size of the display that it contains, so any changes to the width or height of the object result in the composite moving, not resizing. The composite object should not be docked if the resizeMode is set to Size to Display.
Version 5.4c1 Release Notes
Alerts
15425: Discrete alert now supports non-string input values
In previous releases, the discrete alert would not work if the input value was not a string. This has been fixed.
15590: Add Alert dialog upgraded
In the Display Builder, the Alerts dialog has been improved so that the Add button invokes a popup dialog with fields for the new object name and a drop-down list for its type, and the Copy button invokes a popup dialog with a field for the new object name. Both these dialogs verify that the new name is unique and warn if it is not.
Builder
15627: Data attachment string in Data Display dialog now scrollable
In the Display Builder, the Data Display dialog shows the data attachment string in a field above the data table. This field has been made scrollable horizontally to accommodate long strings.
15690: Dock to Bottom now default for Non-graphic dialogs
In the Display Builder the dockable dialogs Alerts, Caches, Functions, and Local Vars have been given a default initial state of "docked" instead of "floating". This means that if you reset the window layout (via the Tools menu) then the first time you invoke one of those dialogs it will be docked in the bottom dock site, where previously it would have been floating.
15723: Data display dialog now processes subs correctly
In the Display Builder, when using the Data Display dialog to view a data attachment, the dialog will now properly display data attachments containing substitution variables.
Builder - Editing
13726: Support for copying alerts, caches, and functions added
In the Display Builder, there are three dialogs that manage non-display objects: Alerts, Caches, and Functions; some improvements have been made to the way these dialogs operate: 1. When the selection is moved to an Alert or Cache in its corresponding dialog, the previous selection (e.g. in the display area) is cleared. This is now true of Functions as well. Also, changes of selection among the three dialogs and the display area are now recorded in History and Undo/Redo can be applied to them. Note that when the selection is moved to one of the dialogs it will be invoked as needed. 2. The Delete operation (via menu, toolbar, or keyboard key) now works with functions. 3. The Copy (Ctrl-C) and Paste (Ctrl-V) operations can now be used with Alerts, Caches, and Functions as well as display objects. Note the following: (a) Alerts, Caches, and Functions cannot be pasted into the same display from which they were copied; this operation has no effect. (b) To create a copy in the same display, use the Copy button on the respective dialog; note this does not copy to the clipboard. (c) If one of these objects is pasted into another display that already contains a corresponding object of the same name, the user will be prompted for a new name (and must enter one). (d) A copied-and-pasted object will have the same data attachments as its original.
Builder - Property Dialogs
15696: Select Columns Dialog now resizeable
The Select Columns Dialog is now resizeable, allowing wider column names to be displayed without the need for scrolling. Longer lists of column names can be displayed.
15774: editing issues with obj_rect_ilvs +obj_circ2d_ilvs valueVisFlag
In previous releases, the valueVisFlag property of obj_rect_ilvs and obj_circ2d_ilvs toggled the visibility of the label properties instead of the value properties. If the valueVisFlag and labelVisFlag were not the same, it was difficult to enter property values for any objects in the same display. These problems have been fixed.
Commands
14454: SNMP command dialog now supports substitutions
In the Display Builder, the Define SNMP Command dialog (invoked from the Define System Command dialog) has been enhanced to allow substitution variables for the following fields: Destination Address, Destination Port, Community Name, Enterprise OID, and if enabled, Specific Trap. Note that now the variable values are not checked for correctness at command definition time, but rather at command execution time, after substituting the values of any variables.
Data Historian
14803: Can now set substitutions in Historian and Data Server GUIs
It is now possible to add and edit substitutions directly in the Historian and Data Server GUIs.
14943: Data compaction options implemented for aged historical data
RTView has been enhanced with a new historian compaction feature. The Historian allows archival data to be compacted in three ways: 1. Retention: Data may be maintained up to a certain age and then removed once the data is older than a specified length of time. This is similar to the older retention feature. 2. Aggregation: Data may be compacted so that as the rows of data in the archive age they are aggregated. The user may define how the aggregation should occur and on what. E.g. a user could choose to compact the data rows older than one week to be combined into a single row and held for a further month before being aggregated further. 3. Displacement: Data may be displaced so that all data in the table is moved to a separate table based upon a time period. E.g. every 24 hours the data is moved to a renamed table and the main table is flushed to refill again. Various options are available to aggregate the data so that it can derive totals, averages, minimums, maximums or counts on a column by column basis. The data may be compacted in place or compacted into separate tables based on age. The compaction rules are defined using the compactionType property of a cache object that is being used to configure the historian. If you are licensed to use compaction you will have the choice of "none", "aggregate", or "displace". Depending on which you choose, other properties with associated dialogs for defining rules are available. Limitations: GroupByType "count" is only supported for columns of data type integer, and groupByType "average" is only supported for columns of data type double. Alternate tables for Historian compaction do not support -smoothcompaction. Compaction of boolean data columns is not supported for PostgreSQL, as compaction output does not support "true"/"false" for booleans.
15765: NPE in attachHistObjToCacheNode
In the previous release, the Data Historian would throw a NullPointerException when loading a configuration file containing a cache object whose historyTableName property was non-blank and whose indexColumnNames property was blank. This is fixed.
Data Sources
Cache Data Source
14486: Cache Data source GUI
In the Display Builder, the way Cache Data Source objects are added and configured has changed. Instead of seeing cache objects as visible rectangles in the display, they will be shown in a new Caches dialog. When a cache object is selected in the table its properties may be edited in the Object Properties dialog as before. Cache objects may be added, removed, and copied by means of the buttons at the bottom of the display. By default the table of cache objects will include only those found in the display currently being edited. But if "List All Caches" is checked, the table will include cache objects found in cache definition files and include files. Note that cache objects not in the current file will not be editable. If the Display Content button is clicked and the selected cache has a data attachment, a popup dialog is invoked to display the contents of the cache tables. If there is no history table (maxNumberOfRows = 0) then only the current table is displayed; else both the current and history tables are displayed in a tabbed dialog. Note the following: a cache object's data tables are only created when the file containing the cache object is registered as a cache definition file via the Application Options dialog, and changes to those tables (such as enabling the history table) only take effect when the cache definition file is refreshed. This has the following implications for displaying the content of a cache object: - if the file being edited is not a cache definition file there will be no content to display, and the Display Content button will be disabled. - if the file being edited contains a cache of a given name and another file registered as a cache definition file contains a cache object of the same name, Display Content will display the data tables of the second object even though the first object is selected. Note that having two cache objects of the same name in different files may lead to unpredictable results and should be avoided.
15727: Adding cache with missing name causes builder crash
In the Display Builder, if you have a cache definition file containing a Cache DS object that does not have a cache name, you will get a warning message saying the cache object will not be loaded. In the previous release you would also get a Java exception message and would not be able to open other files; this has been fixed.
15760: ConcurrentModificationException from the cache datasource
In prior releases, a ConcurrentModificationException could occasionally be thrown by the cache data source. This is fixed.
JMX Data Source
15337: Connection properties now configurable per connection
It is now possible to add properties to each JMX connection individually.
15732: Trailing space no longer causes error in Attach to Data dialog
An issue was fixed in the JMX Attach to Data Dialog that could result in erroneous red field names.
SQL Data Source
15413: Query timeout & ID supported
Several features have been added to the SQL data adapter: 1. A column named "Last Query Status" has been added to the Keys table of the built-in RTViewDs database. 2. A column named "Query ID" has been added to the Keys table. 3. A timeout can be specified for each SQL query. 4. An ID string can be specified for each SQL query. 5. The "Columns" field and "..." button in the "Attach to SQL Data" dialog are now functional when the RTViewDs database is selected. Details are provided below. 1. The Keys table in the RTViewDs database provides detailed timing and count information about each unique data attachment. The new "Last Query Status" column contains a string indicating the status of the most recently completed execution of the query. The possible values of this column are: <blank> : The query has not yet been executed. OK : The query executed successfully. no query : The query string is blank. error : An error occurred while executing the query connection failed : The connection to the database was lost. no connection : The database connection is undefined or invalid. timeout : The query timed out. 2. The Keys table now contains a Query ID column. By default this column is blank. A query ID string can be specified for each SQL query (see #4 below). The column will contain that string, if any. 3. A timeout for an SQL query can be specified by checking the "Enter SQL Query" checkbox in the "Attach to SQL Data" dialog, and prepending the following text to the beginning the SQL query: rtvTimeout=NN; Where NN specifies the timeout interval in seconds, for example: rtvTimeout=20; select * from MyTable A substitution string can also be specified: rtvTimeout=$timeout; select * from MyTable Note that a semicolon must immediately follow the timeout value. When a query with a timeout is invoked by the SQL data adapter, then on each subsequent update cycle (2 seconds, by default) the data adapter will check if the query has completed and if not, it will check if the timeout has expired. If it has, the query will be canceled and an error message will be printed to the RTView console, for example: ERROR: SQL query timeout after 20 seconds; db=MyDatabase; query=<select * from MyTable> The status of the query will be set to "timeout" and an empty table will be applied to the objects that are attached to the query result. In addition, the query will not be executed again for at least the length of the timeout interval. For example, if the query is configured to run every 60 seconds and the timeout is 120 seconds, then after a timeout the next query will occur in 120 seconds, not 60. 4. An ID for an SQL query can be specified by checking the "Enter SQL Query" checkbox in the "Attach to SQL Data" dialog, and prepending the following text to the beginning the SQL query: rtvID=S; Where S specifies the timeout interval in seconds, for example: rtvID=MyTable Query 1; select * from MyTable A substitution string can also be specified: rtvID=$table Query; select * from $table The ID string has no effect on the execution of the query. The ID string appears as the value of the Query ID column in the Keys table of the RTViewDs database, as described in #2 above. The ID string will also appear in any error messages issued by the SQL data adapter that involve the query. The ID string must be terminated with a semicolon. The ID string cannot contain a semicolon (;) or equals (=) character. Both a timeout and a query ID can be specified for a query, using the syntax described above. For example: rtvTimeout=120;rtvID=MyTable Query 1; select * from MyTable The timeout and ID parameters can be specified in either order. But the semicolon is required after each parameter.
StreamBase Data Source
15461: New option to filter at the subscription level
The RTView StreamBase Data Adapter has been enhanced to implement the StreamBase feature called "Filtered Subscribe". This feature allows subscriptions to an output stream to include a "logical stream name" and filter expression that will be applied on the server to each tuple before it is sent to the client. Only tuples that pass the filter will be sent on that logical stream, thus reducing the amount of data sent to the client. The StreamBase Data Adapter implements this feature by enhancing its "stream list" to include logical streams and filter expressions. When the Adapter connects to a StreamBase server, it gets the list of available streams, and then uses its stream list to control which subscriptions it makes, as follows: - If there is no stream list at all, then the Adapter subscribes to all streams. - If there is a stream list, then the Adapter only subscribes to streams on the list. - With the current enhancement, the stream list may include one or more logical streams for any given physical stream; in which case the Adapter does not subscribe to the physical stream, but rather subscribes to the logical streams with the filter expressions as specified. Note: if it is necessary to subscribe to the physical stream as well as having one or more filtered streams available, then use row filtering in the RTView data attachments. In the Display Builder, the StreamBase section of the Application Options dialog has been enhanced to include logical streams and filtered subscriptions as follows: - The "StreamBase Streams" tab is now used to configure physical streams, logical streams, and filter expressions. The History Streams and Simulated Streams lists have been moved to a new tab, called "StreamBase History Streams". - The Streams tab presents a tree view of the stream list and a text area for editing filter expressions. Physical streams may be added at the first level of the tree, and logical streams may be added as branches to a physical stream. - To add a physical stream click the Add Stream button. A text field will appear for entry of the stream name. When you press Enter in the text field the stream will be added to the list. - To add a logical stream, select a physical stream and click the Add Logical Stream button. A text field will appear for entry of the stream name. When you press Enter in the text field the stream will be added to the list. - To add a filter expression select a logical stream and edit the filter expression in the text area. - To remove a physical or logical stream celedt it and click the Remove button. Note that when you apply changes in this dialog, the StreamBase Data Adapter will close and reopen all its connections and reinitialize its data structures, so that the changes will be immediately applied. Previously some StreamBase settings would only be applied when the Display Builder was restarted. For a complete description of the filter expression syntax please consult the StreamBase documentation. As an example, consider a stream named "order_output" containing stock purchase information that has a field "symbol" containing stock symbols. To create a logical stream "order_output_ibm" that includes only purchases of IBM stock, use the filter expression "symbol == 'IBM'". (Note string values are enclosed in single quotes). Note that RTView substitutions configured via the Substititions tab of the Application Options dialog may be used in filter expressions.
TIBCO Hawk Data Source
15378: Name of failed hawk transport now in console messages
The hawk connection name is now included in the ConsoleInitializationException error messages.
15585: Invoke Methods Before Subscribe option added
The Invoke Methods Before Subscribe option has been added to the TIBCO Hawk Methods and Alerts tab in the Application Options dialog. By default, this option is selected. When selected, RTView will invoke synchronous microagent methods before subscribing to them for data attachments. This will make the data for these data attachments available immediately after the data attachment is made instead of waiting for the first update from the subscription. This option can be disabled either from the TIBCO Hawk Methods and Alerts tab in the Application Options dialog, or by using the following command line or applet parameter: command line: -hawknoinvoke applet: param = hawknoinvoke value = true See the TIBCO Hawk documentation for your microagent method to determine whether or not it is synchronous. Data attachments to asynchronous methods are not affected by this option.
15588: Hawk Group information included in RTViewDS
A new table, getGroupData, has been added to the Hawk RTViewDs simulated microagent. This table contains group information for each agent. This table contains the following columns: Agent - the name of the agent GroupName - the name of the group containing the agent ConnectionName - the name of the connection for this agent DSName - the name of the agent including the connection name if it is not on the default connection Since an agent may be in multiple groups, a single agent may show up multiple times in this table, once for each group that contains it. The group information is useful when caches are used to store Hawk agent information for applications that organize or aggregate their Hawk agent information using groups.
Display Server
15743: thin client crash on dd if table cell ends in \
In prior releases, a javascript exception would occur in the thin client if a drill down was performed to a display containing a table with a string cell that ended in a backslash. This is fixed.
15816: Scrollbar no longer visible when graph is invisible
Prior to release 5.4c1 in the thin client, if a trend graph or bar graph with a scrollbar is made invisible the scrollbar remains visible. This is fixed.
Functions
15088: Apply button added to Edit function Dialog
In the Display Builder, the Edit Function dialog now has an Apply button. which will apply the values currently in the dialog without closing it.
15427: replace value function fails if extra space is in the token
The Replace Value function takes a Replacement Values argument which is a string that contains pairs of values and replacement values separated by ":". Each pair of value and replacement value is separated by a space. Previously this was required to be exactly one space, but now multiple spaces are allowed.
15533: New Join Outer function
The Join Outer function performs an outer join of the Left Table and the Right Table on the columns specified in the Left Column Name and the Right Column Name fields. The joined table will contain all columns from the Left Table followed by all columns from the Right Table, and will contain all rows where the value in the Left Column exactly matches the value in the Right Column, plus additional rows according to the Outer Join Type, which may be "left", "right", or "full". In a left outer join, the result table will include all the rows from the left table; in a right outer join it will include all the rows from the right table, and in a full outer join it will include all the rows from both tables. In any row where there is no match for the join column value, the cells from the other table will contain null values. (Null values will be represented as blank for strings, 0 for integers and longs, NaN for floats and doubles, and NULL_DATE for dates.) Left Table - The first table to be joined. Right Table - The second table to be joined. Left Column Name - (Optional) The column in the left table to be joined with the column specified in the Right Column Name field. If this field is left blank, the row name, up to the first : if it contains a :, will be used instead of a column value. Right Column Name - (Optional) The column in the right table to be joined with the column specified in the Left Column Name field. If this field is left blank, the row name, up to the first : if it contains a :, will be used instead of a column value. Outer Join Type - Specified as "left", "right", or "full", which may be abbreviated to their first letters. If this field is left blank a full outer join will be performed. This function returns a table.
15619: Function usage count is now correct for functions with filters
In the Display Builder, if a display object were attached to a function and a row filter were added to the data attachment, the Uses value in the function dialog would be incorrect: it would show twice the number of actual uses of the function. This has been corrected.
15624: Convert Columns function now handles the DATE type
The Convert Columns function, when given an input column of type Date to convert to a valid output column type, would fail to perform the conversion and would not issue an error message. This has been fixed; the conversion will now be performed correctly. Output columns of type String will show the string representation of the input date value, and all other output types will show the result of converting the date value first to Long and then to the specified output type.
15625: Delta Rows Function now supports the DATE type
The Delta Rows function will now compute delta for columns of type Date. The resulting delta column will be of type Long and contain time deltas in milliseconds.
15658: Group By Time and Unique Value Bug fixed
The Group By Time And Unique Values function could show an extra row under some circumstances. This has been fixed.
15666: Display Result button added to Functions dialog
The Display Builder Function dialog has been enhanced with a "Display Result" button that will bring up a dialog showing the result of executing the function.
15667: References button added to the Function dialog
The Display Builder Function dialog has been enhanced with a "References" button that will bring up a dialog listing all the objects that directly reference the selected function. You may choose an object in that list and it will be selected according to its type. Selecting a display object will highlight the object in the drawing area. Selecting a function, alert or a cache will bring up those dialogs with the designated object selected.
15668: Edit Referenced Functions from Edit Function Dialog
In the the Edit Function dialog, when you are editing a function whose argument refers to another function, you can now go edit that function without leaving the dialog. When you right-click an argument that contains a reference to a function, an additional item "Edit Function" will appear in the popup menu. If you select it, the Edit Function dialog for that function will replace the current Edit Function dialog. If you have unsaved changes you will be prompted to save or discard them, or cancel the operation. In addition a button "Back" will appear in the Edit Function dialog that will take you back to the function you were previously editing.
15669: obj_function moved from gmsjmodels to gmsjrtview package
The obj_function class has been moved from the com.sl.gmsjmodels package to the com.sl.gmsjrtview package. Users with custom classes referencing this object will need to modify their code accordingly. Users without any custom code do not need to make any changes - the functions in their displays will continue to work as they did before.
15722: Lay out of buttons on dockable tabular dialogs more intuitive
In the Display Builder, the Functions, Caches and Alerts dialogs have been enhanced so they will organize their buttons appropriately depending on how they are docked. For example if they are docked vertically they will lay out their buttons on multiple rows.
15724: Warn about missing function descriptors
In the Display Builder when working with custom functions it is possible to open a display which uses a custom function but not have the function's definition available. This can happen for example if the Java class file containing the function definitions (e.g. MyFunctionHandler.class) is missing. In this situation the Display Builder has no information about the number or type of the custom function's arguments, and if the display is saved, the function will be saved with no arguments, and any previous argument information will be lost. In addition the function is not editable; in the Edit Function dialog it would be shown with an incorrect function type and no arguments. In this situation, the Display Viewer and Builder will now warn with a message to the console, and the Display Builder will warn with a message dialog. And in the Function dialog, the only buttons enabled when the function in question is selected are Add and Remove.
15775: Empty String Sub again being passed from controls
In releases 5.1 through 5.3, if the value property of a control object was an empty string and $value was used as the value of a substitution in the control's drilldown command, the substitution was not set by the drilldown. This has been fixed.
General
15766: Current table now clears when attached table is empty
If a data table with no rows is applied to the valueTable property of a cache with no index columns defined, the contents of the current table should be cleared. However, in release 5.3, the current table was unchanged. This is fixed. (Note that a cache which does have index columns defined will continue to ignore an empty table, which is the correct behavior).
GmsTabularData
15709: Sorting of tabular data by row names has been optimized
The CPU time required to add or update rows in a large table of Rendezvous or Hawk data has been reduced.
Object Library
15000: mouseOverText property now provided on all objects.
The new mouseOverText property in the Interaction category allows you to specify a tooltip to show when the mouse passes over an object. The mouseOverText property has been added to all of the objects except obj_text01 and obj_datechooser on the following tabs of the Object Palette: General Labels Meters Scales Indicators Controls Links Text with multiple lines should use \n to delimit the lines. Objects must have the visFlag on (and for links the iconVisFlag on) in order for the tooltip to draw. In the Display Builder, Display Viewer and Display Viewer Applet, for non-control objects, the tooltip is positioned relative to the center of the object, and will draw in black text with a white background. For control objects, the tooltip is drawn in the standard swing JToolTip, so it will follow the look and feel for the system where it is run. In the Thin Client, the tooltip is drawn by the browser, and will use the browser specific look and feel. Limitations in the Display Builder, Display Viewer and Display Viewer Applet: 1. For all non-control objects, if multiple objects with mouseOverText overlap and the mouse is positioned on the overlapping area, the mouseOverText will display for both. 2. For all non-control objects, the tooltip is drawn as part of the object. Therefore, if another object is on top of it, the mouse over will be drawn behind that object. To change the position of an object in the stacking order, right-click on it and select Order->Move to Front or Order->Move to Back. 3. In the main Display Builder window, the tooltip may be clipped if it is too close to the top-right edge of the display or if it is in a composite and too close to the edge of the composite. 4. The tooltip on an object in an object grid may be partially obscured by the scrollbar of the object grid if it is too close to the right edge. Limitations in the Thin Client: 1. Multi-line mouseOverText is not support for radio button controls. 2. Non-static mouseOverText is not supported for radio button controls. 3. Since Firefox does not support multi-line tooltips, it will replace any returns in the mouseOverText with spaces.
Control Objects
15618: Edit box shows but won't parse 1000s separator
In release 5.1 and 5.2, the thin client would automatically insert a comma as the thousands-separator in an integer- or double-type edit box (obj_c1textedit_i and obj_c1textedit_d), but the display server would not parse numeric values correctly if they contained commas. In this release, the thin client will not automatically insert commas as the thousands- separator.
Fx Bar Chart
15502: Fx Bar Chart Data Label Properties added
Three new properties have been added to the Fx Bar chart. These are: labelColumnName rowLabelVisFlag rowNameVisFlag These properties work exactly the same as those of the standard bar graph.
15561: Data now displays when no row names found
Previously the Fx Bar Chart would not display data if row names were not available. This has been fixed.
15562: FX Bar Chart column clumping bug fixed
A bug was fixed that caused columns to appears clumped to one side when data was changed.
15600: Fx Bar Chart Bars Draw order switched
When in horizontal mode, the bars will now draw from top to bottom, rather than from bottom to top.
Fx Trend Chart
15367: yAxisMultiRangeMode now supported
The Fx trend graph (obj_fxtrend) now supports the yAxisMultiRangeMode property. The supported modes are: Off, Multiple Axis, Strip Chart, and Stacked. These modes have the same behavior as in the standard trend graph (obj_trendgraph02). The yAxisMultiRangeMode property supersedes the yAxisMultiRangeFlag property. For Fx trend graphs on existing displays, a yAxisMultiRangeFlag value of zero (unchecked) will be converted to yAxisMultiRangeMode = Off, and a yAxisMultiRangeFlag value of one (checked) will be converted to yAxisMultiRangeMode = Multiple Axis. In Strip Chart and Multiple Axis mode, a separate vertical axis is drawn for each trace. The axis for traceN is drawn using the color assigned to the traceNColor property. If the yAxisShowTraceLabelsFlag property is checked, each axis will display the label assigned to the trace in the traceNLabel property. The yAxisThickness property is ignored in these modes, the width of each axis is 2 pixels. For better performance when scrolling in a graph with many points, yAxisShowTraceLabelsFlag and traceNLineShadowFlag should be unchecked. There are a few differences in the yAxisMultiRangeFlag behavior between the standard trend graph and the fx trend graph: 1) The standard trend graph supports an additional yAxisMultiRangeMode named Classic, but this mode is not supported in the Fx trend graph. If Classic mode is selected in the fx trend graph's property sheet, Multiple Axis mode will be used instead. 2) Both graphs support the yAxisPosition property, but in the standard trend graph the 'inner' settings cause the axis labels to be drawn inside the trace area, while in the fx trend graph the inner settings only change the location of the tick marks relative to the vertical axis. 3) In strip chart mode in the fx trend graph, some labels on the vertical axes may be dropped if the strips are not tall enough to display the labels without overlapping. To avoid this, choose a smaller value for yAxisMajorDivisions.
15571: Paste All Properties from Trend Graph to Fx Trend now works
A problem in the Display Builder has been fixed which prevented alarm properties from being pasted to an Fx trend graph during a Paste All Properties operation.
15576: Fx Trend Graph Multi-trace Tabular data support
The Fx trend graph has been enhanced so that multiple traces can be plotted from a single data table. This can be convenient cases where a data source provides a data table with a single timestamp column and multiple Y data and label columns. A new property named multiTraceTableFlag has been added to the Trace category. It is unchecked by default. When checked two new properties named multiTraceCurrentValueTable and multiTraceHistoryValueTable are shown in the Trace category. Each of these properties can be attached to a data table. The first column in the data table must be a timestamp column. The remaining columns are expected to either be numeric data values to be plotted, or string values to be used as data labels (data labels are described in 15648). The Nth numeric column is used for trace N's data and the column name is used for traceNLabel (if not already assigned). Similarly, the Nth string column is used for traceN's data labels. If the multiTraceTableFlag is checked, then the number of traces whose properties are shown in the Builder's property sheet is determined by the the number of data columns in the data table attachments or by the traceCount property, whichever is larger. However, the number of traces that will be plotted on the graph is determined by he number of data columns in the data table attachments. Typically, the data attachment for multiTraceHistoryValueTable provides the initial data points to be plotted (e.g. from a SQL attachment with Update Mode = On Demand, or a Cache attachment with Update Once checked) while multiTraceCurrentValueTable provides the new data points to be plotted while the display is viewed. If a trace plots only historical or only current data, then only one of the properties needs to be attached to data. However if both properties are attached to data, be sure that the tables applied to both have the same number and type of columns. When multiTraceTableFlag is checked, the properties named traceNValueTable and traceNValue (for N = 1 to 8) are not shown in the property sheet, since all trace data is expected to be provided via multiTraceCurrentValueTable or multiTraceCurrentValueTable.
15602: New alarmGlowFlag property added to Fx Trend Chart
A new property named alarmGlowFlag has been added to the Fx trend graph. The property is unchecked by default. If it is checked, then a glow effect will appear around the border of the graph if an alarm or warning limit has been exceeded. The border will glow the in color of the activated alarm color, as described below. The visibility and the color of the glow is based on trace points which are currently visible. If multiple visible points have exceeded an alarm or warning limit, whether they are on the same trace or multiple traces, the glow color will be chosen in this order of priority: HighAlarm, LowAlarm, HighWarning, LowWarning. If no visible points have exceeded any limit, the glow is invisible. For strip charts, each chart will have its own glow.
15648: Data labels now supported
The Fx trend graph has been enhanced to allow a string to be associated with each point on a trace. These strings are known as data labels. If the traceNValueTable or traceNValue property is attached to a table and the table contains a string column (in addition to the required timestamp and Y data columns), then the string from that column will be used as the data label for the corresponding data point. This feature is also supported in the multi-trace table feature (15576), where the Nth string column in multiTraceHistoryValueTable or multiTraceCurrentValueTable will be used for the data labels for trace N. The data label for a point is shown in the popup data tip which appears when the mouse is positioned over a trace point. The data label appears after the point's value, and is enclosed in parentheses. Note that this feature is not supported for scalar attachments to traceNValue.
15649: Fx trend graph supports event and bar traces
The Fx trend graph has been enhanced to support event and bar traces, in addition to the traditional line traces. A property named traceNType has been added the Trace N category (for N = 1 to 8). The valid values for traceNType are Line (the default), Bar, and Event. A Bar type trace draws a vertical bar for each data point, from zero to the point's Y value. The bar is simply a vertical line whose width is determined by traceNLineThickness. The traceNLineColor and traceNLineStyle also control the appearance of the bar. If the point exceeds an alarm limit specified on the graph, the alarm color is used for the bar color. If traceNMarkStyle is set to any value other than None, the mark is drawn at the end of the bar. For an Event type trace, no line is drawn. Instead, a small rectangle containing a single text character is drawn for each data point. The character is the first character of the corresponding data label (see E15648) if any, otherwise it is the first character of the trace label. The traceNColor property determines the color of edges of the box and the text character, unless the point exceeds an alarm limit specified on the graph, in which case the corresponding alarm color is used. The box's fill color is set to traceNMarkColor or the appropriate alarm mark color, if any. However, if the mark color is the same as the color used for the box edge and text, then traceBgColor is used as the box fill color instead. Each event box is positioned vertically according to the Y data value for the corresponding data point. However, if traceN is attached to a data table that provides data labels but no Y data values, then an Event trace is plotted regardless of the traceNType setting. The event boxes will all be drawn near the bottom of the trace area.
15652: Fx trend support for trace point drill down added
The Fx trend graph has been enhanced to support drill down from a trace point. If the graph's drillDownTarget is set, then the following predefined substitutions will be set on drill down from a trace point: $traceNumber : number of the trace (1 to 8) that contains the selected point $traceLabel : label of selected trace $pointValue : y value of point $pointTimestamp : timestamp of point $pointLabel : data label (if any) of point $pointIndex : position of point in trace data (0 to maxPointsPerTrace) Mouse clicks on the graph that are not near a trace point are ignored.
15653: Fx trend graph Trace Groups
The Fx Trend Graph has been enhanced to support trace groups. A trace group is a collection of 2 or more traces, and is useful for: - identifying multiple traces that should share one vertical axis, in strip chart or multi-axis modes. - identifying 3 traces to be combined as a banded trace. A new category named Trace Groups has been added to the Fx trend graph's property sheet. By default, the category contains a single property named traceGroupCount with a default value of zero. Legal values are 0 - 5. If nonzero, then the following properties appear in the Trace Groups category, for each groupN, where N is 1-5: traceGroupNTraceNumbers: A comma-separated list of the traces that belong to the group. If the trend graph is in strip chart mode or multi-axis mode, all the traces in the group will share the same axis/strip. traceGroupNBandedFlag: If this property is checked, the group is expected to have 3 traces. The plot area beneath the 1st trace in the group (the low band trace) will be filled, the 2nd trace in the group (the value trace) will not be filled, and the area above the 3rd trace (the high band trace) will be filled. The color of the axis for a group is determined by traceNLineColor of the first trace in the group. The label for the axis is also determined by traceNLabel of the first trace in the group. In Mutli Axis mode it may not be visually obvious which traces belong to which groups, unless you assign a similar line color or style, or mark color or style, to all the traces in a group.
15700: yAxisColor now sets color of all Y axis labels
On the Fx Trend Graph, the yAxisColor property now sets the color of all Y axis labels, regardless of the yAxisMultiRangeMode setting. Note that if yAxisColor is set to Default, then the axis label color is determined by the labelTextColor property. This behavior is unchanged from prior releases.
15710: Most recent y value shown in legend if cursor not active
On the Fx Trend Graph, the legend entry for each trace will show the most recent Y value for the trace when the cursor is not displayed on the graph.
15716: legendTimeFormat implemented for Flex trend chart
The property legendTimeFormat has been added to the Fx trend graph. This property controls the formatting of time strings that appear in the data tips that pop up when the mouse is over a data point. If legendTimeFormat is blank (the default) then the timeFormat property is used instead.
15718: Scroll bar arrows now work
In previous releases, the arrows on the time scroll bar on the Fx trend graph had no effect when clicked. This is fixed.
15720: add "Strip Monoscale" mode to fx trend
On the Fx trend graph, the yAxisMultiRangeMode property can now be set to "Strip Monoscale". This mode behaves the same as Strip Chart mode except that all strips will use the same Y axis range, rather than each strip having a (possibly) different Y range. Specifically, if yAxisMultiRangeMode = "Strip Chart - Monoscale" then: 1) If yAxisAutoScaleMode = "Off" then the y range for all strips is determined by the yValueMin/Max properties. 2) If yAxisAutoScaleMode = "On" then the y range for all strips is determined by applying the autoscaling to the y values from all the traces. 3) If yAxisAutoScaleMode = "On-Include min/max" is determined by applying the autoscaling to the y values from all the traces and the values of the yValueMin/Max properties. For (1), the behavior of Strip Chart and Strip Monoscale modes is the same. If the yAxisMultiRangeMode property is attached to a local variable, the following numeric values should be used: Off = 0, Multiple Axis = 2, Strip Chart = 3, Stacked = 4, Strip Monoscale = 5.
15725: yAxisAutoScaleMode setting now respected if yAxisLogFlag = ON
On the Fx Trend, the yAxisAutoScaleMode setting is now respected if yAxisLogFlag is checked. In prior releases, it was ignored if yAxisLogFlag was checked. Note that the logarithm of a value <= 0 is undefined. So if yAxisAutoScaleMode = "On - Include Min/Max" and if yValueMin or yValueMax is assigned a value <= 0, it will be ignored and will not affect the autoscale result.
Heatmap
15610: Border level property added
A new property, nodeBgBorderNestDepth, has been added to the Heatmap graph. This property allows you to set the number of levels to display node borders. If set to 0, then no borders are displayed. If set to -1, borders are displayed on all levels.
Links
15402: Link icon can now be formatted
The link object has been enhanced to support format options for the link icon. You can now format and position both the value and label text with the same options available in the object on the General palette. You can also set the color, size, shape, gradient, and edge properties for the icon.
15691: Support added for link arrow colors
The link object has been enhanced with 2 new properties in the Arrow category of the property sheet: arrow1Color and arrow2Color. The arrow1Color property sets the color of the source arrow and the arrow2Color property sets the color of the target arrow. The default color for both arrows is black.
Tables
15731: cellBgStripeContrast property added to obj_table02
A new property, cellBgStripeContrast, has been added to obj_table02 in the Cell category. This property allows you to set the contrast between the cellBgColor and the stripe color when the cellBgStripedFlag is on. Select High, Medium, Low or Lowest. The default is Medium, which is the contrast used in previous releases. Existing displays will not change. The cellBgStripeContrast will not be applied if the cellBgColor is white. In this case, light gray is always used as the stripe color. In the Display Server, the cellBgStripeContrast is only applied when the display is loaded. Changes to this property (for example, by a data attachment) after the display is loaded will be ignored.
Trend Charts
15575: Trend Graph Multi-trace Tabular data support
The trend graph has been enhanced so that multiple traces can be plotted from a single data table. This can be convenient cases where a data source provides a data table with a single timestamp column and multiple Y data columns. A new property named multiTraceTableFlag has been added to the Trace category. It is unchecked by default. When checked two new properties named multiTraceCurrentValueTable and multiTraceHistoryValueTable are shown in the Trace category. Each of these properties can be attached to a data table. The first column in the data table must be a timestamp column. The remaining columns are expected to be Y data values to be plotted. The Nth data column is used for trace N's data, and the column name is used for traceNLabel (if not already assigned). If the multiTraceTableFlag is checked, then the number of traces whose properties are shown in the Builder's property sheet is determined by the the number of data columns in the data table attachments or by the traceCount property, whichever is larger. However, the number of traces that will be plotted on the graph is determined by he number of data columns in the data table attachments. Typically, the data attachment for multiTraceHistoryValueTable provides the initial data points to be plotted (e.g. from a SQL attachment with Update Mode = On Demand, or a Cache attachment with Update Once checked) while multiTraceCurrentValueTable provides the new data points to be plotted while the display is viewed. If a trace plots only historical or only current data, then only one of the properties needs to be attached to data. However if both properties are attached to data, be sure that the tables applied to both have the same number and type of columns. When multiTraceTableFlag is checked, the properties named traceNValueTable and traceNValue (for N = 1 to 10) are not shown in the property sheet, since all trace data is expected to be provided via multiTraceCurrentValueTable or multiTraceHistoryValueTable.
15638: Support for trend graph data labels
The trend graph has been enhanced to allow a string to be associated with each point on a trace. These strings are known as data labels. If the traceNValueTable or traceNValue property is attached to a table and the table contains a string column (in addition to the required timestamp and Y data columns), then the string from that column will be used as the data label for the corresponding data point. This feature is also supported in the multi-trace table feature (15575), where the Nth string column in multiTraceHistoryValueTable or multiTraceCurrentValueTable will be used for the data labels for trace N. The data label for a point is shown in the fixed legend and in the popup legend, between the trace value and the trace label, and is enclosed in parentheses. If the cursorFlag property is checked, the data label shown in the legend is for the data point that is directly under or to the left of the cursor. Note that this feature is not supported for scalar attachments to traceNValue.
15644: The trend graph enhanced to support event and bar traces
The trend graph has been enhanced to support event and bar traces, in addition to the traditional line traces. A property named traceNType has been added the Trace N category (for N = 1 to 10). The valid values for traceNType are Line (the default), Bar, and Event. A Bar type trace draws a vertical bar for each data point, from zero to the point's Y value. The bar is just a vertical line whose width is determined by traceNLineThickness. The traceNLineColor and traceNLineStyle also control the appearance of the bar. If the point exceeds an alarm limit specified on the graph, the alarm color is used for the bar color. If traceNMarkStyle is set to any value other than None, the mark is drawn at the end of the bar. For an Event type trace, no line is drawn. Instead, a small rectangle containing a single text character is drawn for each data point. The character is the first character of the corresponding data label (see E15638) if any, otherwise it is the first character of the trace label. The traceNColor property determines the color of edges of the box and the text character, unless the point exceeds an alarm limit specified on the graph, in which case the corresponding alarm color is used. The box's fill color is set to traceNMarkColor or the appropriate alarm mark color, if any. However, if the mark color is the same as the color used for the box edge and text, then traceBgColor is used as the box fill color instead. Each event box is positioned vertically according to the Y data value for the corresponding data point. However, if traceN is attached to a data table that provides data labels but no Y data values, then an Event trace is plotted regardless of the traceNType setting. The event boxes will all be drawn near the bottom of the trace area.
15645: Support for drill down from trendgraph trace points
The trend graph has been enhanced to support drill down from a trace point. If the graph's drillDownTarget is set, then the following predefined substitutions will be set on drill down from a trace point: $traceNumber : number of the trace (1 to 10) that contains the selected point $traceLabel : label of selected trace $pointValue : y value of point $pointTimestamp : timestamp of point $pointLabel : data label (if any) of point $pointIndex : position of point in trace data (0 to maxPointsPerTrace) If the drillDownSelectMode property is set to Element Only, then clicks on the graph that are not near a trace point are ignored. If drillDownSelectMode is set to Anywhere, then a click anywhere on the graph will trigger a drill down but if the click is not near a trace point then the substitutions listed above will not be set.
15646: Support for drill down and mouseover text for trace points
The thin client has been extended to support mouseover text and drill down from data points on traces on the trend graph. If the trend graph's cursorFlag property is checked, this enables mouseover on the trace points. If the mouse is over a trace point, a browser tooltip box will appear displaying the legend values that correspond to that point. If the trend graph has a drillDownTarget specified, clicking on a trace point will set the following predefined substitutions: $traceNumber : number of the trace (1 to 10) that contains the selected point $traceLabel : label of selected trace $pointValue : y value of point $pointTimestamp : timestamp of point $pointLabel : data label (if any) of point $pointIndex : position of point in trace data (0 to maxPointsPerTrace) Limitations: 1) If this feature is used on a graph with many trace points, the performance of the browser may be sluggish when the display is loading or refreshing. To avoid this, set the timeRange property so that only a portion of the trace points are visible at a time. 2) If a thin client display refresh occurs while positioning the mouse over a point, the browser tooltip may not appear or it may appear in the wrong location. 3) When maxPointsPerTrace is exceeded on a trace (1000 by default), an old trace point will be shifted out of the trace for each new point that is added. If this occurs between the time that the thin client display was last refreshed and the time that the user clicks on a point, the drilldown substitutions will reflect the new set of data points. For example, if 2 points were shifted out of the trace, the drilldown subs will be set as though the selected point was 2 positions to the right of the point the user actually clicked.
15647: Trend Graph Trace Groups
The trend graph has been enhanced to support trace groups. A trace group is a collection of 2 or more traces, and is useful for: - identifying multiple traces that should share one vertical axis, in strip chart or multi-axis modes. - identifying 3 traces to be combined as a banded trace. A new category named Trace Groups has been added to the trend graph's property sheet. By default, the category contains a single property named traceGroupCount with a default value of zero. Legal values are 0 - 5. If nonzero, then the following properties appear in the Trace Groups category, for each groupN, where N is 1-5: traceGroupNTraceNumbers: A comma-separated list of the traces that belong to the group. If the trend graph is in strip chart mode or multi-axis mode, all the traces in the group will share the same axis/strip. traceGroupNBandedFlag: If this property is checked, the group is expected to have 3 traces. The plot area beneath the 1st trace in the group (the low band trace) will be filled, the 2nd trace in the group (the value trace) will not be filled, and the area above the 3rd trace (the high band trace) will be filled. Example: Set traceCount = 3 Set traceGroupCount = 1 (this makes the next 2 properties appear) Set traceGroup1TraceNumberss = 1, 2, 3 Set traceGroup1BandedFlag = true (checked) Attach trace 1, 2, and 3 to data. Additional notes: For each trace that is in a group, note that the y axis for the group is visible unless traceNYAxisVisFlag or traceVisFlag is false (unchecked) for all traces in the group. Similarly, the group's y axis grid is visible unless the traceNYAxisGridVisFlag property is false for all traces in the group. If traceN is in a group, note that these properties are hidden: traceNYAxisAutoScaleMode, traceNYAxisValueMax, traceNYAxisValueMin. The graph's yAXisAutoScaleMode, yValueMax, and yValueMin properties are used to scale each group's y axis range. If yAxisMultiRangeMode = Multiple Axis, the color of the axis for a group is determined by traceNLineColor of the first visible trace in the group. In Mutli Axis mode it may not be visually obvious which traces belong to which groups, unless you assign a similar line color or style, or mark color or style, to all the traces in a group.
15730: Sparkline now correctly uses assigned color rather than default
In the previous release, if a bgColor was assigned to a sparkline object in the Display Builder, after saving and reloading the file the sparkline would always use the default bgColor instead of the assigned color. This is fixed.
Oracle Coherence Monitor
14781: Admin Node and Admin Cache page corrections
Some interaction errors in the Node and Cache administration pages have been corrected. The selected Location is now shown instead of the node id. A value entered in an edit field will remain during the confirm process rather than disappear as in previous versions.
15495: Applet Throws "Unable to load MyRtvAppManager" but Still Runs
When running in an applet, the Oracle Coherence Monitor no longer throws the following error: ERROR: cannot create RTView MBeans: access denied javax.management.MBeanServerPermission createMBeanServer) ERROR: Unable to load MyRtvAppManager. Pack it into one of your applet jars and restart the browser.
15530: Size of history caches now configurable
The size of the history caches used by the ocmonitor can now be configured by the user, by setting the value of the $rtvCacheHistorySize global substitution. This can be done in the Application Options General->Substitutions Tab.
15593: Connection Status indicator now shows JMX and Data Server status
Connection Status indicator on the Grid Overview page now shows both the JMX status and the state of a Data Server connection if the monitor is connected to a Data Server. The indicator will be changed to a grey color if the Data Server is being used but is not connected. Otherwise a red color indicates that the JMX connection to the Coherence cluster is not established properly. Green indicates a successful connection.
Platform Support
15581: More than nine arguments now allowed for shell script launchers
In previous versions you could only enter up to 9 arguments when running RTView application shell script launchers. The scripts have been modified to accept an unlimited number of arguments.
TIBCO EMS Manager - Configuration
15344: Passwords saved to servers.xml now encrypted
In previous releases, the password for servers added or modified during the current Dislplay Builder or Configuration Utility were not encrypted in the saved servers.xml file. This has been fixed.
Viewer - Java Web Start
15454: RTV files with spaces in their names now work with JWS
In previous versions, the Java Web Start deployment failed to load files with spaces in the name from the server. This has been fixed.
Version 5.3d1 Release Notes
Data Server
15697: Data Server memory leak for filtered cache data fixed
In release 5.3c1, the data server memory usage would grow if a client display contained a data attachment to a cache and the attachment specified a row filter or a column subset. This has been fixed.
Data Sources
SQL Data Source
15661: Queries no longer being run sequentially & synchronously
In release 5.3c1, the SQL data source ran all queries on all connections sequentially, instead of running queries that use different connections in parallel as in earlier releases, and it ignored the "Run Queries Concurrently" option. Also, when a display that contains an SQL query was opened in the standalone Display Builder or Display Viewer, it would not paint or respond to user input until the query completed. This problem is fixed.
StreamBase Data Source
15671: SB re-connect behavior and RTViewDS connection info fixed
In the StreamBase Data Adapter, two problems have been fixed: (1) If a connection was lost and reconnected (which the DataAdapter will do automatically) new subscriptions were not made for the output streams(s) and so they did not start receiving data. (2) When a connection was lost or reconnected the "Connected" column of the internal Streams table was not updated correctly.
Functions
15643: ConcurrentModificationException fixed
In release 5.3c1, under certain conditions a ConcurrentModificationException could be thrown from the function data source. This is fixed.
15672: Last Table Rows bug fixed
Previously, The Last Table Rows function would not return the correct data under certain circumstances. This is now no longer the case
General
15657: Command line option added to specify global files
A new command line option has been added to the Display Builder, Display Viewer, Display Server and Data Server to specify a Global Definition file: -global:fileName The command line option does not support specifying substitutions for the Global Definition file. If this is needed, add the Global Definition file using the Globals tab in the Application Options dialog instead.
Object Library
15616: Upwards-compatability of old objects repaired
In version 5.1c1, obj_text03, obj_label09, obj_label09s and obj_label12 were replaced with newer objects and removed from the palette. The conversion routine that made old displays upward compatible did not take data attachments into account. This has been fixed.
Version 5.3c1 Release Notes
Alerts
15397: Alert Dialog Enhanced
In the Display Builder the following changes have been made to the Alert Dialog: The Filters panel has been relocated below the Alerts table and by default is hidden. A new checkbox labeled "Show Filters" will show or hide it. A usage note has been added to the dialog to remind the user that while alerts are selected in the table, they are edited in the Object Properties dialog. When filtering the alert table with a name filter, unnamed alerts will always be included in the filter results.
Commands
15352: Command confirm dialog now appears on correct linux dual screen
Command Confirmation Dialog now appears on correct screen for Multi- headed X11 displays. Previously Command Confirmation Dialogs may have appeared centered on the wrong screen for Multi-headed X11 displays. This is now no longer the case.
Customization
15345: Poll Once (Static Data) data no longer updated by preview
Previously data obtained by a data attachment, with an update mode of Poll Once (Static Data) , may have been updated more than once when a similar data attachment with a periodic update mode existed. This is no longer the case, and data will only be updated once for a data attachment with an update mode of Update Mode: Poll Once (Static Data)
Data Server
15382: Improved support for setting data server via a substitution
In a data attachment, if Data Server is set to a substitution (say, $server), it is now possible to set $server = __none, which is equivalent to setting Data Server = <none>. It is also possible to set $server to an empty string, which is equivalent to setting Data Server = <default>. Those values were not supported via substitution in previous releases.
Data Sources
15453: Data Source row filtering enhanced to support multiple columns
In the Display Builder, the Data Adapters that support row filtering have been enhanced to allow multiple columns to be indicated for the filter and multiple values to compare against for each column. The following data adapters are affected: Caches, IBM Websphere, RRD, XML, Log4J, Splunk. As of this release there is no specific user interface for entering multiple filter columns and sets of filter values; the lists must be typed into the corresponding dialog field. Multiple columns will be specified as a semicolon-separated list. Filter values will be specified as a nested list where values for a given column are comma-separated, and each group of comma-separated values is separated by a semicolon. For example: Column names: col1;col2;col3 Filter values: val1,val2;val3,val4;val5,val6 The resulting table returned would be those rows where the values of val1 OR val2 are in col1 AND the values of val3 OR val4 are in col2 AND the values of val5 OR val6 are in col3. Spaces around separators are not allowed. If a column name contains a semicolon it should be enclosed in single quotes ('). Likewise if a filter value contains a comma it should be enclosed in single quotes. The list of column names will be validated against the names found in the data table and if any is invalid the dialog will indicate this. Likewise the filter values will be validated to insure there is the correct number of values or values sets to correspond to the number of column names, and that the filter values are correct for the data type of the corresponding column. For backwards compatibility, if there is only one column name and a list of filter values then the values may be separated by semicolons.
15468: Available columns now in order of occurrence in SPLUNK and Log4j
Available Columns in Select Columns Dialog now displayed in correct order for Log4j and Splunk Attach to data dialogs Previously the Available Columns in the Select Columns Dialog for Log4j and Splunk Attach to data dialogs were not displayed in their order of occurrence in the returned data table.They are now displayed in their order of occurrence in the table.
Cache Data Source
15215: Enhance cache object to allow easier setting of history info
Support for cache persistence has been improved. A cache object can now be configured so that its history table and current table contents will be saved to a database by the RTView Historian, and those contents can now be restored automatically when an RTView application is started. Once a cache object is so configured and saved to a display (rtv) file, that file can be used as both a cache definition file and an historian data configuration file. The following cache object properties are involved in cache persistence. 1) historyTableName - As in the previous version, this is the name of the database table in which the cache's history table should be saved. The value assigned to this property may contain substitutions. The historian will create this table, if it does not already exist. When rows are appended to the cache's history table, the historian will append those rows to the database table. If the cache's timestampColumName property is set, the historian will assume that column will be used for sorting and purging rows in time order and will not append its own timestamp columns to the table. Before the data is stored in the database, the cache's schemaTable, if any, is applied. With these latest changes, an RTView application will now automatically query the database table for the initial rows to be loaded into the cache's history table, provided that: * the initialTable property is not attached to data (indicating that the user has configured an explicit query to load the cache history) * the timestampColumName property is set, so that it can be used to sort the SQL query result by time. The number of rows loaded by the query is limited by the cache object's maxNumberOfRowsProperty. 2) currentTableName - The name of the database table in which the cache's current table should be saved. The value assigned to this property may contain substitutions. The historian will create this table, if it does not exist. On each update to the cache's current table, the historian will either create or update the corresponding rows in the database table, using the cache's indexColumns to locate the rows. If no indexColumns are defined the historian will replace the entire table on each update. If the deleteTable property is used to delete rows from the cache's current table, the historian will also delete those rows from the database table. At startup of an RTView application, the database table will be queried for the initial rows to be loaded into the cache's current table. This property is not supported for the type double cache. This property is not supported in combination with the Historian -kdbformat option. 3) databaseName - The name of the database that contains the history and/or current tables for this cache. If left blank, the name "RTVHISTORY" is assumed. Substitutions can be used in this property. 4) quoteColumnNamesFlag - If checked (the default) then column names will be quoted in all SQL queries and commands for this cache. This is important for databases that do not preserve the case of column names unless they are quoted. However, in prior RTView releases, column names were not quoted when database tables were created, so this flag can be unchecked for backward compatibility. For these properties to work as described above, the cache definition file must also specified as an Historian data configuration file. See the RTView Historian documentation for details. The -nohistory option can be specified on the command line to prevent RTView from loading initial cache data from the database as described above.
15385: Data from initialTable no longer in wrong order in cache history
In the previous release, it was possible for data loaded via the initialTable property to appear out of sequence in the cache's history table. This has been fixed.
15401: deleteTable handling of multi-row tables improved
In prior releases, if a table with 2 or more rows was attached to the deleteTable property of an obj_cache_table, under some conditions the wrong rows were deleted from the cache's current table. This problem is fixed.
15433: add timeSpan property to cache objects.
A property named timeSpan has been added to obj_cache_table and obj_cache_double. The property specifies the time span for which rows will be kept in the cache history table. The property can specify a number of seconds, or it can specify a number followed by a single character indicating the time interval, where the valid characters are: y for years (365 days) M for months (31 days) w for weeks (7 days) d for days h for hours m for minutes s for seconds By default, timeSpan is blank, which means that rows are not removed from the history table according to their timestamp. As in prior releases, the maxNumberOfRows property limits the total number of rows in the history table, regardless of their timestamps. The timeSpan property only determines the time span for row kept in the cache history table by the cache data source. It does not affect the database storage, if any, associated with the cache.
15434: New property allowDuplicatesInHistoryFlag
A property named allowDuplicatesInHistoryFlag has been added to the cache table object. By default, this property is checked. If it is unchecked, then before the cache data source adds a new row to the history table, it will first check if an existing row has the identical timestamp and index column values and if so the existing row will be replaced with the new row. This feature requires additional overhead, so if duplicate history rows are acceptable or are unlikely to occur, the allowDuplicatesInHistoryFlag property should remain checked.
15486: Data Server now pushes cache table changes in all cases
In prior releases, if a data server client opens a display with an attachment to a cache table and the Column(s) field in the attachment is blank, and a second client opens a display with an attachment to the same cache table but where the Column(s) field = *, then the data server would only send updates to the first client when the contents of the cache table changed. This problem is fixed.
15490: New indexColumnNamesForDelete property
A property named indexColumnNamesForDelete has been added to the cache table object. This property can be used to remove defunct rows from the cache's current table, after each update to the table. A subset of the index column names should be specified as the value of the property. On each update to the cache, the set of values contained in the update for the specified columns is recorded. After the update, any row in the current table that has matching values for those columns, but was not updated, is considered defunct and is removed from the current table. For example, say the cache table has columns named Host, PID (process id) and CPU, and indexColumnNames = Host;PID. The valueTable property receives updates from agents running on multiple hosts. The data table applied to valueTable from each agent contains all the processes for the corresponding host. Say the cache.current table contents are as follows: Host, PID, CPU h1, 1234, 22.2 h1, 3456, 33.3 h1, 8765, 44.4 h2, 6464, 12.3 h2, 4579, 55.3 When an update for a host is applied to valueTable, if there are any rows in the current table for that host where the PID does not appear in valueTable, (because the process has terminated) the row should be deleted from the current table. Accordingly, the indexColumnNamesForDelete property is set to "Host". Then if the following table is applied to valueTable by the agent for host h1: Host, PID, CPU h1, 1234, 88.8 h1, 8765, 77.7 the resulting cache.current table contents will be this: Host, PID, CPU h1, 1234, 88.8 h1, 8765, 77.7 h2, 6464, 12.3 h2, 4579, 55.3 Note that the row for PID 3456 on host h1 was deleted (since it did not appear in valueTable) and the other rows for h1 were updated. The rows for host h2 were not changed, since valueTable contained no rows for host h2.
15504: Float data type not processed properly by Cache
If historical data is loaded from a database into a cache history table and then live data is appended to the history table, values of zero may incorrectly appear in a column if the data type is float in the live data and double in the database, or vice versa. This has been fixed.
JMX Data Source
15496: Now able to invoke getThreadInfo(long p1) on a ThreadMXBean
Previously it was not possible to successfully invoke the overloaded getThreadInfo operation on a ThreadMXBean in the JMX Adapter. It is now possible to invoke the overload of the getThreadInfo operation with a single long argument (p0 = threadID) that returns the thread info for a thread of the specified id with no stack trace.
SQL Data Source
15416: Crash when two ds threads use a db connection simultaneously
In the prior release, if the Historian was configured to use an ODBC connection to Microsoft SQL Server, then under some conditions the following exception could occur: SQLException: [Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt This problem is fixed.
StreamBase Data Source
15311: Support added for multiple connections
The RTView Data Adapter for StreamBase receives data via streams from one or more connections. In previous releases that data was identified internally only by the name of the stream; so if the same stream was received from two connections simultaneously, the data adapter did not distinguish the source, which could lead to confusing or erroneous results. In the current release the data is now identified by both connection and stream. A column named "conn" is now added to each incoming "tuple"; it will contain the name of the connection as defined in the Application Options dialog. Data attachments may be made to a stream from a specific connection, in which case they will receive only tuples from that connection, or to "*", in which case they will receive tuples from any connection delivering that stream (the previous behavior). If a stream is written out to a history file it will now contain the connection name, and if it is read back in that information will be used to identify the source. If a history file from a previous release without connection information is read in, its tuples will be applied to all attachments for that stream.
TIBCO Hawk Data Source
15346: Hawk alerts now cleared in RTView if agent expires
In previous releases, alerts on an expired agent were not cleared in RTView unless the display showing the alerts was closed and reopened. This has been fixed.
15457: Rerequest retransmitted alerts for agents that expire
In previous releases, Hawk alerts were not always handled correctly if an agent expired and came back up. When the agent expired, the alerts currently showing in RTView were cleared, but when it came back up, RTView was not requesting retransmission of those alerts, so their status was not updated to the current alert status. This has been fixed. Note that retransmission of existing alerts only requested if the Rate to Request Existing Alerts is greater than 0.
15491: Include Index Columns option has been added
A new Include Index Columns option has been added to the TIBCO Hawk data source. If enabled, 3 new columns will be available for all TIBCO Hawk data attachments, except those to the RTViewDs microagent: AgentName - the name of the agent MicroAgentName - the name of the microagent MicroAgentInstance - the instance of the microagent These columns will show up as available Return Fields in the Attach to TIBCO Hawk Data Dialog. If * is used for the Return Field, they will be appended to the subscription data.
15492: Disable Data Cache option has been added
A Disable Data Cache option has been added to the TIBCO Hawk Methods and Alerts tab in the Application Options dialog. This option allows the user to disable the caching of data in the Hawk Data Source. When selected, the initial update on data attachments to multiple agents will return a table with a row for each agent, but subsequent updates include only the rows that have changed. This option is useful when using Hawk data attachments as input to the Cache data source or the Historian. This option was already supported with the -hawknocache command line option, but it is now available from the options dialog as well.
15513: Attach to Hawk Data dialog now retains window size
The Attach to Hawk Data dialog has been modified so that window size information is retained after the user resizes the window and closes/reopens the dialog.
WMI Data Source
14944: Microsoft WMI Data Adapter added
The WMI (Windows Management Instrumentation) Data adapter is now available. The WMI Data adapter allows you to obtain Management Information from local and remote computers running the Windows operating System. WMI data is obtained via WQL (WMI Query Language) statements. WMI is a windows specific Technology. The WMI Data adapter requires the .NET Version 2.0 (or above) RunTime installed on the machine it will run on. An Example of local WMI data is shown in the Data Sources demo.
Demos
JMX Monitor
15500: The JMX Monitor Demo has been enhanced to use client side caches
The JMX Monitor demo has been enhanced to use client side caches for the JVM Summary and JVM Memory Screens.
Display Server
15392: Initial data delay in thin client when using data server reduced
If the display server requests data via the data server, then there can be a delay between the time when the user opens a display in the thin client and when data appears in the display. This delay time has been reduced.
15560: Fix for MBean error in Display Server
In the previous release, accessing the Display Server's JMX Manager MBean could cause the Display Server to throw an OpenDataException. This has been fixed.
Distribution
14860: Add/Remove Programs listing no longer includes duplicate version
Previous versions of RTView included the version twice in the list of currently installed programs in the Add/Remove Programs applet. This has been fixed.
Drill Down
15384: Link object now drills down to correct display in thin client
A problem in the thin client in which a drill down from a link object did not open the correct display has been fixed.
Functions
14660: Filter by Row supports multi-column, multi-value filtering
In the Display Builder, the Filter By Rows function has been enhanced to allow multiple columns to be indicated for the filter and multiple values to compare against for each column. Multiple columns will be specified as a semicolon-separated list. Filter values will be specified as a nested list where values for a given column are comma-separated, and each group of comma-separated values is separated by a semicolon. For example: Column names: col1;col2;col3 Filter values: val1,val2;val3,val4;val5,val6 The resulting table returned would be those rows where the values of val1 OR val2 are in col1 AND the values of val3 OR val4 are in col2 AND the values of val5 OR val6 are in col3. Spaces around separators are not allowed. If a column name contains a semicolon it should be enclosed in single quotes (' '). Likewise if a filter value contains a comma it should be enclosed in single quotes. Note also the following: 1. If there are more column names than filter values (or value lists) or vice-versa, the extra names or values/value lists will be ignored. 2. If there is an error in designating a column name, that name and its associated filter values/value lists will be skipped. In the above example, if col2 were not found in the input, val3,val4 will be ignored and col3 will still be filtered on val5,val6. 3. For backwards compatibility, if there is only one column name and a list of filter values then the values may be separated by semicolons.
15275: GroupByTimeAndUniqueValues handles text columns differently now
The GroupByTimeAndUniqueValues function treats text columns more cleanly. Before the changes to GroupByTimeAndUniqueValues all numerical algorithms involving text values would result in a value of "" on output. Now all text calculations show the contents of the last row to be compacted in any text field.
15276: GroupByTimeAndUniqueValues handles bool columns differently now
The GroupByTimeAndUniqueValues function treats boolean columns more reasonably. Before the changes to GroupByTimeAndUniqueValues all numerical algorithms involving boolean values would result in a value of false on output. Now all boolean calculations show the contents of the last row to be compacted in any boolean field instead of a false.
15277: GroupByTimeAndUniqueValues handles date columns differently now
Before the changes to GroupByTimeAndUniqueValues all numerical algorithms involving date values would result in a value of "" on output. Now all date calculations that result in a compacted row show the contents of the last row to be compacted in any date field instead of a blank.
15278: GroupByTimeAndUniqueValues handles NaN better
The GroupByTimeAndUniqueValues fucnction was optimized for better NaN handling. Before the changes to GroupByTimeAndUniqueValues all numerical algorithms involving NaN values would result in a value of NaN on output. Now all calculations that see NaN substitute zero so that all other non-NaN values are at least considered.
15290: Restrict to Data Combinations now in GroupByTimeAndUniqueValues
The Group By Time And Unique Values function has been given an additional argument, "Restrict To Data Combinations". As in the Group By Unique Values function, if this argument is set to 0 then the returned data will contain all possible combinations of unique values found in the specified Index Columns, but if it is set to 1 then the returned data will be restricted to only those combinations that occur in the data.
15371: Deadlock if SETSUB function triggered by NOW function fixed
In prior releases, a deadlock can occur in the Display Builder or Display Viewer if a display contains a setsub function that is triggered by a now or a getsub function. This problem is fixed.
15377: Help dialog for Evaluate Expression functions updated
The help text for the Evaluate Expression By ___ functions has been updated to warn users that variable names may not begin with a number.
15469: New Distinct Values function
In the Display Builder a new function Distinct Values has been added. The Distinct Values function takes as its arguments a table and the name of a column in the table, and returns the unique values from the given column. Arguments are as follows: Table - The table of interest. Column Name - the column of interest. Sort Values - if set to 1, the resulting values will be sorted. Sort Descending - if set to 1, the resulting values will be sorted in descending order. Use Column Name - if set to 1, the original column name will be used for the result column; else a generic name will be used. This behavior is useful if a display needs to be independent of the column names in the data.
15470: New Create Selector List function
The Create Selector List function takes as input a table containing a list of values to be presented in a dropdown list and returns a two-column table where the first column contains selector names and the second column contains their values. If the input table has only one column its contents will be used for both the selector names and values; if it has two columns the selector values will be taken from the second column. The function has the option to prepend an "All Selector" to the output list. If a name is given via the argument "All Selector Name" then the first row in the output will contain that name in the first column and "*" in the second. Selector Table - the table of valid values. All Selector Name - name for the "all" selector. Sort Values - if set to 1, the resulting values will be sorted. Sort Descending - if set to 1, the resulting values will be sorted in descending order.
15471: New Validate Substitution function
The Validate Substitution function validates the given substitution against the given table of valid values. The first argument is the name of a substitution variable and the second argument is a table of valid values. (Only the first column of this table is used.) If the substitution value is found in the table it is returned; else the given substitution is set to the first value in the table.
15474: New checkbox to scroll columns added to Data Display Dialog
In the Display Builder's Data Display Dialog, a new checkbox named "Scroll Columns" has been added. By default all columns are displayed in the available dialog width, and in a wide table the column labels may not be readable.If this box is checked then the columns will be sized so the labels are readable and a horizontal scrollbar will be added if necessary to see all the columns.
15498: Split String Function added to tabular functions
The Split String function splits the given string, using the separator regular expression, to return a table with the named results column. The String argument is the input string to be split The Separator argument is the regular expression used to split the input string argument The Results Column Name argument is used to name the column containing the split results, one per row, in the returned results table.
15525: optimize to Restrict to Data Combinations for Group By functions
The performance of the Group By Unique Values and Group By Time and Unique Values functions has been optimized when the Restrict To Data Combinations is enabled.
15558: setsub function may not initialize value of sub in listeners
In prior releases, if a function has an input argument with an attachment that is affected by a substitution, and the initial value of that substitution is set by another function which appears later in the rtv file, the attachment may not be initialized with the correct substitution value. This problem is fixed.
General
14893: Third party .jar files repackaged into single .jar
In previous versions we required that the following libraries be added to applet parameters. Reporting support: J2PrinterWorks.jar iText.jar iTextAsian.jar Email command support: mail.jar activation.jar Expression evaluation function support: jeval.jar Browser support: BrowserLauncher2.jar It is no longer necessary to include all of the above libraries, as the contents of these libraries have been re-packaged into a single library: gmsjext.jar If you are currently using an applet deployment and you do not wish to upgrade your HTML file's applet parameters to reference gmsjext.jar instead of the full list above, you can find a copy of the old libraries in lib/ext_jars.zip. The signed versions of these are in signed_jars.zip.
15497: Java option optionsFileDir now also checks startup directory
The behavior of the RTV_JAVAOPTS option -Dcom.sl.rtview.optionsFileDir= (directory) has been modified. Previously, if a directory was specified, RTView would attempt to read configuration files from that directory. If not found, RTView would look for the configuration files in lib. This has been modified as follows: If a directory is specified, RTView will attempt to read configuration files from that directory. If not found, it will look for them in the directory where you started your application. If not found there, it will look for them in lib.
Object Library
11694: Scale palette enhancements
All of the scales previously on the Scales tab of the Object Palette have been replaced with the following 5 new scales: obj_barscale - This is a scale which displays the value using the fill percent of the bar. obj_piescale - This is a scale which displays the value using the fill percent of the pie. obj_vuscale - This is a scale which displays the value using the fill percent of the bar. The bar is drawn striped instead of solid. obj_indscale - This is a scale which displays the value using the position of the indicator against an axis. obj_bulletscale - This is a scale which displays the value using the fill percent of the bar. The bar look and funcationality are based on Steven Few's bullet graph. All of the scales allow you to set the range of the value using valueMin and valueMax. All of the scales except the pie scale support a variety of axis styles and can be oriented vertically or horizontally. The scales that were previously on the Scales tab of the Object Palette have been deprecated. They will continue to work as they did before in existing displays, but are no longer available in the Object Palette.
Charts (General)
15320: New Spark Chart object
A sparkline object has been added to the Graphs palette. The sparkline object is very similar to the trend graph and has many of the same properties. However, the sparkline has only a single trace and no X or Y axis. A marker is drawn only for the last data point. By default the sparkline also has no background or legend, but there are properties to enable those features. The sparkline will plot the data that is attached to its value and/or its valueTable properties. These are equivalent to the trace1Value and trace1ValueTable properties of the trend graph. By default, the sparkline will plot all of the data, up to the maxPointsPerTrace limit. The Y data range will be autoscaled. Although the X and Y axis are not displayed, several properties are available for controlling the X and X ranges of the plot, namely timeRange, timeRangeBegin, timeRangeEnd, yAxisAutoScaleMode, yValueMin, and yValueMax. See the trend graph documentation for a description of these properties. The sparkline supports the same alarm properties as the trendgraph.
Control Objects
15315: Scale Control now supports changes to valueMin and valueMax
In previous releases, the valueMin and valueMax properties on the Scale Object (obj_c1scale) were static and did not support updates. This has been fixed.
15373: Date Picker bug fixes
In the previous release of RTView, the Date Chooser control had the following bugs: 1) If timeEntryEnabledFlag is unchecked, when you click on the calendar button, the control's varToSet variable is set and its command (if any) is executed immediately, before you pick the desired date from the popup calendar. This does not occur in the thin client. 2) If timeEntryEnabledFlag is checked and the control has a command, the command gets executed twice when you click OK in the popup calendar. 3) If timeEntryEnabledFlag is unchecked and the control does a drilldown to a new display in the current window, it crashes. All of these bugs have been fixed.
Fx Bar Chart
15335: Fx Bar Chart Spacing and Scroll Bars support
Two inter-related properties have been added to the Fx Bar Graph: scrollbarMode and minSpacePerBar. These properties act similarly to the same properties of the standard RTView Bar Graph. scrollbarMode: Select Never, As Needed, or Always from the scrollbarMode property to set the behavior of the x-axis scroll bar in the graph. NOTE: If drawHorizontalFlag is selected, the x-axis is vertical. Never is the default setting. If set to Never, some bars may get clipped. Select Always to display a scroll bar at all times. Set to As Needed to display the scroll bar when there is not enough space to display all of the bars in the plot area. Each bar uses at least minSpacePerBar pixels along the x-axis. minSpacePerBar: Sets the minimum width for each bar, in pixels. If drawHorizontalFlag is deselected, set the minimum width for each bar, in pixels. If drawHorizontalFlag is selected, set the minimum height for each bar, in pixels. The default is set to 1.
15390: Initial value 'Once' for entranceTrigger now behaves correctly
The FxBar graph's transition code has been improved from the prior to release to ensure that setting a transition to "Once" sticks. Also, the very first Entrance transition will display without the undesirable data flash that may have preceded the unfolding of the effect.
15391: all transition types except Interpolate act like Slide Right
The FxBar graph's transition code has been improved from the prior to release to ensure that the all settings stick.
15406: Bar spacing added to FxBar
The FxBar graph now supports the minSpaceBetweenGroups property. As with the standard bar graph, minSpaceBetweenGroups appears in the Layout section of the Object Properties grid. The default, as with the standard bar graph, is: minSpaceBetweenGroups = 8
15462: MinSpaceBetweenBars property added to Fx Bar
The FxBar graph now supports the minSpaceBetweenBars property. As with the standard bar graph, minSpaceBetweenBars appears in the Layout section of the Object Properties grid. The default, as with the standard bar graph, is: minSpaceBetweenBars = 0
15483: Alert Indicators implemented in Fx Bar Chart
Alert indicators are now supported in the Fx Bar graph. The Alert properties added are: valueHighAlarmLineVisFlag valueHighAlarmMarkColor valueHighWarningLineVisFlag valueHighWarningMarkColor valueLowAlarmLineVisFlag valueLowAlarmMarkColor valueLowWarningLineVisFlag valueLowWarningMarkColor By default, all of the VisFlag properties are set to OFF and all of the MarkColor properties are set to the same color values as their respective Alarm or Warning colors.
15484: Properties added for X and Y Axes color and thickness
The Fx Bar graph now supports changing the color and thickness of the X and Y axis. Four new properties have been added. They are listed below with their default values: X-Axis category: xAxisColor = 0xBBCCDD (light-gray) xAxisThickness = 8 Y-Axis category: yAxisColor = 0xBBCCDD (light-gray) yAxisThickness = 8
15485: Properties added for X and Y Axes color and thickness
The Fx Trend graph now supports changing the color and thickness of the X and Y axis. Four new properties have been added. They are listed below with their default values: X-Axis category: xAxisColor = 0xBBCCDD (light-gray) xAxisThickness = 1 Y-Axis category: yAxisColor = 0xBBCCDD (light-gray) yAxisThickness = 8 Note that the yAxisColor and yAxisThickness property values will be ignored when the yAxisMultiRangeFlag property is TRUE.
Fx Trend Chart
15365: Fx Trend Enhancements
The following properties have been added to the Fx Trend Graph. These properties have the same behavior as on the standard trend graph (obj_trendgraph02), except as noted below. timeRangeBegin timeRangeEnd gridColor xAxisGridVisFlag yAxisGridVisFlag xAxisLabelTextSize (see note 1) yAxisLabelTextSize (see note 1) yAxisMultiRangeFlag (see note 2) yAxisPosition (see note 3) yAxisAutoScaleVisTracesOnlyFlag trace1VisFlag, trace2VisFlag, etc Note 1. These are equivalent to x/yAxisLabelTextHeight on obj_trendgraph02. Note 2. The yAxisMultiRangeFlag property on Fx Trend is similar to yAxisMultiRangeMode on obj_trendgraph02, where yAxisMultiRangeFlag = unchecked is equivalent to yAxisMultiRangeMode = Off, and yAxisMultiRangeFlag = unchecked is equivalent to yAxisMultiRangeMode = MultipleAxis. There is no equivalent to the Classic or Strip Chart modes, those are not supported on the Fx Trend. Note 3. The yAxisPosition property supports the same settings on the Fx Trend and obj_trendgraph02. However, the 'inner' position settings work differently: on obj_trendgraph02, the axis labels are drawn inside the trace area, while on Fx Trend the inner setting merely changes the location of the tick marks relative to the y axis.
15429: Flex trend with a lot of data no longer hangs browser after zoom
In prior releases, the Fx Trend would sometimes become sluggish or unresponsive after performing a zoom. This is fixed.
15511: yValuePrecision has been added to the Fx trend graph
A property named yValuePrecision has been added to the Fx trend graph. It specifies the number of decimal digits shown for Y data values in the legend and the mouseover text. The default value is 2.
Heatmap
15430: Heat Map Object added
A new object, obj_heatmap, has been added to the Graphs tab in the Object Palette. The heatmap displays indexed hierarchical data as a set of nested rectangles. A rectangle is drawn for each index, and is then filled with smaller rectangles representing sub-indexes. The size and color of a node's rectangle shows its value relative to the total of all values for that index. Heatmaps are useful because the color and size of the nodes allow you to see patterns that would be difficult to spot in other ways. They also make efficient use of space and can legibly display a large amount of data. Attach your tabular data to the valueTable property. This table must contain one or more index columns and at least one data column. The heatmap will display one level of nodes for each index column specified. Index column names should be specified in the nodeIndexColumnNames property. The first non-index numeric column will be used to control the size of the node. The second non-index numeric column will be used to control the color of the node. If only one data column is specified, it will control both the size and the color of the nodes. The data in the valueTable is aggregated by unique index value. By default, the both size and color data is subtotaled. You can specify alternative aggregation types in the colorValueGroupType or sizeValueGroupType properties. Since the data in the heatmap is aggregated, the value shown in a heatmap node might not be the same as the value passed down to a drill down display. For example, if you have your heatmap attached to a table where the index column is Plant and the size column is Units Completed, if you have 2 rows where the Plant is San Francisco, then the node size will be based on the total of the Units Completed values for both rows. However, when you drill down, the drill down value for Units Completed will be the value in the first row in the table where the Plant is San Francisco. Negative aggregated values will be treated as 0. The following layout options are supported: Squarified - Nodes are more square in shape and ordered according to the size of the value from the top-left to the bottom-right. Strip - Nodes are more square in shape and ordered according to the order of the rows in the valueTable. Slice Horizontal - Nodes are short and wide and ordered according to the order of the rows in the valueTable. Slice Vertical - Nodes are tall and narrow and ordered according to the order of the rows in the valueTable. Slice Best - Nodes are laid out either like Slice Horizontal or Slice Vertical based on what fits best in the available space. Slice Alternate Horizontal - The layout alternates between Slice Horizontal and Slice Vertical based on the node depth. The top level nodes use Slice Horizontal. Slice Alternate Vertical - The layout alternates between Slice Horizontal and Slice Vertical based on the node depth. The top level nodes use Slice Vertical. Note that heatmaps containing large data sets may run slowly on the Display Server if either the drill down target or the mouseOverFlag is enabled.
15512: The heatmap now supports value divisors and data quality
Two new properties, sizeValueDivisor and colorValueDivisor, have been added to control the size and color values plotted in the heatmap. Note that the colorValueDivisor, if specified, is also applied to colorValueMin and colorValueMax. For columns specified in the mouseOverAdditionalColumns property, you can optionally specify a value divisor for each numeric column included in the tooltip. Several new properties have been added to support data quality: valueQuality: Specify a value to compare to valueQualityLostData and valueQualityNoData. If it matches one of these, all nodes in the heatmap will draw in the corresponding valueDataQuality color. This property is ignored if the valueQualityEnabledFlag is off. valueQualityEnabledFlag: If selected, enable coloring cells based on data quality. valueQualityColumnName: Use the specified column in the valueTable data for a per-row data quality flag. For each node, if the value in the quality column matches valueQualityNoData, draw the node valueQualityNoDataColor and if the quality column matches valueQualityLostData, draw the node valueQualityLostDataColor. If the valueTable contains multiple rows for a single index, the highest data quality value is used. This property is ignored if the valueQualityEnabledFlag is off. valueQualityLostData: The lost data value. valueQualityLostDataColor: The color to paint the node if the quality is valueQualityLostData. valueQualityNoData: The no data value. valueQualityNoDataColor: The color to paint the node if the quality is valueQualityNoData.
15566: linearColorMappingFlag property added to Heatmap
The linearColorMappingFlag has been added to the heatmap in the Data Format category. This property adjusts the way the color calculations are done for the nodes. If selected, the color of the node ranges directly from minColor to maxColor, similar to the way a gradient's colors are calculated. If deselected, the color of the node ranges between minColor and maxColor by going around the color wheel.
Pie Charts
15418: Initial value "Once" for entranceTrigger now acts as expected
It was noted that some of the entrance and exit transition effects didn't work as expected. The problems were found and corrected.
Tables
12228: Support added for multiple column sort
In the Display Builder, the Sort Table function has been enhanced to take multiple column names, separated by ";". The resulting table will be sorted on the first column, then the second column, etc. If an invalid column name is entered the original table will be returned.
15442: Crashes caused by valueTable changes while drawing objects fixed
In prior releases, an array bounds exception or class cast exception would sometimes occur if rows were removed from a data table by an asynchronous data source while an object attached to the same table was being drawn. This is fixed.
Trend Charts
15411: "Stacked" option added to yAxisMultiRangeMode
The trend graph now supports yAxisMultiRangeMode = Stacked. In this mode, the y value plotted for a trace for time=T is the sum of all of the y values of the lower numbered traces at time = T. For example, for trace 3 and the plotted y values will be the sum of the y data values for traces 1, 2, and 3. The actual (unstacked) y values are shown in the trace legend for all traces. The y value for a lower-numbered trace is not included in the sum if that trace is invisible, or has no data, or all of its data points are older or newer than T, or the y value at T is NaN (not a number). If the lower- numbered has no value at T, but has values before and after T, the y value to be included for the sum in that trace will be interpolated.
Oracle Coherence Monitor
14776: Alert provided for Departed Nodes
The "DepartedNode" alert has been added to the Oracle Coherence Monitor. This alert is triggered whenever a node leaves the cluster for more than the specified delay time (default = 60 seconds). When a departed node rejoins the cluster, the alert is cleared. This alert may be disabled/ enabled from the Alert Admininstration page.
15440: Node Location now shown in Departed Nodes display
The Location identifier is now shown in the Cluster Stability Departed Nodes table, along with the ip address and port.
Platform Support
15038: rtv_init.bat now writes temporary file to Application Data
In previous versions, the rtv_init.bat script would write a temporary file to %RTV_HOME%. This would cause the script to fail on some Windows systems due to permissions. This temporary file is now written to %APPDATA%\.sl instead.
Version 5.2c1 Release Notes
Alerts
13682: Enhanced Alert Editing
In the Display Builder, the way Alert objects are added and configured has changed. Instead of seeing alert objects as visible rectangles in the display, they will be shown in a new Alert dialog. When an alert objects is selected in the table its properties may be edited in the Object Properties dialog as before. A new alert object may be added by selecting its type from the dropdown list to the left of the Add button and clicking that button. The tabular display of alert objects may be filtered by means of the dropdown lists at the top of the dialog. The filters are additive; to remove a given filter select "*" from the list. The Name filter accepts a regular expression string.
15206: Multi-state Alert added
A multi state alert has been added to RTView. This alert allows you to define the number of states for your alert. For each state, you can set the condition that the input value must meet to trigger the alert. The following conditions are supported: Greater Than Greater Than or Equal To Less Than Less Than or Equal To Equal Not Equal Increase Increase Percent Decrease Decrease Percent Net Change Net Change Percent In Range Out of Range When your input value has met the condition for a defined alert state, an alert will be generated using the alert state number as the severity (ex, the severity for Alert State 1 will be 1, the severity for Alert State 2 will be 2, etc).
15207: Alert Text can now be customized
The alerts have been enhanced to allow you to customize the alert text. The alert text is displayed in the Alert Text column of the alert table and is used in the $alertText substitution available for alert commands. You can specify a different alert text string for each alert level. If no alert text is specified, RTView will output default text, which is the same text that was used in previous releases. The following new properties have been added to the limits alert to allow you to specify alert text: valueHighAlertText valueHighWarningText valueLowAlertText valueLowWarningText The following new properties have been added to the discrete alert to allow you to specify alert text: valueHighAlertText valueLowAlertText valueMediumAlertText All of the alert substitutions that are available on the alertCommand can also be used in the value*AlertText string except for $alertText and $alertEmailBody. The following new alert substitutions have been added for use in both the value*AlertText and the alertCommand: $alertLabel - A label indicating the alert type (discrete: High Alert, Medium Alert, Low Alert limits: High Alert, High Warning, Low Alert, Low Warning) $alertCurValue - The current input value. $alertCompValue - The value the current input value is being compared to.
15213: File Browser Added to Alert Options Dialog
In the Alert Definitions tab of the Display Builder Application Options dialog, when you click the Add button to add a new Alert Definition file, you will now be presented with a file selection dialog which you may use to browse to the file of your choice.
Builder
15142: Model height limit removed
In previous releases of RTView, the background model size has been limited to less than 2049x1537. This limitation has been removed.
15235: New live data display option for data attachments
The Display Builder has been enhanced with an addtion to the "attach/detach" popup menu. This menu is shown when you right-click on a property in the Object Property dialog, or on a function argument in the Edit Function dialog. If the property or function argument is attached to data, you will be able to choose a new menu item "Display Data" and invoke a free-standing dialog containing a table displaying the data available from this attachment. You may invoke such a data display dialog for any data attachment; only one dialog will be opened for each individual attachment. If you close one of the dialogs it will be re-opened if you re-invoke a display dialog for the same data attachment. All the dialogs will be closed when you change displays. The dialogs display the text of the data attachment above the data table, and an abbreviated form of it in their title bar, to help locating a particular dialog if you have several open. They include two checkboxes below the table: "Show Column Types" will display the data type of each column below its name in the column header, and "Insert New Rows" will set that flag on the data table.
Builder - Editing
15211: Function Dialog resizing constrained
In the Display Builder, the Edit Function dialog could be resized so small that the dialog's contents became unusable and the function help text could become truncated. The dialog is now constrained not to resize below a minimum size.
15218: Argument values properly retained when changing function type
In the Display Builder Edit Function dialog, if you were editing a function and changed its type to one with similar argument names, the corresponding argument values were not correctly retained. For most functions, literal argument values would be lost although data attachments would be retained. For the Evaluate Expression As Double/String functions, data attachments would be converted to literal values when switching between those two types. To clarify the expected behavior when changing the type of a function: if the new function type has the same argument names as the previous one then all argument values (literal and attachment) will be retained. The only exception is changing between Evaluate Expression As Double/String and Evaluate Expression By Rows: in this case only the expression will be retained.
15305: Support for sending multiple values from a multi-select listbox
The list control object (obj_c1tlb) now supports selection of multiple list items. To enable multiple selection, check the multiSelectFlag property in the property sheet. If multiple list items are selected and if a variable is attached to the control's varToSet property, the variable will be set to a string containing the selected item values, separated by semicolons. For example, if the selected item values in the list are Red and Blue, the variable value will be set to Red;Blue. Likewise, the control's selectedValue property can be used to select multiple items by specifying a string with the values to be selected separated by semicolons. LIMITATION: Since the semicolon character is used as a separator between multiple values in the selectedValue property, and in the string assigned to the varToSet variable, the list values themselves may not contain semicolons in a list control whose multiSelectFlag property is checked.
Builder - Options Dialogs
14877: Last global file entry can now be removed from list
In the Globals tab of the Display Builder's Application Options dialog, if you had a single global file in the dialog's table and removed it, it would reappear when you pressed Apply. This has been fixed.
Common Server Support
15055: Notification provided of user login/out
Two methods have been added to the GmsCustomUserManager class, named clientLogin and clientLogout.
public void clientLogin(String userName, String role, String sessionID)In the display server and data server applications, this method is invoked when a client user logs in. There is a unique sessionID for each client login session.public void clientLogout(String userName, String role, String sessionID)In the display server and data server applications, this method is invoked when a client user logs out. There is a unique sessionID for each client login session.
15095: Data/Display Server & Historian available as Windows Services
The Data Server, Display Server and Historian have been enhanced to support running as Windows services. To install and start one of these applications as a service, type the following in an initalized command prompt: install_service appName -service:service_name -dir:startup_directory The following arguments are supported for install_service appName - Required. Must be displayserver, dataserver or displayserver -service: - Required. Specify the name to use for the service. This will show up as the name of the service in the Windows Services dialog. If the service name contains spaces, enclose the entire argument in quotes. For example, "-service:my service". -dir: - Required. Specify the full path to the directory where the application should run. This should be the project directory that contains all of the .rtv and configuration files for your RTView application. If the directory contains spaces, enclose the entire argument in quotes. For example, "-dir:c:\my dir". -serviceout: - Optional. Specify the full path and file name for the out log file. If not specified, the out log will be written to the directory specified with -dir and named appNamed_out.log. -serviceerr: - Optional. Specify the full path and file name for the err log file. If not specified, the err log will be written to the directory specified with -dir and named appNamed_err.log. -overwritelogs - Optional. Overwrite the err and out logs each time the service restarts. If not specified, new data is appended to the existing log files. -manualStart - Optional. Set the service startup type to manual. The service will still start when it is installed, but will not automatically start on system startup. If not specified, the service startup type will be auto. For example: install_service displayserver -service:MyService -dir:c:\myproject -serviceout:c:\logs\ds_out.log -serviceerr:c:\logs\ds_err.log Any other command line options will be passed into the application. Note that the service is run as a local system service. If you will be using ODBC connections for the Historian or SQL data source, you will need to set these as system data sources, not user data sources. Note also that you cannot successfully install a service application if RTView is being run off a networked drive. It must be installed on your local system. To stop and uninstall one of these service applications, type the following in an initialized command prompt: uninstall_service appName -service:service_name Once a service is installed, you can start, stop and configure it in the Windows Services dialog. These application are available as windows services on Windows XP, Windows 2003 Server and Windows Vista only. They are not supported on 64-bit systems. These services run using JavaService version 2.0.10, which is licensed under the Lesser GPL and is available for download from http://forge.objectweb.org/projects/javaservice/.
15170: High Availability and Load Balancing support for RTView servlet
Improvements were made to better support High Availability and Load Balancing for RTView servlets. RTView provides two servlets for use in web deployments. The rtvdata servlet provides a Viewer client access to the Data Server. The rtvdisplay servlet provides the Thin Client with access to the Display Server. In this release, the servlets have been enhanced to support high availability. High availability is achieved by deploying multiple redundant copies of the servlet in a web server/app server environment that supports clustering and load-balancing/failover between redundant servlets. Servlet clustering allows multiple copies of a servlet, each running in a separate app server, to replicate their internal state information. Most app servers, such as Tomcat 6.0, support clustering. Load- balancing/failover maps a URL from a client request to one of the redundant servlets. A servlet is chosen so that the client requests are distributed evenly among the currently available servlets. In the event of a servlet failure, a client is switched from a failed servlet to a healthy servlet. There are several types of load balancers, including software or hardware devices, or specialized DNS configurations. See the High Availability Section under Deployment in the documentation for more details about how to configure these systems. The documentation provides general examples of several HA deployments and specific examples of HA servlet deployments using Tomcat 6.0 as the app server and Apache httpd 2.2.9 as the web server and load-balancer.
Customization
15171: Flex Custom Example with Tabular Data added
Another example of a custom fx object has been added to the custom/fxsimple directory. It accepts tabular data from RTView and displays it in a grid. The source file for the example is fxgrid.mxml.
15250: Resource Bundle shared by all Custom Data Adapters
Previously only a single custom data adapter could be used in a RTView application because localization resources were not shared between custom data adapters. This has been corrected.
15281: New custom data adapter option to set update interval
Previously we allowed only "Once Only" and update on every RTView update interval for custom data sources. Support has been added for polling on every ds-specific interval or data-attachment interval.
15282: Custom data adapters cannot set options before initialization
This task adds support for command-line argument processing and applet parameter processing to the custom data adapter API. Command-line arguments and applet parameters are processed the same way as options read from the Ds Options file, through the method GmsRtViewDsAdapter.applyDsOption(), with only minor exceptions as described below. In addition, the initialization of custom data adapter properties has been split into two parts, so that an adapter can use information passed-in from command-line options, applet parameters, or entries in the Ds Option file when setting most of the custom data adapter properties. Option Processing All valid options, whether passed from the command-line, specified as applet parameters, or read from the Ds Options file, are passed to the method GmsRtViewDsAdapter.applyDsOption(String name, String value) during application initialization. The option name and value are provided to the adapter as strings. For more details about processing options, please refer to the description in the Customization / Custom Data Adapter / Data Source Options / Accessing DS Options section of the RTView User Guide. Command-Line Options Command-line options should be specified using the following format: -<dskey>option:<name>=<value> where <dskey> is the dskey for the custom data adapter, <name> is the option name, and <value> is the option value. The following example shows how to pass a command-line argument to a custom data adapter. In this example, the dskey for the custom data adapter is ds1, the option name is option1, and the option value is value1. run_viewer customds:Ds1 ds1option:option1=value1 Command-line options are processed after options read from the Ds Options file, so a custom data adapter can use command-line options to override options previously read from the DS Options file. Unlike Ds Options, options passed from the command-line do not need to be defined as fields in the Ds Options exemplar in order to be passed to the applyDsOption method. All options which match the format shown above will be passed to the applyDsOption method during initialization. This allows a custom data adapter to accept options which control program execution, yet which are not saved in the Ds Options file or displayed in the Ds Options dialog in the builder. For example, a custom data adapter may define an option which specifies the name of the resource bundle to use for localization, so that different localization files can be tested without any code changes. Applet Parameters Options may be passed to applets as applet parameters. When passed using the HTML <param> element, applet parameter options should be specified using the following format: <param NAME=<dskey>option:<name> VALUE=<value> When passed inside the HTML <embed> tag, applet parameter options should be specified using the following format: <embed & <dskey>option:<name>=<value> & > where <dskey> is the dskey for the custom data adapter, <name> is the option name, and <value> is the option value. The following example shows the HTML to pass an applet parameter to a custom data adapter. In this example, the dskey for the custom data adapter is ds1, the option name is option1, and the option value is value1. To pass an option in the <param> element: <param NAME=ds1option:option1 VALUE=value1> and if the parameter is passed in the <embed> tag, the HTML would look like this: <embed type=& code=& ARCHIVE=& ds1option:option1=value1> Applet parameter options are processed after options read from the Ds Options file, so a custom data adapter can use applet parameter options to override options previously read from the DS Options file. Applet parameter option names must match the names of fields in the Ds Options object. Unlike command-line options, applet parameter options cannot be arbitrary. If the name of an applet parameter option is not recognized, the parameter is ignored. Data Adapter Properties To support the use of command-line options and applet parameters in the setup and configuration of a custom data adapter, the procedure for initializing the data adapter properties has been changed. The method GmsRtViewDs.initDsProperties(GmsRtViewDsProperties) has been replaced by two methods, one to initialize the base properties for the adapter, and the other to initialize the control properties for the adapter. NOTE: This change requires existing custom data adapters to be modified to use the new property initialization methods in the GmsRtViewDs class. Data adapters that are not modified will generate run-time exceptions when used with the new com.sl.gmsjrtviewds library. The adapter base properties are initialized in the GmsRtViewDs constructor, before any option processing is performed. Because of this, command-line options, applet parameter options, and Ds Option file options are not available when the base properties are initialized. The method GmsRtViewDs.initDsBaseProperties(GmsRtViewDsBaseProperties) is used to initialize the adapter base properties. The base properties include the dskey, the adapter class name, the adapter description, and the option file name. The adapter control properties are initialized after all option processing has been performed. The method GmsRtViewDs.initDsControlProperties(GmsRtViewDsControlProperties) is used to initialize the adapter control properties. The control properties include all properties that were not specified as base properties above. For examples of the new property initialization methods, please refer to the following custom data adapter examples: myeventds, mypolledds, and mypolledds2.
15339: Custom Data Source named field attributes no longer collide
In previous versions, custom data source named user defined fields added by the addField method may have their attributes ( UIState (DialogFieldState), validity (DataFieldValidity)) modified by other custom data sources that define fields with the same name. This is no longer the case.
Data Historian
15148: High Availability support added for Historian
For higher availability, multiple Historians can be assigned to a server group to support failover between the servers. At any time, one historian in the group can be the primary and the other group members are standbys. Only the primary member writes to the database. Please note that this feature is intended to be used with a database system that also supports redundancy (through mirroring, clustering, or other techniques) so that any historian in the group can update the same virtual database. Each group member is assigned a port number and a priority. Each member monitors the status of the others in the group, using a socket connection on the assigned ports. The member with the highest priority is elected as the primary. If the primary member fails, is shut down, or loses its connection to the database, the standby member with the highest priority becomes the new primary. In the event of a tie in priorities, the member which was started first becomes the primary. Each historian in the group should be configured with the same set of data configuration files, retention options, data source options, etc. There is a new tab labeled Server Group for configuring the Historian's group options. By default, no server group is defined. To define a server group: 1. Select a port number on which this historian will accept connections from other historians in the group. The default is 3380. 2. Choose a priority for this historian. The default is 1. The online historian with the highest priority will become the primary historian, and will update the database. 3. For each other historian in the group, enter the hostname and port in the 'Member' text field. 4. Save the configuration. 5. Repeat steps 1 - 4 for the other historians in the group. The group options can also be specified on the command line as follows: -group_priority:N -group_port:N -group_member:host:port For example, with the following options the historian will have a priority of 2, will listen on port 3399, and will join a group that contains a historian on the host named kiwi using port 5566: run_historian -group_priority:2 -group_port:3399 -group_member:kiwi:5566 The following options start the historian with a priority of 2 and the group also contains the historian on kiwi. Both historians use the default port of 3380: run_historian -group_priority:2 -group_member:kiwi Note that a group priority >= 0 must be specified or the historian will not join the group. Note that replication of internal historian state between redundant servers is not yet supported. If the historian belongs to a group, the group status is shown in a table on the Server Group tab. The table has one row for the local historian plus one row for each other member in the group. The table has the following columns: 1) Member: The name of the member, which is "local" for the current copy of the historian, and the host:port configured for each of the other group members. 2) Status: One of the following values: primary - member is currently the primary historian server standby - member is running and has a database connection, but is lower priority than the primary no service - member is running but has no database connection (so it can't become the primary) no connection - the local historian can't establish a connection to this member 3) Priority: The priority configured for the member. 4) Start Time: The time that the member was started. This is used to resolve ties: if there is a tie among the standby members with the highest priority, the member with the earliest start time is selected as primary. For JMX monitoring, two boolean attributes have been added to the historian's MBean: PrimaryServer : true if the historian is the primary server in its group, or if it does not belong to a group. ConnectedToDatabase: true if the historian is connected to its historical databse.
Data Sources
15244: Unparseable Date Exception in Splunk Datasource (Linux/Japanese)
When connecting to Splunk, an unparseable date exception was thrown on Japanese Linux machines in the Tokyo time zone. This error has been fixed.
15331: Typo in launcher prevented Splunk jars being correctly added
In 5.1c1 the Splunk Data Adapter was not loaded automatically when you started RTView from the command line, but required that you add jaxen- core.jar to the RTV_USERPATH. This has been fixed, so that Splunk now automatically is included if you are licensed to use Splunk.
Cache Data Source
14992: New mechanism to initialize table schema
In the Cache Data Source, the Table Cache object (obj_cache_table) has been enhanced with a new property, "schemaTable". This property may be used to provide information about the structure of the data that will be stored in the cache before that data is actually available. This property may be attached to any data source that will provide the structure of a table, such as an SQL query or an XML file. (Only the table structure will be used from this attachment; if there is any row data it will be ignored.) Before the data becomes available, the cache Current and History tables will be initialized from the schema table and the Attach To Cache Data dialog will show the columns found there. After the data is available, the cache tables will contain the columns found in the schema table plus any additional columns found in the data. In addition, if there is a difference between the data types of the columns defined in the schema and the types found in the actual data, the schema types will be used, and the incoming data will be converted. Note that if the "timestampColumnName" property is also specified, a timestamp column will be added to the schema table (if it is not already there) as well as to the data.
15214: Cache objects can now be used in history config files
It is now possible to use Cache objects in history configuration files. Previously it was not possible to set the historyTableName property on a cache object. Now you can do this, making it possible to use a single .rtv file for both cache configuration and historian configuration. Limitation: Although you must enter a name in historyTableName for the object's data attachment to be used in the history definition, this name will be ignored for scalar cache objects (obj_cache_double.rtv). Data from a scalar cache defintion will be safed to the HISTORY table.
15248: Table with filtered cache no longer has incorrect data
In previous versions, a reference to an RTView cache that included a filter would sometimes transfer all data rows instead of the rows specific to the filter. The result would be additional points being plotted in a trend chart or shown in a table. This problem has been fixed and filtered references to cached data work as expected.
15253: Data not used by filtered attachment won't cause update
Filtering of RTView Cache data has been optimized so that a reference to a cache using a filter only transfers the specific rows that have been recently added to the cache. Previously rows would be transferred whenever any row in the cache changed.
SQL Data Source
14400: Built-in database RTViewDs provides SQL connection information
The SQL Data Adapter has been enhanced to provide a built-in database name, "RTViewDs", with two tables: Connections and Keys. The Connections table provides detailed information about each database connection and its status. The Keys table provides detailed timing and count information about each unique data attachment.
15263: LONG datatype for DB2 supported in SQL Datasource
The RTView Historian when used with DB2 will now correctly create tables with "long" values as BIGINT values for table columns that are defined as a LONG type. Previous versions incorrectly limited the precision to INTEGER type.
15318: Blank SQL queries no longer report -1 rows to console
The SQL Data Adapter now recognizes query strings of zero length and does not try to execute them or report query times. Previously, a report of -1 rows returned would be continuously printed. This problem has been fixed.
TIBCO Hawk Data Source
15239: New option to disable cache/merge of Hawk data rows
The TIBCO Hawk data source has been enhanced to support a new command line option, -hawknocache. This option controls the way that data updates are handled. By default, data attachments to multiple agents return an entire table with a row for each agent on each data update, even if only one row changed. With the -hawknocache option, the initial update contains all of the rows, but each subsequent update only includes the rows that have changed. This is useful when using Hawk data attachments as input to the cache data source or to the Historian. When this option is specified on the command line for the Display Builder or Configuration Utility, it will be included in HAWKOPTIONS.ini if the application options are saved.
Development and Build
15294: Upgrade to Tomcat 6.0
The Tomcat server that is packaged with RTView has been upgraded to version 6.0.18.
Display Server
15228: List box and combo box inside composite objects no longer empty
In release 5.0 and 5.1, list and combo boxes contained in a composite object and configured with a fixed set of list items (not attached to data) were shown as empty in the thin client. This is fixed.
15233: Multi-command on object in composite no longer causes exception
The Display Server will no longer throw a class cast exception if a multi-command is executed from an object within a composite object.
15264: executeOnLostFocusFlag errors in thin client fixed
The executeOnLostFocusFlag feature of the text edit control caused the following problems in the thin client, in the previous release. Both problems are fixed in this release. 1. If a text field with executeOnLostFocusFlag has focus, and the user clicks on another object in the display (a button, say), only the text field's action is executed. The other object's action is not executed unless the user clicks on it again. 2. In Firefox 2.0 only, if a text field with executeOnLostFocusFlag has focus and the user clicks on a link to open another display (in the left-hand frame of the default thin client page) the page displays the message "ERROR: no response from .../xmlreq.jsp". Afterwards, Firefox is sometimes unresponsive and must be closed. Firefox 3 and IE are not affected by this problem.
15265: Export to EXCEL failure in IE for long url has been fixed
In prior releases, the thin client "Export Table to Excel/Html" feature would sometimes fail in Internet Explorer if many substitutions were set on the display, resulting in a long URL for the export request. This is fixed.
15266: Incorrect drilll down behavior from control objects fixed
In release 5.0 and 5.1, if a control object is configured to set a variable and also to perform a drill down, then in the thin client only the set variable action is performed when the control is activated, the drill down is not. This problem is fixed.
15360: Runtime changes to table filterProperties no longer delayed
In the previous release, if substitutions or local variables were used in a table's filterProperties, changes made to the substitution or variable value sometimes did not take effect until the next refresh in the thin client. This problem has been fixed.
Drill Down
15347: Current Window drill down lags in performance in display server
The performance of the thin client when performing a drilldown in the current window to a display containing a table with many cells has been improved. Performance of large tables may still be sluggish with older browser versions. For best performance, use Firefox version 3 or Internet Explorer version 7.
Functions
15208: Functions within expressions now get new argument values
There was a problem with the Evaluate Expression functions such that if the expression used functions, its result would not be updated after the first time values were given to its variables, but would continue to return the result calculated from the first set of variables it received. (New values would be given to the variables either as incoming data changed, or as the same expression was applied to successive rows of a table.) This has been fixed.
15234: Conditional expression function added to expression evaluator
In the Display Builder, the Evaluate Expression family of functions have been enhanced with a new built-in function, condExpr, which evaluates conditional expressions. The function takes three arguments, an expression and two values. It evaluates the expression and if it is true it returns the first of the two values, else it returns the second. The expression is true if it evaluates to "1", "1.0", or "true" (case independent). As an example, consider the expression condExpr(%x > %y, "greater", "less"). If the value given to variable x is greater than the value given to variable y, the function will return the string "greater", else it will return the string "less".
15236: Better error handling for expression with no data available
Previously, if the Evaluate Expression As Double or Evaluate Expression As String functions had an argument attached to data, the expression was expecting a numeric argument, and the data was not available from the data source, the function would would sometimes display the misleading message "Expression is invalid". The functions now distinguish between missing data and an actual invalid expression by attempting to evaluate the expression with numeric zero values substituted for the missing data, and should only display that message when the expression is in fact invalid.
15293: New "Buff Table Rows" function
A function named 'Buffer Table Rows' has been added. It takes a table as an argument, and on each update it appends all the rows from the input table to the result table, which it returns. Another argument specifies the maximum number of rows that should be kept in the result table. Rows are removed from the top of the result table, if necessary, to maintain that limit. The 'Buffer Table Rows' function can also be useful in the following situation: RTView does not update a function immediately when one of its arguments is set. Instead, the update is briefly deferred to allow time for the other arguments to be set also. This improves performance but can result in lost (overwritten) argument values if the arguments are updated asynchronously and rapidly (from a high speed event data source, for example). In most cases this is not important since only the last (most recent) argument value is required. But if a function F needs all argument values the Buffer Table Rows function can be used to store all the rows received from a table argument until function F is updated. So F would be attached to the result of a Buffer Table Rows function, which would in turn be attached to the data source that updates the table. Once F has been updated, he function data source will clear all rows in the buffer table kept by the Buffer Table Rows function. At most one function should be attached to the result of any given Buffer Table Rows function. As described above, the buffer will be cleared when the function that is attached to the Buffer Table Rows result is updated. So if multiple functions need to buffer the same input data, a Buffer Table Rows function should be created for each.
15301: Expressions no longer fail if one %var is a substring of another
In the Display Builder, when creating an Evaluate Expression As Double/String function, if the variable names are chosen such that one name is a substring of another, the function would not evaluate correctly. This has been fixed.
15309: Exception if Replacement Values argument badly formed fixed
Previously, a badly formed Replacement Values argument in a Replace Value function would cause an exception. This is no longer the case. To be well formed, the Replacement Values argument should be a string that contains pairs of values and replacement values separated by :'s. If any of the values or replacement values specified in Replacement Values contains a space or a colon, it must be enclosed in single quotes. For example if Replacement Values contains 'Windows 2000':win2k 'Windows NT':winnt and Value is Windows NT, winnt will be returned.
15329: Function loops created at runtime by parameter changes detected
The function data source has been improved to detect function loops created at runtime by changing substitutions that affect function arguments.
General
15310: Menu bar when EMS Manager run from cmd prompt removed
In previous releases, the TIBCO EMS Manager came up with a menu bar when started from the command line, but without a menu bar when started from the Windows start menu. This has been fixed so that the menu bars are not showing when the TIBCO EMS Manager is started from the command line.
15316: New JMX MBeans for RTView status and function statistics
A set of JMX Mbeans has been added to RTView to provide run-time information about RTView status. The MBean RTView:name=Manager provides the application name, along with other useful information. The MBean RTView:name=DataServerConnections provides a table containing one row for each named Data Server connection showing the status of that connection. The MBean RTView:name=FunctionStatistics contains one row for each defined function, showing the panel in which it is defined and detailed timing and usage statistics NOTE: If an RTView client application is connected to a Data Server, starting the application with -dsenable:jmx will provide a way to access the local MBeans in the client, by making a data attachment to these MBeans with the Data Server set to <none>.
GmsTabularData
15308: Fix for crash while serializing GmsTabularData
A problem has been fixed which sometimes caused the data server to throw an array bounds exception or null pointer exception while it was serializing a GmsTabularData object to send to a client.
Licensing
15274: Vista licensing update
PINs generated on Vista are now accurate.
Object Library
11693: Label palette enhanced
The label palette has been enhanced. The following objects have been replaced by general objects: obj_text03 obj_label09 obj_label09s obj_label12 Existing displays that use these objects will automatically be converted to use the corresponding general object instead. There may be a small shift in the location of the text in these objects when they are converted to the general objects. Object grids using these objects will also automatically be converted to use the corresponding general objects and may show a small shift in the object layout. The following objects have been enhanced: obj_label05 obj_label05s obj_label11 obj_label11s These objects have been enhanced to support several new properties, such as gradients, rounded corners, and drop shadows. They have also been enhanced to support objWidth and objHeight, which allows better scaling of these objects. The fieldWidth property has been converted to objWidth. Existing displays will automatically be converted to use the new property. The text position and bgEdgeWidth will adjust slightly on existing displays that use these objects. The labelWidth property on obj_label11 and obj_label11s must now be less than 75% of the objWidth. If it is larger, the label portion of the object will be drawn as 75% of the objWidth. The following new properties are available on these objects: valueHighAlarmEnabledFlag * obj_label05 only valueHighWarningEnabledFlag * obj_label05 only bgBorderFlag bgColor bgEdgeWidth bgGradientColor2 bgGradientMode bgRaisedFlag bgRoundness bgShadowFlag bgStyle valueTextAlignX valueTextPosY labelBgColor labelTextAlignX labelTextPosY labelBgGradientMode labelBgGradientColor2 The following new objects have been added to the label palette: obj_vulabel01 obj_vulabel02 These objects are meant to replace obj_label06 and obj_label14 which were deprecated. They do not replace the old labels in displays. The old labels are still available for existing displays, but are not on the palette. These objects support all of the properties listed above for obj_label05 and obj_labell11, except for valueHighAlarmEnabledFlag and vlaueHighWarningFlag. In addition, they support the vuMeterMinWidth property which allows you to specify the minimum width for the vumeter. By default, the vumeter is 1/3 of the width of the value area. If a value larger than 1/3 of the width of the value area is specified for vuMeterMinWidth, the vumeter will use that width instead. The vumeter will not be drawn larger and 2/3 the width of the value area. The valueTextAlignX property for these objects aligns the text in the space between the vumeter and the edge of the object. The following objects have been deprecated. They are still available for existing displays, but have been removed from the palette: obj_label08 obj_label06 obj_label14 obj_digital_2_med obj_digital_3_smll obj_pricebox obj_label01 obj_label02 obj_label03 obj_label04 obj_drumlabel01 obj_drumlabel02 Note that the object grid previously used obj_label01 if nothing was specified for the iconProperties string. Since that object has been deprecated, the object grid now uses obj_circ2d_ilvx_ra4 as its default object.
15191: visFlag property now respects 0.0 as dbl or string
In the Display Builder, if the visFlag property of an object is attached to a data source (e.g. a function) which supplies a double value of 0.0 or a string value of "0.0", the object remained visible. This has been corrected.
15221: General objects that support a label and a valueString added
Two new objects have been added to the general palette, obj_rect_ilvs and obj_circ2d_ilvs, that support a label and a value string. These objects behave just like obj_rect_ilv and obj_circ2d_ilv, except that they have valueString instead of value. The valueFormat and valueDivisor properties are not supported on this object as the valueString property takes a string.
15267: Add bgBorderColor to general objects, tables, graphs + composite
A new property bgBorderColor has been added to all of the objects on the Tables, Graphs, Labels and Composite tabs of the Object Palette. It has also been added to the m_basemodel background model and to the rectangular objects in the General tab of the Object Palette. The circular objects on the General tab already supported this feature with a property named bgEdgeColor which has been renamed to bgBorderColor. This property sets the color of the edge of the object. Objects in existing displays will have a dark grey (color 16) bgBorderColor.
Bar Charts
15333: New scrollbarStartAtMaxFlag property for starting knob position
The bar graph has a new property named scrollbarStartAtMaxFlag. This property can be used to control the initial position of the graph's scrollbar knob. If scrollbarStartAtMaxFlag is checked, the scrollbar knob will initially be positioned so that the bar corresponding to the last row in valueTable is visible. On a bar graph with vertical bars, this means that the knob will be in its rightmost position, while on a bar graph with horizontal bars the knob will be in its bottommost position. If scrollbarStartAtMaxFlag is unchecked (the default) the knob will be in its leftmost (topmost) position, so that the bar for the first row in valueTable is visible. Regardless of the value of the scrollbarStartAtMaxFlag property, if the scrollbar knob is dragged to the left or right (or top or bottom) edge, it will 'stick' in that position if the number of rows in valueTable changes, and accordingly show either the bar for the first or last row in valueTable.
Composite Object
15196: Button control in composite no longer needs to be pressed twice
In previous releases, if a control outside of a composite object had focus, it would take 2 mouse clicks to activate a control inside a composite. This has been fixed.
15210: Composite obj keeps properties if rtvName is a local variable.
In previous releases, if the rtvName property of a composite was attached to data, the standard composite properties would use their default values even if they had been set to other values. This has been fixed.
15224: List boxes do not execute action command
In release 5.0 and 5.1 the command for a list box contained in a composite object was not executed. This is fixed.
15241: Composite object enhanced with option to be non-opaque
The composite object has been enhanced with a new property, bgOpaqueFlag. This property allows you to set the both the background rectangle and the background model in the composite display to be opaque or transparent. When deselected, neither the composite background nor the model background will be drawn. The model background is only affected if the default background model is used. Otherwise, the bgOpaqueFlag will only affect the background rectangle. Double-buffering is disabled in the composite display when the bgOpaqueFlag is off, so some displays may flicker when updating.
Control Objects
11907: Calendar widgets added
A new date chooser control (obj_c1datechooser) has been added to the Controls tab of the Object Palette to allow users to specify dates and times and set these either in an action command or to a local variable. The date chooser is on the controls palette. You can either enter a date by typing into the text field, or you can click the calendar button to popup the calendar to select a date. Like the other controls, the date chooser is disabled in the main window of the Display Builder to enable editing. Similar to the text edit controls, the date chooser has a selectedValue field to specify the initial date value and a varToSet field to specify a local var to set. The local var gets set and the actionCommand gets executed when either a date is typed in, then the user presses enter or clicks out of the field, or if the user selects a date from the popup calendar. If a date is specified in the date field, it will be used to set the initial date (and time if specified) in the calendar. If no date is specified in the date field, the popup calendar will use the current date and time. The date chooser has a dateFormat field to specify the format to be used. If no dateFormat is specified, a locale dependant format is used. This format controls 2 things. First, it controls the format in which you must enter a date if you type it into the field. Second, it controls the format of the output to a local var or action command. You can see the dateFormat in the tooltip if you hover the mouse over the text field. The dateFormat should be specified using the format specifiers from the SimpleDateFormat class. The following format specifiers are not supported for the Display Server: G, w, W, D, F, E, k, K, S, z, Z In the java version, the text entry field validates the date string as you enter it. It is very strict about allowing only dates in the format specified. In the Display Server version, the parsing is more flexible, but not guaranteed unless the date entered is in the same format as the dateFormat. No validation is done in the text entry field in the Display Server. Backslashes (\) are not supported in dateFormats. Since the dateFormat controls both the input and the output of the date chooser, information not included in the dateFormat will be lost. For example, if the date format is MMMM dd, yyyy (ex January 01, 2000), and the timeEntryEnabledFlag is on, even if you enter a time, it will not be stored since it is not included in the dateFormat. If you specify a dateFormat including the time such as MM/dd/yyyy hh:mm, the seconds you enter will be lost and if you specified a date in the PM, it will be stored in the AM since that is the default and am/pm was not included in the dateFormat. The timeEntryEnabledFlag toggles the visibility of the Time field in the popup calendar. Times entered into this field must be in the following format: hh:mm:ss a. When the timeEntryEnabledFlag is on, an OK and Cancel button are added to the calendar, so you can select a date and enter a time before closing the popup. If the timeEntryEnabledFlag is off, the popup calendar closes when you select a date. The maximumDate and minimumDate properties control the selectable dates in the popup calendar. Dates before the minimumDate will be disabled and dates after the maximumDate will be disabled. It is recommended that you enter an initial date in the value range when using these properties so the user will not have to navigate to a valid date. The date chooser object is localized as follows: 1. The Time field, and OK and Cancel buttons are localized by SL. Currently, only English and Japanese are available. 2. In the Display Builder, Display Viewer and Display Viewer Applet, the month and day names will use the language settings on the client system. 3. In the Display Server, the month and day names can be localized by replacing the date.js file in the Display Servlet with a localized version. To do this, go to servlets\rtvdisplay in your RTView installation. Extract the appropriate date*.js file from datejs_loc.zip for your language. Rename this file to date.js in the rtvdisplay directory and rebuild the Display Servlet war file. The default date.js is a copy of date-en-US.js from the datejs_loc.zip file. The java version of the date chooser control uses JCalendar 1.3.2 which is distributed under Lesser GPL and can be downloaded from www.toedter.com/en/jcalendar. The Display Server version of the date chooser control uses the Datejs date library for parsing and formatting dates and times. The Datejs library subclasses the standard javascript Date object. If you embed a display with the date chooser control inside your javascript application, it may pickup the Datejs date class instead of the standard date class. The Datejs library is distributed under the MIT License and can be downloaded at http://www.datejs.com.
15034: Added executeOnKeystrokeFlag to text edit & text area controls
A property named executeOnKeystrokeFlag has been added to the text edit and text area controls. If checked, each keystroke that modifies the text in the control will set the control's varToSet variable and execute its actionCommand, if any, using the modified text string. This feature is supported in all deployments. In a thin client deployment, there may be a delays between the keystroke and the response, depending on the speed of the network and server.
15304: Password Control has been added to the Controls palette
A password field has been added to the Controls tab of the object palette. This object works just like a text field, except that instead of displaying the entered text, it displays asterisks (*). The properties on this object are the same as the properties on the Text Edit control.
Fx Bar Chart
15079: New barShape "3D Rectangle" added
A new bar shape has been added to the Fx Bar graph. Named 3D Rectangle and found under barShape on the Object Properties grid, this shapes depth can be set using the draw3dDepth setting under Layouts. Note that the Layouts draw3dFlag setting is ignored when using the 3D Rectangle bar shape.
15101: Fx Bar Animation added
Transition effects have now been added to the Fx Bar graph to animate the display of data as it both appears and disappears from the chart. Various settings have been added to help in the control of these animations. Where to find them: On the Object Properties grid under the "Transitions" heading on the Object Properties barEntranceDuration: The length of time in milliseconds that the transition animation takes to display incoming data. barExitDuration: The length of time in milliseconds that the transition animation takes to hide data prior to new data being displayed. barEntranceTrigger: Determines whether the animation will be displayed with each data update, or only when the chart is initially displayed. barExitTrigger: Determines whether the animation will be displayed with each data update, or only when the chart is initially displayed. barEntranceType: The type of animation in effect when data is being displayed: None, Interpolate, Zoom Series, Zoom Chart, Slide Left, Slide Right, Slide Up, Slide Down, Wipe Left, Wipe Right, Wipe Up, Wipe Down. barExitType: The type of animation in effect when data is being hidden: None, Zoom Series, Zoom Chart, Slide Left, Slide Right, Slide Up, Slide Down, Wipe Left, Wipe Right, Wipe Up, Wipe Down.
Fx Trend Chart
14890: Line style, mark color/style, and alarm properties support added
The Fx trend graph now supports the same alarm properties as supported in obj_trendgraph02. Also, the following trace properties have been added to the Fx trend graph: traceNLineStyle traceNMarkStyle traceNMarkColor markDefaultSize where N is a trace number. For each of the new properties, the property values and corresponding behavior is the same as in obj_trendgraph02, with the following additions: If an alarm mark color is set to 'Default', the marks will be drawn in the correpsonding alarm trace color. If an alarm trace color is set to 'Default', the trace color for the corresponding trace will be used.
14938: y-Axis values now at end points when yValueMin does not equal 0
Previously, if the yValueMin of the FX Trend Graph was any value other than 0, the numbers displayed on the y-axis would not begin at the lowest value (yValueMin) and end at the highest value (yValueMax). The axis range would be accurate, but the numbers printed along it were not at the end points. This has been fixed.
Pie Charts
14765: Flex Pie Chart Added
A new Fx Pie Graph object has been added. It supports much of the functionality of the standard Pie Graph and adds some additional functionality. Features Added: Transitions - various entrance and exit transition effects can be set. They are as follows: exitType offers various animation effects which alter how older data is removed from view. These include, "Zoom Series", "Zoom Chart", "Slide Left", "Slide Right", "Slide Up", "Slide Down", "Wipe Left", "Wipe Right", "Wipe Up", "Wipe Down". The default is "None". entranceType same as above, but with the addition of the "Interpolate" effect. This property determines how new data is displayed on the chart. exitDuration - this sets the duration of the Exit animation in milliseconds. entranceType - this sets the duration of the Entrance animation in milliseconds. entranceTrigger -> (Once, On Update) Default Once - this sets whether the Entrance animation happens only on initial display or at every data update exitTrigger -> (Once, On Update) Default Once - this sets whether the Exit animation happens only when leaving the current data set being viewed (Once) or every time the current data set is updated (On Update) Any combination of the available effects can be set for each FxPie Graph. It is important to note that the duration values play a significant role in the overall effect of the transitions. The appropriate value ultimately depends upon the particular transition type(s) and the number of bars and series displayed. Take time to experiment to find the best results. Wedge Properties: The FxPie Graph adds additional wedge properties not available in the standard Pie Graph. They are: wedgeExplodeRadiusPercent - A number from 0 to 100, specifying the desired percentage of the total radius that the wedges of the pie series will appear exploded from the center. Wedge Data Labels: The FxPie Graph supports data labels that display information about each data point. Labels are different from ToolTips in that they are always visible and do not react to mouse movements. To add labels to your FxPie Graph, set the wedgeLabelPosition property on the series to a value other than none. To remove labels from your FxPie Graph, set the wedgeLabelPosition property to none. The default value is none. The other values, "callout", "inside", "insideWithCallout" and "outside" are described here: callout: Draws labels in two vertical stacks on either side of the pie. Shrinks the pie area if necessary to make room for the labels. Draws key lines from each label to the associated wedge. Shrinks labels as necessary to fit the space provided. inside: Draws labels inside the pie. Shrinks labels to ensure that they do not overlap each other. Any label that cannot fit as drawn using the wedgeLabelTextSize, is hidden from view. insideWithCallout: Draws labels inside the pie, but if labels are shrunk below a legible size, they are converted to callout labels. outside: Draws labels around the boundary of the pie. wedgeLabelTextColor - this property sets the text color for the wedgeLabels. The default is black. wedgeLabelTextFont - this property sets the font type for the wedgeLabels. The default is SansSerif wedgeLabelTextSize - this property sets the fonts size for the wedgeLabels. The default is 10. An additional feature of the FxPie Graph is that clicking on any wedge will explode that wedge. Clicking the wedge a second time will unexplode it. The above properties are specific to the Fx Pie Graph. The properties listed below are the full set of properties supported in this release. Where applicable, their behavior and default values are identical to those in the standard Pie Graph. Any exceptions, including the newer properties described above, are noted. Background: ** bg3dFlag - same as FxBar and FxTrend bgColor ** bgGradientFlag - same as FxBar and FxTrend Data: rowSeriesFlag valueTable DataFormat: labelColumnFormat valueFormat Data Label: columnDisplayNames labelColumnName rowLabelVisFlag rowNameVisFlag Historian: HistoryTableName historyTableRowNameFlag Interaction: command commandCloseWindowOnSuccess commandConfirm commandConfirmText drillDownColumnsSubs drillDownSelectMode drillDownTarget mouseOverFlag Label: label labelTextAlignX labelTextColor labelTextFont ** labelTextSize - same as FxBar and FxTrend Legend: legendBgColor ** legendBgGradientFlag - same as FxBar and FxTrend legendPercentVisFlag ** legendPosition - same as FxBar and FxTrend ** legendTextColor - same as FxBar and FxTrend ** legendTextFont - same as FxBar and FxTrend ** legendTextSize - same as FxBar and FxTrend legendValueVisFlag legendVisFlag legendWidthPercent Object: objHeight objName objWidth objX objY visFlag Transitions: *entranceDuration - NEW *entranceTrigger - NEW *entranceType - NEW *exitDuration - NEW *exitTrigger - NEW *exitType - NEW Wedge: * wedgeExplodeRadiusPercent - NEW * wedgeLabelPosition - NEW * wedgeLabelTextColor - NEW * wedgeLabelTextFont - NEW * wedgeLabelTextSize - NEW wedgeProperties
Stock Chart
15229: Double.NaN no longer problematic in overlay traces
In the stock chart object, overlay traces now handle NaN data values correctly. In prior releases, if the initial data value(s) applied to an overlay trace were NaN, the trace and its y-axis were sometimes drawn incorrectly.
Trend Charts
15269: Trendgraph no longer plots spurious data if alarm props change
If a trendgraph's alarm properties (e.g. valueHighAlarm) are attached to data, this no longer causes the trendgraph to replot old, invalid data points, as was occasionally the case in prior releases.
Oracle Coherence Monitor
15257: Provide option to show all caches from all services on one page
It is now possible in the OCM to select all Services and see the activity and capacity for all caches across all services on a single page. Simply select "All Services" wherever the Service: selector is available to see all the caches on all services.
15258: Improve Cache Service page to show more useful information
The Cache Services display has been enhanced to provide more useful information.
15259: Added ability to shorten long cache names
Long cache names can now be shortened for display in the RTView OC Monitor. By default, cache names longer than 28 chars will show only the first 14 characters followed by a ".." and the last 14 characters. This format can be controlled by a substitution variable $cacheNameFormat contained in the OPTIONS.ini file. By default it is set to 14*14. Users may change this to N*M where N represents the number of initial characters to display, and M represents the number of ending characters to display. This format substitution may also be set to override what is in the OPTIONS.ini by using the command line option: -sub:$cacheNameFormat:N*M
15260: Option to use process name as the location name
A new command line option -processnames has been added to indicate that the Process Name is to be used as the Location Name for all nodes.
15261: Boolean updating of Enabled properly supported in Alert Admin
The Alert Administration page now supports all databases without change to the rtv files. Previously there was an issue working with databases that do not support a boolean type, but this has been corrected.
15287: Excessive data no longer sent by Data Server to OCM
When the OCM is used in conjunction with the Data Server, excessive amounts of data were being transferred to the OCM and it would continually increase. This problem has been corrected.
15297: Log4J messages available from each node
A feature has been added to the Oracle Coherence Monitor to permit users to see the Log4J messages coming from the Coherence nodes. If a Coherence node is outputting log4j messages, and its "Application" name is assigned to be the same as its Location (member.machine.rack.site), then the messages will appear in a drilldown window that can be selected from the Node Summary page. Note that the LOG4JOPTIONS.ini file must be configured to make a connection to the appropriate Log4J SocketHubAppender.
Security
15181: Security enhanced to provide server side login
The following method has been added to the GmsCustomUserManager class, to allow the custom user manager to request validation from the default data server:
public int validateLoginOnDefaultDataServer(java.lang.String userName, java.lang.String password, java.util.Vector<java.lang.String> rolesReturn)
userName
- the name of the user to validatepassword
- the password to validate
15357: Digital Signature has been updated to be good until 12/2011
The digital signature of the jars in lib\signed_jars.zip has been updated. It now expires in December of 2011.
Substitution
15243: Drill down behavior of tables and graphs enhanced.
The drill down behavior of tables and graphs has been enhanced. Previously, if a table or graph had the drillDownSelectMode set to Anywhere, drilling down on an element would set the drill down subs, but the subs would not be cleared when drilling down on a non-element part of the table or graph. The new behavior clears the subs when the drill down occurs on a non-element part of the table or graph. Additionally, when the table has the multiSelectFlag turned on, if the user deselects all of the rows in the table, the drill down substitutions are cleared.
Viewer - Java Web Start
15219: File handling now resolves relative paths against server
In previous releases, the Java Web Start deploiyment resolved relative paths against the client system. This has been changed so that relative file paths are resolved against the JWS codebase on the server. Files with absolute paths are still resolved against the client machine. This change applies to all files read by RTView including .rtv files, include files, configuration files and images.
Version 5.1c1 Release Notes
15056: Composite object data synchronization problem fixed
In the prior release, if the "substitutions" property on a composite object was changed by a drilldown on the display containing the composite, in some situations the objects in the composite would continue to use data attachments that corresponded to the previous value of the substitutions property. This is fixed.
Alerts
15021: Crash if ; delimited list has been fixed
In previous releases, RTView would crash if a ; delimited list of threshold values was entered into any threshold beside valueHighAlert. This has been fixed.
Commands
14878: JMX command in multiple commands no longer throws exception
In the Display Builder, if multiple commands were defined for an object, and the command set included a JMX command, an IllegalComponentState exception would be printed to the console when the Define Command dialog was closed. This has been fixed.
15116: <None> data server option now works for commands
In the prior release, if a command was configured with Data Server =
, the command was directed to the default data server, rather than being executed locally. This is fixed.
Customization
10558: New Custom Data Adapter API
The Custom Data Adapter API has been released for use in developing data adapters to external data sources. For more details, please refer to the Customization section of the RTView User Guide.
12256: Customized color palette now supported in Display Builder
RTView has been enhanced to allow users to define custom colors to use in their displays. To define a custom color, go to the Custom Colors tab in the Application Options dialog. Click Add to add a new color or Delete to delete a color. To modify a color, edit the corresponding row in the table. Color index values must be a number greater than or equal to 5000. Mouseover the color in the custom color table to see the rgb value for that color. Custom colors are saved to COLORS.ini when you click Save in the Application Options dialog. This COLORS.ini file must be deployed with your RTView application. A Custom Color tab has been added to the standard RTView color chooser so that you can select a custom color in the same way you would select a standard color. Note that RTView stores color indexes for the object properties, not rgb values. Therefore, if you have an object in a display that uses a custom color and you delete that color, or change the index of that color, the object property that uses the original color index will display white. Limitations =========== 1. Some objects cache their colors and therefore do not update when a custom color definition changes. Some examples: bar graph legend, pie wedges and legend, some control object properties. For these objects, you will either have to restart RTView or reload the display to see the color change. 2. Flex object store rgb values for all colors (even if you selected a color index). This causes 2 problems: 1. If you assign a custom color to a flex object, then change the custom color definition, the flex object will not update (since it stored the rgb value of the custom color instead of the index). The only way to update it is to manually pick the new color in the builder. 2. If you have a custom color with the same rgb value as a standard color, and you apply the custom color to the flex object, if you close and re-open the color picker on the flex object, the standard color will be selected, not the custom color. This is again because the flex object stores the rgb value. The color chooser for the flex objects uses the rgb value to look up the index, so it will find the one in the standard color list first. 3. The custom color table is static. Therefore, multiple applets running in the same VM must share a single custom color table.
Data Historian
10387: Record Retention options now apply to user defined tables
The Record Retention options now apply to user-specified history tables, named using the historyTableName property. These history tables can now be purged on startup of the historian, and can be limited to the specified retention time period. If a user has created the timestamp column(s) manually, they must follow the same naming convention as the history tables created automatically, i.e. they must be named TIME_STAMP and/or TIME_STAMP_LS depending on the Timestamp Type.
10455: Auto-creation of user-defined history tables and columns
The RTView Historian will now automatically create the necessary history tables in the database if they have not been created by the user. An SQL data type appropriate for the specified database is selected for each of the RTView data types. Using the -verbose option, the specific "create table" SQL command used to create the table can be viewed.
13814: Retention options no longer ignored when Data Caching is enabled
Retention options are no longer ignored when Data Caching is enabled.
13827: Database name can now be set for for ODBC connections
The Database name for the Historian can now be set in the GUI interface to the Historian. If the name is changed and the configuration saved, the name will be remembered when the Historian is restarted. The command line argument -dbname:NAME can also be used to set the name of the database. NOTE: This name is only used for ODBC references.
14393: Improved DATE column type support
The RTView Historian now properly handles columns of type DATE, writing the data to the database using a format that is appropriate for the specific database being used. A DATE column is created in the database in an appropriate type, and the date itself is inserted using the format appropriate for each database.
15029: Historian will now attempt to reconnect to database
The Historian will now attempt to reconnect to the database if the connection is broken.
15030: Numeric data no longer incorrectly inserted due to quotes
Previously, the insert statement used by the RTView Historian to put table rows into the database would generate an error for some databases, due to incorrect use of apostrophe around numeric data types. This problem has been corrected. The insert statement should be correct for all RTView data types across all supported SQL databases.
15031: Historian support added for KDB time series database
The KDB time series database is now supported in the historian. Use the -kdbformat command line argument to output insert statements in the KDB format. Automatic creation of tables is NOT supported, nor is purging on startup. The tables must be created ahead of time and purged by the user.
15046: Option to store Historian-supplied timestamp as true date type
In previous versions, the historian would write two timestamp columns with each record, stored as strings: TIMESTAMP and TIMESTAMP_LS. Now, the -timestamp: command line option is provided to offer more control over how the timestamp is written to the database. The options are: -timestamp:none - do not store timestamp -timestamp:sql - add single SQL timestamp -timestamp:str - add 2 string form, for compatibility When the -timestamp:sql form is used, only a single TIME_STAMP column is written using a standard SQL TIMESTAMP data type. The Timestamp Type can also be configured in the Historian GUI interface and saved in the HISTORY.ini configuration file so it is not needed on the command line.
15051: Improved BOOLEAN column support
The RTView Historian now properly handles the BOOLEAN data type properly across all supported databases.
15052: New option to rebuild history tables on startup
The -rebuildtables option is now available to force all of the historian-specified tables to rebuild, even if they already exist in the database. The HISTORY and HISTORY_S tables are rebuilt on startup of the historian. User-specified history tables are rebuilt on- demand when data rows are first received for each table. Limitation: The -rebuildtables option does not support the historyTableRowNameFlag. If you have enabled this property in your configuration file, you will need to create the table manually.
15057: New option to include column names in the insert statement
The -insertcolumnnames command line option is now available to force the Historian to include column names in the database insert statements for user-specified history tables. This is useful when the Historian is adding data to existing tables and the column order is not an exact match or the insert statement contains a subset of the existing table columns. Note: this option does not apply to the HISTORY and HISTORY_S tables, only to user-specified tables.
15067: Historian retention mechanism refined
Previously, the Historian would check for records that exceeded the retention period at the half-way point of the retention period, ie. every 12 hours if the retention period was 24 hours. The maximum duration between checks has been set to be 60 minutes. Additionally, a new command line argument has been added to indicate how frequently you would like the Historian to check for old records that need to be removed. -retentionMax:nn where nn is in minutes.
15117: Better handling of spaces in column names
If the name of a column in a table being saved to the database contains a space, the column name is now wrapped in quotes.
Data Server
14338: High Availability added to Display Server and Data Server
1. Background To increase server availability in deployments using the Data Server or Display Server, RTView client applications can now specify a primary and a backup server. If the primary server is unavailable, the client will failover to the backup server. In the Display Builder and Display Viewer, a primary and a backup server can be specified for the default Data Server and also for each named Data Server. The primary server and backup server are each specified as a connection string, using either a hostname and port, or a URL that corresponds to an instance of the rtvdata servlet. These are specified in the Data Server tab of the Options dialog in the Builder, or on the command line when launching the Builder or Viewer. In the rtvdata and rtvdisplay servlets, the primary and backup servers are specified in the servlet's properties file. At startup, the client will connect to the primary server if available, otherwise it will connect to the backup server. If neither is available, the client will periodically retry connecting to both. If the client connects to either the primary or the backup, and later the connection is lost, it will then try to connect to the other server. If a client connects to a backup server and later the primary server becomes available, the client will not switch to the primary unless the connection to the backup server is lost. When a set of Data Servers are used as a primary and backup(s), all the servers should use the same RTView configuration files (*OPTIONS.ini) and should have access to the same external data sources, so that displays in the client will appear the same regardless of which server is connected. 2. Display Builder and Display Viewer usage: For example, if the primary default Data Server is run on a host named Kiwi and the backup is run on a host named Dodo, both using the default Data Server port (3278), then on the Data Server tab of the Options dialog, the following would be specified: Data Server Mode: Read Data from Server Primary Server: Kiwi:3278 Backup Server: Dodo:3278 Or, if the client is using the rtvdata servlet to connect to the Data Server via http, the following URLs might be specified: Primary Server: http://Kiwi:8080/rtvdata Backup Server: http://Dodo:8080/rtvdata Each URL corresponds to an instance of the rtvdata servlet, which is in turn configured to connect to an instance of the Data Server. The primary & backup servers can also be specified on the command line. For the default dataserver, the syntax is: -dataserver:remote:<primary>,<backup1>,<backup2>... For example: run_builder -dataserver:remote:XBC:3278,Dodo:3278 or run_builder -dataserver:remote:http://Kiwi:8080/rtvdata,http://Dodo:8080/rtvdata_backup For a Named Data Server, the syntax is: -dataserver:name=<name>;connect=<primary>,<backup1>,<backup2>... For example: run_builder -dataserver:name=Baltimore;connect=http://balt1/rtvdata,http://balt2/rtvdata 3. Servlet usage: The rtvdata servlet can be configured to have a primary and a backup Data Server, by editing its servlet.properties file, then rebuilding and redeploying the servlet. For example, these entries correspond to the primary and backup servers in the previous example: # primary data server host & port ServiceHost=Kiwi ServicePort=3278 # backup data server host & port ServiceBackup=Dodo:3278 Above, note that the primary server and port are specified in 2 separate properties, as in prior releases, while the backup server is specified by a single property. If necessary, multiple backup servers can be specified, separated by commaers, for example: ServiceBackup=Dodo:3278,Stork:3553 The rtvdisplay servlet, used in a Display Server deployment, also allows a primary and a backup server to be specified by editing the rtvdisplay.properties file, then rebuilding and redeploying the servlet. For example: # primary display server host & port DisplayServerHost=Kiwi DisplayServerPort=3279 # backup display server & port DisplayServerBackup=Dodo:5678 4. Standby mode: To avoid the overhead of maintaining the alert and cache data sources in a backup server, the server can be started in "warm standby mode" by specifying the -standby:warm option on the command line. In this case, the server delats the following actions until the first client connects: 1) loading global definition files. 2) loading alert definition files. 3) loading cache definition files. 4) preloading display files specified on command line or ini file. Note that, although this reduces overhead, the alert and cache data sources will not start collecting data until the first client connects, so they may be "empty" at that time. Limitation: The primary and backup servers do not synchronize their internal states as they run. So even if the servers use the same configuration files at startup, after a failover occurs a client display may change because of differences between the cache data source and alert data source states in the servers, such as: - alerts that were acknowledged on one server would still be unacknowledged on the other - if alert definition files were loaded or unloaded on one server but not others, the alert configuration would differ - backup server was started in standby mode, so tables in cache and alert data source are empty when first client connects
15126: Get Data Server Connection Status function added
A function named Get Data Server Connection Status has been added. This function returns a table with status information about the connections from the Display Builder/Viewer to the default Data Server and any Named Data Servers. The table contains one row for each connection, with the following columns: Name. Contains either "__default" for the default Data Server, or the name of a Named Data Server. Connected. Contains a boolean value: true if the server connection is operational, otherwise false. Status. Contains one of the following strings: 'OK' if connection is operational, 'no connection' if there is no connection to the server, or 'no service' if there is an http connection to the rtvdata servlet but the servlet has no connection to its Data Server. ConnectionString. Contains either the URL for an http connection to the rtvdata servlet, or a hostname:port for a direct socket connection to a Data Server. ReceiveCount. The number of data transmissions (pushes) received from the server. ReceiveTime. The time of the most recent data transmission from the server.
Data Sources
Cache Data Source
14913: Cache no longer empty on startup for asynchronous data
In previous versions, objects attached to cache data could be empty on start up if the cache was listening to an update-once data attachment that had not yet returned data. This has been fixed.
SQL Data Source
15028: SQL Data Attach Dialog now retains size and position
The SQL attach data dialog now remembers its size throughout a Display Builder session if resized.
15064: Added option to interpret SMALLINT type as BOOLEAN
The -smallintbooleans option has been added to the SQL Data Adapter. This option forces RTView to interpret the SQL SMALLINT data type as a BOOLEAN, so that RTView tables displaying the data show a checkbox for columns of this type.
15081: Improved logic for detection of lost connection
The logic for detection of lost connections in SQL Ds has been improved.
StreamBase Data Source
14945: Support added for high availability Streambase configurations
The RTView Data Adapter for StreamBase has been enhanced to support High-Availability StreamBase applications as follows: (1) Support for URI lists When defining a StreamBase connection in the Application Options dialog you may now specify a list of StreamBase URIs. This allows your RTView application to connect to a StreamBase application running on multiple servers.The URIs should be entered in the text area one per line. (2) Support for custom Dequeue Result Interceptors A Dequeue Result Interceptor is a Java class whose processResult() method is called by the StreamBase application in the course of dequeuing each tuple. In this method you may make decisions about the dequeue process based for example on the status of the servers used by your application. For example, in an application where two servers are both dequeueing tuples but only one is designated the "leader", you may choose to suppress the tuples from the "non-leader" server. You specify a Dequeue Result Interceptor for a given connection by supplying the name of a Java class which will be instantiated by the StreamBase Data Adapter. The class must be found on the RTV_USERPATH. For more information on StreamBase High-Availability features, see http://streambase.com/developers/docs/latest/admin/highavail.html.
TIBCO Hawk Data Source
14947: BusinessWorks Displays in the Hawk Monitor
The hawkmonitor demo has been enhanced to include displays that allow you to monitor your TIBCO BusinessWorks applications.
TIBCO Rendezvous Data Source
15124: Statistics data now output as type Long
The data type for all metric columns stored in tables generated from rvtrace are now LONG instead of INTEGER
XML Data Source
15140: <none> removed from Data Server options for xml attachments
The xml data adapter does not support the DataServer=<none> option, since it is overridden by the xmlredirect option. Until this problem is resolved, the <none> item has been removed from the Data Server dropdown list in the XML Attach-to-Data dialog.
Display Server
15060: Display Server status information now available
The thin client now supports a status window that shows the name of the current RTView display, the time that the display was last refreshed, the URL and connection status for the rtvdisplay servlet, and the hostname and port used by the servlet to connect to the Display Server. This status window is opened by selecting a new item labeled 'Status' on the thin client's popup (context) menu. Also, error handling has been improved in the thin client. In prior releases, an error message was shown in the display page if the servlet could not connect to the Display Server, but no error message appeared if the client could not connect to the web server, the app server, or the rtvdisplay servlet. As of this release, an appropriate error message will be displayed for each of those conditions too.
15143: Horizontal grid lines fixed for Firefox 3.0
In Firefox 3.0, the thin client did not draw horizontal grid lines in the table object. This is fixed.
15144: Sliders and scrollbars fixed for Firefox 3.0
In Firefox 3.0, the scale (slider) control and scrollbars on graph objects did not work in the thin client. These problems are fixed.
15145: Table cell contents no longer overflow in Firefox 3.0
In Firefox 3.0, the thin client did not clip text properly in a table cell, allowing the text to spill over into the adjacent column. This is fixed.
15193: web.xml updated for single-signon for Tomcat compatability
The file servlets/rtvdisplayweb.xml.auth_example has been updated for compatibility with Tomcat 5.5.15 or newer. This file is an example of how web.xml should be modified to support servlet authentication. The previous version of the file used * as a wildcard in the <role-name> element but that is no longer supported by Tomcat.
Functions
14688: Replace Value enhanced to return a user-specified default value
The Replace Value function has been enhanced to accept an additional argument, the Default Value. If there is no match found in the Replacement Values, the Default Value will be returned, unless the Return Value If No Match is set to 1, in which case the original Value will be returned.
14766: New Expression Evaluator Functions
The following functions have been added to RTView. Evaluate Expression As Double Evaluate Expression As String Evaluate Expression By Row The Evaluate Expression As Double function substitutes the given arguments into the given expression and evaluates it, returning the result as a double. The Evaluate Expression As String function substitutes the given arguments into the given expression and evaluates it, returning the result as a string. (Note that Boolean true or false values will be returned as 1.0 and 0.0 respectively.) The expression is written using variables, whose names must be specified in the expression py prefixing them with "%", and may use standard arithmetic and logical operators as well as a variety of mathematical and string functions. It may also include numeric and string constants (string constants must be enclosed in double-quotes (")). An example of such an expression is "%var1 + %var2". When the expression is modified and the text field activated (by pressing Enter in the field or navigating to another field) the dialog will display a text field for each variable into which values may be entered. Values whose form is numeric are substituted into the expression as numbers; otherwise they are substituted into the expression as strings. If a value whose form is numeric needs to be treated as a string, perhaps to serve as an argument to a string function, surround the variable in the expression with double- quotes, and its value will always be used as a string. An example of such an expression is "length("%var1") + %var2". The Evaluate Expression By Row function evaluates the given expression for all rows of the given table, using values from the columns specified, and returns the results in a new table column. The expression is written using variables, whose names must be specified in the expression py prefixing them with "%", and may use standard arithmetic and logical operators as well as a variety of mathematical and string functions. It may also include numeric and string constants (string constants must be enclosed in double quotes ("). An example of such an expression is "%col1 + %col2". When the expression is modified and the text field activated (by pressing Enter in the field or navigating to another field) the dialog will display a text field for each variable. Entries are taken as names of columns in the given table from which values will be substituted for the corresponding variables in the expression. The types of the values are taken from the types of the columns. Numeric and Boolean values are converted to double. Date columns are not supported. If a value whose column is numeric needs to be treated as a string, perhaps to serve as an argument to a string function, surround the variable in the expression with double- quotes, and its value will always be used as a string. An example of such an expression is "length("%col1") + %col2". The Result Column Name argument specifies a column that will be added to the table. The Result Column Type argument specifies the type of that column, and may be either "double" ("d") or "string" ("s").
14906: Rename Column Function added
A new function Rename Columns has been added that allows the user to rename the columns in a table. The user can rename a single column or a list of columns.
15087: Edit Function Dialog now remembers size and position
In the Display Builder, the Edit Function dialog now remembers its size and position after the first time it is opened in a given invocation of the Display Builder. The first time it is opened it will have a default size and position as previously.
General
15137: NPE in stockchart when cursorFlag on and trace visFlag off fixed
In prior releases, an exception was thrown by the stock chart if the cursorFlag was on, the visFlag for the priceTrace was off, and the mouse was moved over the chart. This is fixed.
GmsTabularData
15120: Row filter with greater than 256 entries supported
In previous releases an array bounds exception was thrown if a data attachment had a row filter with more than 256 entries. This is fixed.
Local Variables
14658: Selection behavior in Variables dialog improved
In previous versions, it was difficult to select the previously edited item in the Variables dialog. This problem has been fixed.
14665: User can no longer deselect Use as Sub inadvertently
In previous releases, the Use As Substitution checkbox in the Variables dialog would not work correctly if that was the first field selected after a new variable name was entered. This has been fixed.
Localization
15085: Double Text Entry field supports locale-specific separators
The Double Text Entry field now displays and supports entry of locale specific decimal separators in the Display Viewer. The Display Server supports the display of locale specific decimal separators, but not the entry of them.
Object Library
14773: Generic Flex object supported
A "Custom Fx Object" has been added to the Fx Graphs palette in the Display Builder. This allows the user to specify the name of a Flash SWF file to be displayed by the object. The SWF can be a compiled Flex application. The Flex application can be coded to expose properties to RTView, using the Flex library package named com.sl.gmsext, which is now included with RTView. These properties will appear in the Display Builder's property sheet, and can be assigned constant values or attached to data sources. See the example for more information.
15005: Some objects enhanced to support rounded corners and shadows
The objects on the General, Graphs, Tables and Composite tabs of the palette have been enhanced to support rounded corners and shadows (the circles on the General tab were only enhanced to support shadows). The bg3dFlag property has been renamed on these objects to bgStyle. The bgStyle property supports 3 options: 1. Rectangle - Use a flat rectangle for the background. This is the same as the old behavior when the bg3dFlag was off. 2. Rectangle - Use a 3D rectangle for the background. This is the same as the old behavior when the bg3DFlag was on. If this option is selected, use the bgEdgeWidth to set the 3D depth. 3. Round Rectangle - Use a flat rounded rectangle for the background. When this option is selected, use the new bgRoundness property to set the arcLength of the rounded corners. NOTE: If the bgRoundness property is set to a value greater than half of the objWidth or objHeight property, half of the smaller value of objWidth and objHeight will be used instead. For example, if the objWidth is 100 and the objHeight is 50, if you enter a value greater than 25 for the bgRoundness, 25 will be used instead (half the value of objHeight).
15007: Some objects enhanced to support tab and title labels
All of the objects on the Graphs, Tables and Composite tabs of the palette and the rectangular objects on the General tab have been enhanced to support tab and title labels. The objects on the General tab already supported a labelTextPosY property, so 2 new options, Tab Top and Title Top have been added to the list of options for this property: 1. Title Top - The label is positioned on the top line of the background rectangle. 2. Tab Top - The label is drawn in a tab above the top of the background rectangle. The height of the tab is dependent on the height of the text. The width of the tab is dependent on the length of the text, but a minimum width can be specified in the the new labelMinTabWidth property. On General objects, the labelTextPosX Outside Right and Outside Left options are not supported if the labelTextPosY is Title Top or Tab Top. The objects on the Tables, Graphs and Composite tabs did not previously support a Y position for the labels. A new property named labelTextAlignY has been added to these objects with the following properties in addition to the Title Top and Tab Top described above: 1. Outside Top - the label is positioned well above the background rectangle. 2. Top - The label is positioned just above the background rectangle. 3. Inside Top - The label is positioned inside the top of the background rectangle. This is consistent with the previous position of the label. The Tables, Graphs and Composite objects were also enhanced with a bgBorderFlag property. If selected, a border is drawn around the background rectangle, otherwise the border is not drawn.
15069: Gradient fill supports direction
The objects on the General, Graphs, Tables and Composite tabs of the palette as well as the display background have been enhanced to support gradient direction. The gradient direction has been applied to the background (bgGradientMode) of these objects. For the object grid, the gradient direction has also been applied to the grid background (fgGradientMode). On the graph objects, the gradient direction has also been applied to the legend background (legendBgGradientMode) and the plot area background (grid/plot/traceBgGradientMode). The following properties on these objects have been renamed to support the gradient directions: bgGradientFlag -> bgGradientMode fgGradientFlag -> fgGradientMode legendBgGradientFlag -> legendBgGradientMode plotBgGradientFlag -> plotBgGradientMode traceBgGradientFlag -> traceBgGradientMode gridBgGradientFlag -> gridBgGradientMode The *GradientMode properties supports the following options: 1. None - no gradient. 2. Diagonal Edge - The gradient is drawn at a 45 degree angle from the top left to the bottom right corner of the object. This is the same as the gradient previously used if the bgGradientFlag was selected. 3. Diagonal Center - The gradient is drawn at a 45 degree angle from the center to the top left and the bottom right corners of the object. 4. Horizontal Edge - The gradient is drawn horizontally from the top to the bottom of the object. 5. Horizontal Top - The gradient is drawn horizontally from the center to the top and bottom of the object. 6. Vertical Edge - The gradient is drawn vertically from the left to the right of the object. 7. Vertical Center - The gradient is drawn vertically from the center to the left and right of the object. Additionally, the objects on the Graphs, Tables and Composite tabs of the palette have been enhanced to support the bgRaisedFlag. This property reverses the direction of the gradient and of the 3D edge if bgStyle is 3D Rectangle.
15070: Gradient fill supports second color
The objects on the General, Graphs, Tables and Composite tabs of the palette as well as the display background have been enhanced to support a second gradient color. Previously, the gradient would use the bgColor and white. The new bgGradientColor2 property allows you to set a color other than white for the 2nd color in the gradient applied to the object background. The object grid also support fgGradientColor2 which applies the 2nd gradient color to the grid area. The graph objects also support legendBgGradientColor2 which applies the 2nd gradient color to the legend background and grid/plot/traceBgGradientColor2 which applies the 2nd gradient color to the plot area.
15074: Some initial object defaults changed
The initial values of colors and fonts have been modified for some objects to make them more consistent with the other objects.
Control Objects
11620: Commands can now contain string '$value'
A control object can now use '$value' in its command string. In prior releases, it was necessary to surround the string with backslashes, i.e. /'$value/'
12255: Multi-line support added to Button and Radio control objects
The buttons and radio button groups have been enhanced to support multi- line labels. Use \n to specify a new line in your label.
14899