Caché Release Notes and Upgrade Checklist Archive
New and Enhanced Features for Caché 2014.1
[Back] [Next]
Go to:

The following major, new features have been added to Caché for this release:

Furthermore, this version of Caché has been improved and enhanced in the following areas:
In addition, many more localized improvements and corrections are also included. In particular, if you are upgrading an existing installation, please review the detailed list of changes in the Upgrade Checklist.
Major New Features
Support For REST
This version introduces support for handling REST requests, routing them to a given namespace, and processing them. This support is at the level of the CSP Gateway.
This feature is predicated on providing a Web application that routes all requests to a given handler class that, based on a URL mapping facility, then dispatches the calls to the correct class and method implementation. With this feature, Caché can now handle any REST interface; for data transport, Caché supports XML or JSON.
This feature is not available on OpenVMS systems.
See Creating REST Services in Caché.
Rapid Application Development
64-bit Version of Activate
Caché applications on 64-bit systems can now take advantage of the new 64-bit version of Activate on all supported platforms and use 64-bit ActiveX objects.
While the client technology that communicates over a protocol can be 32-bit or 64-bit, the server technology must consist entirely of only 32–bit or only 64-bit modules.
Support for Websocket Protocol RFC6455
In this release, InterSystems introduces support for WebSocket connections. Application developers may access to this technology via the class, %CSP.WebSocket which provides a protocol to build richer web applications, and a more lively user experience. WebSockets form a TCP connection between the server and the client over port number 80, and the protocol is supported by Google Chrome, Internet Explorer, Firefox, Safari and Opera.
Cube Manager for DeepSee
DeepSee previously included methods to build and synchronize cubes. With this release, DeepSee now includes the Cube Manager which provides a user interface for scheduling when to build and synchronize cubes. The Cube Manager is available from the DeepSee Admin menu, and allows you to define groups of cubes and the update frequency for these cubes.
The DeepSee Tools menu also includes the Model Browser which displays a diagram showing the relationships between cubes. This high-level diagram helps you understand how cubes are related.
Domain Definition Infrastructure
This new feature is of interest to all users that want to integrate the creation of iKnow Domains in a regular class-based implementation. It allows an application to specify an iKnow domain definition as part of a user class that inherits from %iKnow.DomainDefinition. When the class is compiled, the compiler will create an iKnow domain corresponding to the settings specified in the Domain XData XML. All “static” settings defined for the domain will be set at compile-time through calls to the underlying APIs.
The application can also define sources of text data to be loaded into the domain. This data becomes part of a generated %Build() method in a new class named [classname].Domain. When invoked, the method loads all data from the defined locations into the domain. Matching and metrics elements can be associated with the domain; these will be applied on all sources added to the domain.
Framework for Text Categorization
This new feature is a framework for categorizing text indexed by iKnow. Classification takes place in two different steps: building a classification model, and running the classification model against text to be categorized.
A classification model is defined through an XML structure (XData block) in a subclass of %iKnow.Classification.Classifier. A classification model can be run on random input text or on an existing iKnow source by using its %CategorizeText() or %Categorize() methods. This will return an ordered array with the categories associated with the text sorted according to their “score”.
Globals C API
The C version of the Globals API provides an extremely fast, flexible persistence model that can be used to implement a wide variety of storage paradigms.  It provides the same functionality as the Java, .NET, and Node.js Globals APIs, for developers working in C, C++, or any language that supports the C calling conventions.  It can be used directly by application developers, and can also be used to implement versions of the Globals API in other languages such as Ruby.
UDP Socket Support
In this version, Caché introduces a new class, %NET.UDP which enables application developers to use UDP packets for communication. UDP is a connectionless way to communicate, and is often used for broadcasting or multicasting. For additional information and examples, please refer to the class documentation for %NET.UDP.
Unified Trigger Support for Objects and SQL
In this version, Caché adds support for triggers in Objects that equate exactly to SQL Triggers. In addition to the various %OnXXXX callback methods (which continue to be supported), you can now define a trigger that will fire for INSERT/UPDATE/DELETE events whether they are done via Object or SQL access. This change provides a consistent behavior regardless of whether data is manipulated as class instances or SQL tables. See the Caché Objectscript Reference for further details.
In this release, the SQL parser now accepts the “Insert OR Update” syntax. The statement executes just like an INSERT; but when Unique constraints are encountered, it assumes you want to overwrite that record instead of inserting a new row. This syntax is very useful in the case where you want to see if a record exists in the database before deciding to do an insert or update. Now you can manage this in one execution.
If SQL matches on a Unique check but the UPDATE would change the IDKEY value, the UPDATE will fail as this is an illegal operation.
64-bit Versions CacheActiveX and ConnectionGUI
Caché nows supports 64-bit versions of CacheActiveX and ConnectionGUI. Their connection info continues to be taken from the 32-bit registry.
ZEN Reports Generate HTML5 in HTML Mode
Beginning with this release, the HTML output of Zen Reports has changed. Caché will now have the HTML generator create a valid HTML DOCTYPE in the output, and the generated code generated will match the standard as well. This should result in optimal rendering for modern browsers that support the HTML5 standard.
Performance and Scalability
MDX Performance Diagnostic
The new utility class %DeepSee.Diagnostics.MDXUtils collects performance diagnostic information for MDX queries. The utility records, for a given MDX query, such information as cube statistics, query path, query statistics, and system resource usage. If an MDX query appears to have a performance problem, this utility provides information that can help diagnose the problem.
Support for Enterprise Manager
Beginning with this release, Caché, Ensemble, and HealthShare enable support for Enterprise Manager. Enterprise Manager is a free application that can manage registered instances and apply uniform values to settings in groups that share the same configuration. The first version helps customers to perform centralized configuration, security, and user definition management.
Enterprise Manager is a separate kit from Caché and Ensemble that you can download for free from the InterSystems ftp server. For further details, contact your account team, InterSystems Order Processing, or the InterSystems World Wide Response Center (WRC).
Reduce Memory Allocation in the iKnow Engine
This release optimizes the way in which dynamic memory is allocated and deallocated in the iKnow Engine. It improves the throughput speed of the iKnow Engine by 15% to 25%, depending on the platform. The change is active on all platforms except Solaris where the performance remains as it was in previous releases.
8-way Interleaved AES-NI CBC Decryption
Processor vendors continue to improve the hardware acceleration support for AES encryption. In this release, Caché now detects if the processor supports eight-way pipelines. By taking advantage of this enhancement, the performance of AES-NI further increases.
Push Subquery Conditions into UNION Legs
The Caché release includes an optimization for SQL performance involving sub queries. In prior versions, when a UNION query included a conditional expression on a sub query, the entire result set would be executed and then reprocessed to apply the conditional check. With this optimization, the conditional check is applied on the first pass through the data greatly enhancing the performance of the operation.
No code change is required other than purging cached queries to take advantage of this feature.
Support Separate Selectivity for Frequent Outlier Values
In this version, TuneTable includes an additional feature. Certain outlier values, where conditions on these values sometimes result in decreased performance, have now been coded to produce inflated selectivity values. The intent of the change is that these values will result in queries that avoid using indices containing these outliers. This change should result in greater likelihood of queries using the best possible index.
For an application to benefit from this change, TuneTable must be used, and any existing cached queries purged, so the optimizer will take advantage of the new selectivity values.
ROLLBACK Performance
ROLLBACK performance has been improved in this release by roughly 20%-40% over previous versions. This improvement was measured while rolling back single (large) transactions, as well as bulk rollback (as would occur during startup recovery). 
Database Defragmentation And Compaction
This release reintroduces two database management capabilities:
  1. Compact a database.
    This feature moves free space distributed throughout the database to its end. You can then return the free space to the underlying file system by truncating the database (the truncation feature was already available in previous versions)
  2. Defragment globals in a database.
    This feature rearranges global blocks within the database so that all of the blocks containing data for a given global are in consecutive sequence. 
