Apama 10.1 Community Edition release announcement

The latest version of Apama Community Edition has arrived bringing many improvements including new connectivity options, usability improvements for Apama EPL, and integration for statistical computation with R.

Connectivity plug-in enhancements

Apama connectivity plug-ins allow your applications to communicate with the outside world.

  • HTTP server transport (new)
    • A new connectivity plug-in allowing Apama to handle HTTP requests and deliver events to a correlator . Security is provided using TLS and authentication using HTTP basic authentication.
  • MQTT transport
    • MQTT transport enhanced to allow use of TLS for providing secure communications
  • HTTP client transport
    • Configuration option basePath allows you to specify a path to prefix to the metadata.http.path property for all messages sent to a transport
    • TLS 1.2 is required when connecting to secure https URLs
  • Mapper codec
    • You can use forEach when specifying mapping rules for items provided in a sequence

This version of Apama also introduces a set of general miscellaneous EPL enhancements:

  • Event definitions can have a field annotated as being the unique message identifier – for working with reliable messaging
  • Plug-in chains can be created on demand from EPL rather than having to have them defined and created on startup
  • New C++ helper class (com::softwareag::connectivity::MapExtractor) provides an easy and type-safe way to extract values from map objects. This complements the equivalent class for Java that was added in Apama 10.0

EPL enhancements

EPL ‘any’ data type

The new ‘any’ data type in EPL allows variables to be defined that can store any other type of EPL data. This allows for simpler and more generic EPL code.

For example, using MemoryStore and updating a row with different datatypes can now be greatly simplified:

Without “any” type:

if a.pressure > row.getFloat("pressure") {
    row.setString("sensorId", a.sensorId);
    row.setString("type", a.type);
    row.setFloat("temperature", a.temperature);
    row.setFloat("pressure", a.pressure);
}

With “any” type:

if a.pressure > <float> row.get("pressure") {
    row.setAll(a);
}

MemoryStore enhancements

  • MemoryStore driver for TCStore (for Terracotta DB) is provided alongside the existing driver for BigMemory
  • MemoryStore EPL API works with new ‘any’ data type
    • Get a row as a dictionary using a single function
  • Access extra fields in a MemoryStore row that are not defined in the Apama schema
  • Force a row to be committed back to the table even if the table has been modified after the row was first obtained.

This version of Apama also introduces a set of general connectivity plug-in framework enhancements:

  • Use incrementCounter(string) to get a monotonically increasing integer for the string passed as the function argument in the scope of the correlator
  • The method context.iqSize() returns the number of elements in the context’s input queue
  • All string literals are now interned automatically (improving memory usage) and these interned strings are persisted in persistent correlators

R plug-in

A new EPL plug-in provides connectivity between Apama and R allowing you to execute statistical computations from within Apama.

This integration makes use of Rserve which uses TCP for communication with R, connecting via a hostname and port, to an R server running locally or remotely. The connectivity is synchronous and blocks execution, but if you want to create asynchronous connections then a sample project shows you how to do that.

Examples:

Connect to Rserve on localhost and default port:

com.apama.r.RConnection r :=
    com.apama.r.RFactory.open("localhost", 6311);

Set variables, get with correct Apama types

r.set("f", 98.765);
float fResult := r.evaluateAsFloat("f");

Generic evaluate , returns ‘any’ type:

any aResult := r.evaluate("c(TRUE, 1234, 'Hello')");

Load R script (requires APAMA_HOME in Rserve environment):

r.evaluateVoid("
source(file.path(Sys.getenv('APAMA_HOME'),'samples',
    'monitorscript','RPlugin','Rscript.R'))
    ");

Run function from loaded script

log "apama_func: " +
    r.evaluate("apama_func('Hello')").toString() at INFO;

Apama queries enhancements

Message loss can be prevented by using correlator-integrated JMS reliable messaging with your queries application.

Software AG Designer enhancements

When creating new EPL monitors or event definition files, basic templated code is automatically created to help you get started working with the new items:

/** This monitor is responsible for ... */
monitor MyMonitor {
    action onload(){
        log "Loaded monitor MyMonitor" at INFO;
 
    }
}

Correlator utility enhancements

  • Log levels for logging messages can be separately configured for individual categories, such as for specific connectivity plug-ins, using the correlator
  • Separate log files can now be specified by the correlator for the correlator and your application
  • Additional configuration, such as for engineConnect , can be specified in a correlator YAML configuration file
  • The engine_deploy utility now converts all Software AG Designer launch configuration to equivalent YAML options
  • The project-to-cdp macro can be used to create correlator deployment packages from Ant

10.1 full commercial edition

In addition to the above new features in Apama Community Edition, the full commercial edition of Apama 10.1 also includes improved integration with other Software AG products, enhanced web-based management and monitoring capabilities from Command Central, and additional support for Capital Markets. Please refer to the release notes for the complete set of new features in Apama 10.1.

Find out more

Apama 10.1 Community Edition is available now for you to download. More information about the new capabilities mentioned here and numerous other smaller improvements are described in the release notes and product documentation available with the downloads.

The Software AG Apama team is extremely proud of this new version. Please give Apama 10.1 a try and let us know how you get on!