Caché Release Notes and Upgrade Checklist Archive
New and Enhanced Features for Caché 2014.1
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
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
This feature is not available on OpenVMS systems.
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 32bit 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
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.
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.
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
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
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
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
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 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:
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
Defragment globals in a database.
feature rearranges global blocks within the database so that all of
the blocks containing data for a given global are in consecutive
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.
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
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
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 makes no backward compatibility guarantee
with future updates;
Customers may incorporate these capabilities in deployed
applications, but must first check with InterSystems to determine
best course of action;
Customers who deploy these capabilities in their applications
must commit to upgrading to the final released version.
InterSystems strongly encourages those who incorporate these
items in their software to provide feedback on their experiences.
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,
The uniqueness of iKnow negation detection rests on the fact
that not only linguistic markers of negation in a sentence (such as not
) 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.
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
of a class. If the class already contains data, the index can be built
by running the %BuildIndices()
that class. The iFind index is automatically maintained every time
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:
Basic The basic index is intended for cases
where the %String
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.
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
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.
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
Main parameters for tuning the summaries remain as they were:
force sentences to be included in the custom summary,
e. g. when summarizing a newspaper article it can be beneficial to
always include the first two sentences.
force inclusion or exclusions of sentences by listing
words and/or word groups. If a sentence contains one of the elements
in the list it will be included in the summary (or excluded from the
overweighting or underweighting certain words and/or
sentence parts. In this case the weight of sentences containing one
of the elements in the list will be adapted in accordance with the
weight instructions specified by the user. These adaptations will
influence the sentence rankings used in the summarization and include
or exclude the elements specified by the user if the context of the
text allows to do so.
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
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:
A more convenient and expressive transformation language
plus support for XPath 2.0 and the new XDM (XPath Data Model).
Strong typing, support for XSL schema types, and the
ability to define your own (schema) types. XPath 2.0 also includes
a new sequence type not present in Version 1.
A much more powerful functional language with improved
string processing, date and time handling, node-set manipulation,
and boolean operators.
The ability to define and write functions in pure
XSLT via the xsl:function instruction.
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.