While these capabilities are not needed for day-to-day operation, and most systems may never need them, they can make certain special operations easier. In prior versions, when the type of database reorganization described above was needed, it required downtime while using the ^GBLOCKCOPY utility to migrate the data to a new database.
Details on these and related capabilities are described in the System Administrator documentation.
Both of these capabilities had appeared in certain previous releases and both had been removed in the more recent releases. These features should not be used in any version prior to 2014.1. These capabilities have been revised and are available for use again now in 2014.1.
Reliability, Availability, Maintainability, Monitoring
License Registration in Cloud Environment
When an InterSystems license key is activated on a Caché, Ensemble, or HealthShare instance in the Public Cloud (for example, Amazon EC2), InterSystems may collect system information (# of processors, OS type, license key ID, etc.), and send this information to a secure server in the InterSystems network. The scope of the information collected is limited to that needed for an audit of InterSystems license usage in the Public Cloud.
Implement a Secure Shell for Debugging
Administrators may now provide users terminal access with a secure debug shell to better control access to sensitive data. This new shell protects against malicious role escalation and the injection of code to run with higher privileges.
Delegated Authentication Now Supports Two-Factor Authentication
With the release, application developers can now use the built-in mechanism for two-factor authentication from their custom authentication mechanism(s).
Technology Preview
This category is new with this release. It is intended as a way of introducing and providing access to new software capabilities that InterSystems believes will be useful in enhancing the effectiveness of existing and future applications.
The capabilities listed here are ready for use by customers, but they are not yet complete in functionality and design. Customers who take advantage of these capabilities must understand:
InterSystems strongly encourages those who incorporate these items in their software to provide feedback on their experiences.
iKnow Negation
InterSystems introduced this feature as experimental in Caché 2013.1 with focus on the English language. As of this release, negation is no longer experimental and iKnow Negation functionality is available for all iKnow supported languages (Dutch, English, French, German, Spanish, Portuguese).
The uniqueness of iKnow negation detection rests on the fact that not only linguistic markers of negation in a sentence (such as “not”, “no” and “didn't”) are detected, but that iKnow also marks their semantic scope and span. In the sentence, “John has no signs of headache but has a fever.”, the linguistic negation marker is “no”. The iKnow negation detection will not only detect the marker but also its extent. iKnow will establish that “John has no signs of headache” is the negative part of the sentence. An important aspect of this is that the span of a negation is limited to the length of the semantic pathway of which the negation is a part.
Studio Refactoring
This release InterSystems includes support for the refactoring of code in the Studio. Initially, the available options will be:
Additional options will be incorporated in future releases.
In this release, refactoring is only available when Studio is connected to a Windows server.
iKnow Text Indexing and Searching
A new, experimental feature in this release is the iFind index. iFind is a feature that supports full text searching with all the functionality expected by the advanced user coupled with the benefits from the iKnow semantic analysis.
iFind is a specific index that can be defined on all %String and %CharacterStream properties of a class. If the class already contains data, the index can be built by running the %BuildIndices() method of that class. The iFind index is automatically maintained every time the %Save() method of the class is invoked, just as for other indices. Once the iFind index is correctly defined and built, it can be used in SQL queries by invoking the Search_Index() function. The name of the iFind index to use and the search string are the two main arguments to specify for Search_Index.
Currently, there are two restrictions on iFind indices: A) they can only be defined on bitmap-friendly classes (negative ID value are disallowed), and B) out-of-the-box deployment is only possible for classes using Default storage.
The iFind index has 3 different flavors:
  1. Basic — The basic index is intended for cases where the %String or %CharacterStream data only have to be searched without any need for semantic understanding or analysis of the data. This kind of iFind index supports the following pure search operations: simple string; wild-card string; word position; regular expression; stemmed word; and de-compounded word.
  2. Semantic — This index is intended to be used in the cases where a user wants to take advantage of the concept and relation detection capabilities of iKnow in %String or %CharacterStream data. In addition to the operations supported by iFind.Basic index, an iFind.Semantic index allows some more advanced “semantic” search operations such as entity-based search or entity-expansion search.
  3. Analytic — An analytic index is intended for cases where the user wants to take advantage of the full analytical capabilities of iKnow. In addition to the operations supported by the basic and semantic indexes, an iFind.Analytic index allows some more advanced “analytical” search operations extending to the full range of elements generated by iKnow on top of the concept and relation detection.
    An iFind.Analytic index allows you to select records or record elements (such as concepts, relations, pathways) using semantic dominance, semantic proximity, pathway membership, and combinations of these. In addition, analytic index preparation automatically generates a series of class projections allowing direct access via a simple SQL query to the dominance, proximity, pathway, entity information per record generated by iKnow. A typical query supported by iFind.Analytic selects the top 100 dominant iKnow concepts in all sources containing the word “InterSystems”.
iKnow Customized Summaries
This feature was introduced in experimental form in Caché 2013.1 for those who desire to tune the content of iKnow generated summaries to their specific needs. This feature is now stabilized, it can now be used for all languages supported by iKnow (Dutch, English, French, German, Spanish, Portuguese) and the feature is ready for generalized usage.
Main parameters for tuning the summaries remain as they were:
The listed options can be set by means of an extra parameter in the SourceAPI.GetSummary method.
New Zen Support For Mobile Development
The version of Caché introduces a new helper page to aid mobile support in existing Zen applications. This new base page provides support for mobile specific notions such as multi touch events, geometry changes, rotation, and so on with appropriate callback support to enable users to handle these events programmatically. Some new widgets designed specifically for mobile devices like scribbleArea have been added to the Zen Component Library as well with matching samples.
Support For XSLT2
This version of Caché now provides support for XSLT Version 2, a significant advance in capability over XSLT Version 1. Among the new features Version 2 provides are:
These, and many other improvements/new features significantly increase the productivity of any XSLT programmer. Strong typing allows many errors to be caught at compile time and to be corrected immediately.
XSLT Version 2 functionality is available via the classes in the %XML.XSLT2 package.
XSLT2 functionality is not available on the OpenVMS platform.