This section lists the changes between Esper releases. The changes introduced in each release are split into the
following categories.

  • API changes: Any changes to the API, or the EPL or engine input and output that may impact existing
    users.
  • Major changes: Major new features that do not change existing functionality

Version 8.9.0

Released May 2, 2023

Requires Java 8 runtime or newer. Tested against Java 8 update 361, Java 11.0.19 and Java 17.0.7

Major changes

  • The following libraries are updated:
    • SLF4J is now 1.7.36 (slf4j-api-1.7.36.jar, previously at slf4j-api-1.7.30.jar; optionally use with Reload4J by adding slf4j-reload4j-1.7.36.jar)
    • Janino is now 3.1.9 (commons-compiler-3.1.9.jar and janino-3.1.9.jar, previously *3.1.6.jar)
    • Reload4J replaces Log4J 1.2 and is now the default log library; Esper still only depends on SLF4J so applications can use any logging library
  • Please review the changelog.txt file in the project root at Github for additional information.

API changes.

  • No changes.

Version 8.8.0

Released January 3, 2022

Requires Java 8 runtime or newer. Tested against Java 8 update 311, Java 11.0.12 and Java 17.0.1

Major changes

  • The following libraries are updated:
    • ANTLR is now 4.9.3 (antlr4-runtime-4.9.3.jar, previously antlr-runtime-4.7.2.jar)
    • Janino is now 3.1.6 (commons-compiler-3.1.6.jar and janino-3.1.6.jar, previously *3.1.0.jar)
  • For use of XML with XML-Schema (XSD): New jar files are required in classpath, namely "esper-common-xmlxsd-.jar" and "xercesImpl-2.12.1.jar" (see documentation)
  • Support for event precedence in insert-into
  • Support for inserting multiple rows in a single fire-and-forget insert
  • Support for lock activity logging
  • Support for the dot-operator to resolve a property name to a getter method
  • Support for substitution parameters for SQL relational database access in SQL query text expressions
  • Support for relational database SQL in fire-and-forget query from-clause
  • Support for null-value types in SQL type mapping
  • Please review the changelog.txt file in the project root at Github for additional information.
  • Note that Java 17.0.1 replaces the JVM-provided JavaScript.

API changes.

  • No changes.

Version 8.7.0

Released January 27, 2021

Requires Java 8 runtime or newer. Tested against Java 8 update 281, Java 11.0.10 and Java 15.0.2.

Major changes

  • Visual Studio Code Extension now has debugging support, see VSCode Marketplace
  • Support for EsperHA state backwards compatibility starting from this version
  • Support for module line item to have content line numbers and end line numbers
  • Support for dataflow EventBusSource operator to populate events of implicitly-created wrap event type
  • Reduced compile time and compiler output size for many types of typical statements and when using the compiler path
  • Many bug fixes and improvements across the code and documentation, please review the changelog.txt file in the project root at Github for additional information.
  • Note that Java 15.0.2 replaces the JVM-provided JavaScript.

API changes.

  • No changes.

Version 8.6.0

Released August 27, 2020

Requires Java 8 runtime or newer. Tested against Java 8 update 261 and Java 11.0.8.

Major changes

New: Visual Studio Code Extension for EPL. Download from the VSCode Marketplace.

For those updating from version 7 or older, please read Esper 8 - Information about Esper Version 8.

  • The following dependent jar files are upgraded:
    • SLF4J is now 1.7.30 (slf4j-api-1.7.30.jar, optionally use with Log4J by adding slf4j-log4j12-1.7.30.jar, previously at slf4j-api-1.7.28.jar)
  • Support for parameterized types (aka. generic types). Due to Java type erasure previous releases had limited support for parameterized types. This release tracks type parameters more comprehensively.
  • Support for queries without a from-clause
  • Support for the as-keyword for patterns in context conditions
  • Support for a compiler option to receive the compiler output for example for last-minute class analysis
  • Many bug fixes and improvements across the code and documentation, please review the changelog.txt file in the project root at Github for additional information.
  • Reduced compile time and compiler output size for many types of typical statements

API changes.

  • There are minor changes to some of the extension APIs due to support for parameterized types.
    Extension APIs now use EPType (in replacement of java.lang.Class) and EPChainableType (in replacement of EPType). Please review the extension SPI interfaces and examples.
    The changes only affect parameter and return type information that are provided to extensions and that extensions may return as result types.

Version 8.5.0

Released May 26, 2020

Requires Java 8 runtime or newer. Tested against Java 8 update 251 and Java 11.0.7.

Major changes

For those updating from version 7 or older, please read Esper 8 - Information about Esper Version 8

  • Support for all enumeration methods to have an index and size formal parameter
  • Support for the arrayof enumeration method
  • Support for array element expressions ([expr]) in chaining
  • Support for compiler filter plan logging
  • Support for compiler filter index planning to plan composite value expressions, composite lookupable expressions, composite boolean expressions and confirming and negating conditions
  • Support for inlined class to expose a plug-in single-row functions, aggregation functions and aggregation multi-functions
  • Support for inlined class to become a variable type
  • Support for audit to include runtime current time
  • Support for compiler flag that disallows inlined-classes
  • Support for mutation expressions in update-istream and on-set
  • Support for assignment left-hand-side array expressions
  • Support for the new-keyword to allow array length and initializer expressions
  • Many more improvements -- please review the changelog.txt file in the project root at Github for additional information.

No API changes.

Version 8.4.0

Released February 24, 2020

Requires Java 8 runtime or newer. Tested against Java 8 update 221 and Java 11.0.6.

Major changes

For those updating from version 7 or older, please read Esper 8 - Information about Esper Version 8

  • The following dependent jar files are upgraded:
    • SLF4J is now 1.7.28 (slf4j-api-1.7.28.jar, optionally use with Log4J by adding slf4j-log4j12-1.7.28.jar, previously at slf4j-api-1.7.26.jar)
  • Support for EPL to contain Java class code; In-lining Java code into EPL is useful for adding imperative code for example for library methods, for integration and for extension keeping EPL and code together in one place
  • Support for EPL for resetting table column aggregation state
  • Support for EPL for subqueries with fire-and-forget
  • Support for EPL for a variation of the "selectfrom" enumeration method that provides an index and count
  • Support for EPL for passing named events, event properties and variables to an expression
  • Support for API for staging and unstaging deployments, and for controlling time and event visiblity on the level of deployments
  • Support for API for getting the providing- and consuming dependencies of a deployment
  • Support for API for rollout deploying multiple compileds as a unit
  • Many bug fixes and improvements across the code and documentation, please review the changelog.txt file in the project root at Github for additional information.

No API changes.

Version 8.3.0

Released September 19, 2019

Requires Java 8 runtime or newer. Tested against Java 8 update 221 and Java 11.0.4.

Major changes

For those updating from version 7 or older, please read Esper 8 - Information about Esper Version 8

  • The following dependent jar files are upgraded:
    • SLF4J is now 1.7.26 (slf4j-api-1.7.26.jar, optionally use with Log4J by adding slf4j-log4j12-1.7.26.jar, previously at slf4j-api-1.7.25.jar)
    • ANTLR is now 4.7.2 (antlr4-runtime-4.7.2.jar, previously antlr-runtime-4.7.1.jar)
    • Janino is now 3.1.0 (commons-compiler-3.1.0.jar and janino-3.1.0.jar, previously *3.0.10.jar)
    • Avro (optional) is now 1.9.1 (avro-1.9.1.jar, previously avro-1.8.2)
  • Support for create-xml-schema allowing dynamic XML type definition
  • Support for defining a deployment-specific class loader
  • Support for defining new enumeration methods
  • Support for defining new datetime methods
  • Support for using application-provided classes with JSON event type
  • Support for customizing JSON parsing
  • Many bug fixes and improvements across the code and documentation, please review changelog.txt for additional information.

No API changes.

Version 8.2.0

Released June 5, 2019

Requires Java 8 runtime or newer. Tested against Java 8 update 211 and Java 11.0.3.

Major changes

For those updating from version 7 or older, please read Esper 8 - Information about Esper Version 8

  • Support for the JSON event type: This allows "create json schema" and make it possible to send JSON formatted text into the runtime as events.
    The compiler uses the JSON schema(s) to create a fast JSON parser and fast internal representation of parsed JSON. No external JSON library is required. The JSON parser has comparable and better performance compared to common JSON parsers. EsperIO gained JSON support.
  • Support for fast and memory-saving compound keys: For any composite keys out of two or more expressions the compiler produces a class that represents the composite key and that implements equals and hashCode. This is applicable to the group-by clause including rollup, data windows with keys (such as #unique, #firstunique, #groupwin, #rank), partition-by for keyed segmented contexts, contexts with distinct, the select-clause distinct keyword, the query planner when planning implicit and explicit indexes, create index, every-distinct, the partition-by clause for match-recognize, table column keyed-access expressions, the for-clause for grouped delivery and the distinctOf enumeration method.
  • Support for array-type values as part of keys: All expressions for use as keys, as listed above, now allow array-type values.
  • Support for resolving serializers and de-serializers (aka. serde) at compile time for use with Esper High Availability: The compiler is the best place to decide whether a serde is needed or not and therefore we are only resolving serdes when they are indeed needed for HA. At start/recovery time the runtime can simply load compiled EPL and the serdes are already associated making recovery or startup in general faster.
  • Many bug fixes and improvements across the code and documentation, please review changelog.txt for additional information.

No API changes.

Version 8.1.0

Released February 20, 2019

Requires Java 8 runtime or newer. Tested against Java 8 update 192 and Java 11.0.2.

Major changes

For those updating from version 7 or older, please read Esper 8 - Information about Esper Version 8

  • Support for parallel multi-threaded compiling of multi-statement modules
  • Support for named window on-delete silent delete
  • Support for crontab to have milliseconds
  • Support for aggregation methods
  • Support for nested events in online tools
  • Support for context conditions to list multiple crontabs
  • Support for event_identity_equals (returns a boolean value indicating whether two events are the same event)
  • Support for disabling script compile by configuration
  • Web application for managing horizontal scale-out EPL deployment, workers and partitions

No API changes.

Version 8.0.0

Released November 21, 2018 (we released a beta-1 on Oct. 23 2018 and a beta-2 on Nov. 2 2018).

Requires Java 8 runtime or newer. Tested against Java 8 update 192, Java 10.0.2 and Java 11 (Java 11 release of 2018-09-25).

Major changes

There are significant API changes. Esper version 8 is not a drop-in replacement for Esper-7 and earlier.

Please read more at Esper 8 - Information about Esper Version 8

Version 7.1.0

Released March 9, 2018.

Requires Java 8 runtime or newer, tested against Java 9.

Major changes

No major changes - Bug fix release.

  • Many bug fixes and improvements across the code and documentation, please review changelog.txt for additional information.

Version 7.0.0

Released November 29, 2017.

Requires Java 8 runtime or newer, tested against Java 9.

Major changes

  • Byte code generation ... generates byte code for all of result set processing, aggregation, having-clause, order-by and any interdependent expressions
  • Support for keyed contexts to have initiated-by and terminated-by
  • Support for obtaining context properties from context admin API
  • Support for registering listeners that receive context- and context-partition related activity
  • Support for on-merge to insert a new row without the need for a where-clause or match-clause
  • The Janino library is now a compile-time dependency. At runtime Janino is required by default; Janino is not required when byte code generation is disabled in the configuration.
  • The following dependent jar files are upgraded:
    - ANTLR runtime library version is now 4.7 (antlr-runtime-4.7.jar, previously antlr-runtime-4.5.3.jar)
    - CGLIB version is now 3.2.5 (cglib-nodep-3.2.5.jar, previously cglib-nodep-3.2.4.jar)
    - SLF4J is now 1.7.25 (slf4j-api-1.7.25.jar, optionally use with Log4J by adding slf4j-log4j12-1.7.25.jar, previously at slf4j-api-1.7.21.jar)
  • API or EPL Changes:
    - Event property types are boxed types except when the event type is a Java class and the property type is a primitive type. Expressions return boxed types.
    - In "create schema" when using "copyfrom" the copied properties are now always first and explicitly-listed properties are added last, in respect to property order.
    - The "groupwin" grouped window specification is now only allowed once per stream. In previous releases, in queries without more than one data window, it could be used multiple times.
    - In output-rate-limiting, the "enable_outputlimit_opt" hint is now the default behavior, resulting in output-rate-limiting needing less memory for most cases
  • Many bug fixes and improvements across the code and documentation, please review changelog.txt for additional information.

Version 6.1.0

Released June 20, 2017

Built and tested with JDK 8 (requires Java 8 runtime)

Major changes

  • Support for spatial point-region and MX-CIF quadtree indexes both filters and events
  • Support for "cast" to take a date format expression
  • Support for date-time "format" method to take a format expression
  • Support for a new time-to-live data window for use with watermarks
  • Support for all aggregation functions to receive a filter expression
  • Minor change in default configuration: By default the "share-view" settings is now false and "configuration.getEngineDefaults().getViewResources().setShareViews(false)" is the default.
  • Many small improvements across the code and documentation
  • Please review changelog.txt for additional information.

Version 6.0.1

Released March 16, 2017

Built and tested with JDK 8 (requires Java 8 runtime)

API and EPL Changes

We have very few backward-incompatible changes in API and EPL:

  • The @EventRepresentation annotation changed: it now takes a default parameter i.e. @EventRepresentation(map)
  • Minor change in behavior in respect to Object-array event types: When inserting a single column into an existing Object-array event type the engine would allow that column to become the property of a Object-array fragment, which was inconsistent with other types
  • Minor change to client API in CurrentTimeEvent to support microseconds: Rename of field "timeInMilliseconds" and CurrentTimeSpanEvent to "targetTime"
  • Minor change to deployment API EPDeploymentAdmin which now also declares InterruptedException and DeploymentLockException to indicate when a lock cannot be taken
  • Minor change to packages for classes in EsperIO CSV+File adapter: classes moved to "com.espertech.esperio.csv" and "com.espertech.esperio.file".
  • Minor change to packages for classes in EsperIO JMS adapter: classes moved to "com.espertech.esperio.jms"

Major changes

  • Requires Java 8
  • The following dependent jar files are upgraded:
    • ANTLR runtime library version is now 4.5.3 (antlr-runtime-4.5.3.jar) (previously antlr-runtime-4.5.3.jar)
    • CGLIB version is now 3.2.4 (cglib-nodep-3.2.4.jar) (previously cglib-nodep-3.1.jar)
    • SLF4J is now required (slf4j-api-1.7.21.jar) (commons-logging is no longer used) (optionally use with Log4J by adding slf4j-log4j12-1.7.21.jar)
  • Support for subqueries to use a having-clause
  • Support for Avro
  • Support for passing transient objects as part of configuration, for extensions that rely on injected objects
  • Support for view parameters to originate from context-provided properties
  • Support for overlapping and non-overlapping contexts without terminating condition, i.e. "create context PerSession initiated by SessionEvent" making "terminated by" optional.
  • Support for microsecond unit of time, allowing application to run either at millisecond and microsecond resolution; added new keywords "microseconds", "microsecond", "usec"
  • Support for deployment API to by default atomically deploy and undeploy all statements without the need to take an explicit lock; support for providing a timeout and backoff strategy
  • Support for user-defined functions to return EventBean-typed values
  • Support for scripts to return EventBean-typed values
  • Support for method invocation joins to call script and UDFs and to accept EventBean-typed values
  • Support for contained-event expressions to accept EventBean-typed values returned by the expression
  • Support for dataflow operator arguments to accept variables as part of the expression
  • Support for filter optimization to recognize "in"-keywords when used with array, map or Collection-type values
  • Support for plugging-in a provider for class-for-classname and classloader
  • Support for views to use #-syntax instead of namespace:name, i.e. "MyEvent#time(30)", and for views to have no parenthesis for empty parameter list
  • Support for multiple unidirectional streams for full outer joins
  • Support for Java-8 ZonedDateTime and LocalDateTime
  • New EsperIO Kafka input and output adapter
  • Many small improvements across the code and documentation
  • Please review changelog.txt for additional information.

Version 5.5.0

Released September 13, 2016

Built and tested with JDK 6; Tested with JDK 7 and JDK 8

Major changes

  • Support for methods that take varargs (methods that take an arbitrary number of values as parameters)
  • Support for subscribers to receive the EPStatement instance as a parameter
  • Support for configuring the size of the declared-expression value cache
  • Improved support for extensions for XML schema events
  • Added .NET NEsper -specific documentation, see appendixes
  • Please review changelog.txt for additional information.

Version 5.4.0

Released April 13, 2016

Built and tested with JDK 6; Tested with JDK 7 and JDK 8

Major changes

  • Support for configuring annotation-only imports and for implicit conversion for enumeration values in annotations
  • Please review changelog.txt for additional information.

Version 5.3.0

Released September 15, 2015

Built and tested with JDK 6; Tested with JDK 7 and JDK 8

Major changes

  • Support for match recognize to have a maximum state count
  • Support for output rate limiting hints
  • Support for filter expression rewrite hint
  • Support for stateless statements to have no listener dispatch or insert into latches
  • Support for configuring an engine-wide default time zone
  • Support for insert-into into a stream without any properties to use a select-clause that selects only "null"
  • Please review changelog.txt for additional information.

Version 5.2.0

Released March 3, 2015

Built and tested with JDK 6; Tested with JDK 7 and JDK 8

Major changes

  • Support for aggregation functions to specify the level of grouping in the parameter list, removing the
    need for separate subqueries for many use cases
  • Support for aggregation rollup in conjunction with tables
  • Support for a new pattern observer "timer:schedule" that supports the ISO8601 standard for
    scheduling
  • Support for match-recognize to have patterns that specify repetition (exact, N-or-more, between-N-and-M,
    between-0-and-M)
  • Support for match-recognize to have patterns that specify permutation, i.e. for A and B to become "A
    B" or "B A"
  • Support for the "new" expression to instantiate a given class
  • Support for substitution parameter to be given names so that they are available by name and not just by
    numeric position
  • Support for filter expressions that use "or" and "typeof" to optimize filter tree
    use for reverse index sharing
  • Support for "create schema" to specify "null" as a property type
  • Please review changelog.txt for additional information.

Version 5.1.0

Released Oct. 16, 2014

Built and tested with JDK 6; Tested with JDK 7 and JDK 8

Major changes

  • Support for tables. Tables introduce a number of new capabilities, allowing for more expressive EPL.
    • Tables allow multiple statements to aggregate into the same state (we call this
      co-aggregation)
    • Tables allow statements to co-locate aggregation state, update-in-place data and event data
      conveniently
    • Tables can be accessed using a convenient key-based expression, as well as in joins, subqueries
      etc. comparably to named windows
  • Support for the Count-min sketch (or CM sketch) probabilistic sub-linear space streaming algorithm and
    approximate streaming Top-K
  • Support for the new "countever" aggregation function that returns a count of events ever
    regardless of data windows
  • Additional API to query context partition instance count
  • Audit logging for context partitions
  • The match-recognize "define" clause is now optional
  • Support for loosely-scoped expressions using expression alias
  • CSV adapter now uses time-spans to advance time
  • Socket adapter CSV format now supports a property-ordered string without field names
  • Please review changelog.txt for additional information.

Version 5.0.0

Released April 14, 2014

Built and tested with JDK 6; Tested with JDK 7

  • The following dependent jar files are upgraded:
    • ANTLR runtime library version is now 4.1 (antlr-runtime-4.1.jar) (previously
      antlr-runtime-3.2.jar)
    • CGLIB version is now 3.1 (cglib-nodep-3.1.jar) (previously cglib-nodep-2.2.jar)
    • Commons-logging version is now 1.1.3 (commons-logging-1.1.3.jar) (previously
      commons-logging-1.1.1.jar)
    • (optionally) Log4j version is now 1.2.17 (log4j-1.2.17.jar) (previously log4j-1.2.16.jar)
  • Support for rollup and cube aggregation output. Support for SQL standard output and SQL keywords namely
    "rollup", "cube", "grouping sets", "grouping", "grouping_id".
  • Support for fire-and-forget insert-into queries using the "values" keyword i.e. "insert into
    ... values (...)"
  • Support for Java 8-style lambda syntax using the "->" operator the same way as "=>"
    as equivalent syntax
  • Support for context partitioned variables. Use "context ... create variable ..." to create a
    contex partitioned variable.
  • Support for method invocation joins to receive object-array events from application code
  • Support for query planner expression analysis hints that provide additional control over query planning
  • Support for the query planner for joins, subqueries, fire-and-forget and on-action queries to consider
    in-keyword expressions and "or"
  • Support for filter execution planning to consider "or"
  • Statements on unbound streams by default no longer retain the last event for use with the iterator API, and
    instead an application can specify @IterableUnbound or provide an engine configuration to have statements
    retain the last event
  • Statement names are now always trimmed
  • Applications that use isolated service providers must now set an engine-wide configuration flag to enable
    this feature
  • The "as" keyword in the select-clause is now optional
  • Improved rendering of expressions by rendering parenthesis according to precedence and by removing white
    space in expressions. This may affect statements where the select-clause does not name columns using "as"
    since they may receive a different column name compared to version 4.
  • We have changed time period expression month and year interval computation to become relative to the current
    time. This change disallows float-type values for year and month in a time interval.
  • Improved formatting and content of validation messages
  • Many performance related enhancements
  • Removed version 4 deprecated APIs
  • Please review changelog.txt for additional information.

Version 4.11.0

Released Jan. 6, 2014

Built and tested with JDK 6; Tested with JDK 7

EPL changes

  • When in a select-clause the "as" column name is surrounded with backticks (e.g. "select
    name as `somename` ...") the property name of the output event does no longer carry backticks (i.e.
    is "somename").

API changes

  • Among the object model API classes, the class PatternMatchUntilExpr now requires to set single-bounds as
    a separate expression parameter

Major changes

  • Support for patterns to suppress and discard overlapping matches
  • Support for match-recognize define-clause and measures-clause to use enumeration methods and array-index
    access for grouped variables
  • Support for match-recognize matching upon pattern state termination when used with interval
  • Support for overlapping context to specify "distinct"
  • Support for group-by clause in subqueries
  • Support for subqueries that select multiple columns to provide input to enumeration methods
  • Support for built-in annotations to be case-insensitive
  • Please review changelog.txt for additional information.

Version 4.10.0

Released Sept. 9, 2013

Built and tested with JDK 6; Tested with JDK 7

API changes

  • None.

Major changes

  • Support for context declarations to perform initiate or start immediately
  • Support for mutation expressions for merge and update
  • Support for parameterized fire-and-forget queries
  • Support for fire-and-forget queries to consider the "in" opertator for index lookup
  • Support for having-clause to have subquery
  • Support for fire-and-forget queries that insert-into a named window
  • Please review changelog.txt for additional information.

Version 4.9.0

Released March 4, 2013

Built and tested with JDK 6.0 Update 34; Tested with JDK 7.0 Update 10

API changes

  • None.

Major changes

  • Support for new minby, maxby and sorted aggregation functions
  • Support for context partition administration through a new API
  • Support for specifying a timezone as part of crontab schedules
  • Support for instance method invocation on enumeration values
  • Support for fire-and-forget (on-demand) queries that delete and update named windows
  • Support for passing EventBean and collection of EventBean to EPL-to-code method invocations
  • Support for an optional context object passed in EPL-to-code method invocations
  • Support for the expression window and expression batch window to the oldest and newest event so that
    expiry policies are easier to specify that compare event properties
  • New extension API for aggregation functions termed aggregation multi-function
  • Performance improvements, overall, and related to patterns and self-joins
  • Reduced memory utilization
  • Please review changelog.txt for additional information.

Version 4.8.0

Released January 4, 2013

Built and tested with JDK 6.0 Update 34, tested with JDK 7.0 Update 10

API changes

  • None.

Major changes

  • Support for "create expression" to declare an independent expression or script for use in
    other statements.
  • Support for an externally-timed batch window (win:ext_timed_batch).
  • Support for array variables.
  • Support for enumeration methods to operate on collections of scalar values (ESPER-717).
  • Support for on-select-delete: On-select can now also delete the selected rows.
  • Support for insert-into clause to use "irstream" keyword to produce the insert as well as the
    remove stream.
  • Support for a new "istream" function that returns true if the event is part of the insert
    stream and false if the event is part of the remove stream.
  • Support for marking an index as a unique index.
  • Many bug fixes and other improvements; Please see history or changelog.txt for additional information.

Version 4.7.0

Released October 8, 2012

Built and tested with JDK 6.0 Update 34, tested with JDK 7.0 Update 4

API changes

  • None.

Major changes

  • Many performance-related changes and also related to support of the new EsperHA release.
  • Many bug fixes and other improvements; Please see history or changelog.txt for additional information.

Version 4.6.0

Released April 27, 2012

Built and tested with JDK 6.0 Update 29

API changes

  • None.

Major changes

  • Support for object-array event types; An application can now send Object[] rows as events and can
    receive Object[] rows as output.
  • This release introduces a syntax and API for declarative data flow execution.
  • Support for XML and JSON event renderers to take a custom property value renderer.
  • Support for a new "ranked" data window that retains the events according to rank and
    uniqueness criteria.
  • Many internal changes related to increasing performance and reducing memory use.
  • For class and package imports through configuration or API, the default imports are no longer removed
    when the first import is added. Imports can be removed explicitly instead.
  • The CSV adapter no longer has a dependency on Commons Beanutils (commons-beanutils-1.8.3.jar).
  • The documentation has a new look and feel.
  • Many bug fixes and other improvements; Please see history or changelog.txt for additional information.

Version 4.5.0

Released January 19, 2012

Built and tested with JDK 6.0 Update 29

API changes

  • None.

Major changes

  • We have made a change to the behavior of intersection data windows (multiple data windows in
    intersection) when one of the data windows is a batch window. The engine now provides batching behavior,
    when one of the data windows is a batch window, and not continuous stream behavior.
  • Support for declaring a hashed context that uses a consistent-hash algorithm to target context
    partitions for declarative parallelism in statement execution
  • Support for declaring nested contexts allowing combined context policies
  • Support for a new API to that provides context partition targeting for on-demand queries and statement
    iteration
  • Support for context initiation by event or patterns and termination by a correlated event or pattern
  • Support for context initiation by patterns to include those event(s) that match a pattern in the
    statement associated to the context
  • Support for MVEL and JSR-223 scripting engine i.e. JavaScript and others
  • Support for contained-event syntax; one can now specify any expression for returning contained events
  • Support for constants: Variables that are constant values and cannot be assigned. Useful for the engine
    to perform optimizations knowing variable values can't change.
  • Support for a new expression batch window that also allows aggregation functions as part of the expiry
    expression
  • Support for aggregation functions in the expiry expression of the expression data window
  • Support for iterating statements that have unbound streams (no data window) and have fully-grouped
    aggregation
  • Support for outer joins with streams that don't provide properties (i.e. pattern timer)
  • Support for updating mapped and indexed property values of events via update-istream, on-merge or
    on-update
  • Support for when-terminated in output rate limiting to also provide an expression and set-assignments;
    Support for a new count-total built-in property
  • Support for defining an output pattern for audit logs
  • Added test framework API for event processing unit or regression testing
  • For plug-in aggregation functions we added support for an AggregationFunctionFactory and deprecated
    AggregationSupport
  • Optimization to detect when a statement is stateless and thereby operate lock-free
  • Many bug fixes and improvements to documentation, code and performance; Please see history or
    changelog.txt for additional information.

Version 4.4.0

Released October 24, 2011

Built and tested with JDK 6.0 Update 26

API changes

  • None.

Major changes

  • Support for context declarations: Temporal context for interval-based context partitions; Keyed and
    category segmented contexts; Initiated contexts
  • Support for fine-grained locking per context partition for high concurrency
  • Support for a new 'between' date-time method
  • Support for a new @NoLock annotation that disables context-partition-level locking
  • Support for configuring an engine-wide maximum limit of number of sub-expressions for followed-by and
    for monitoring the number of sub-expressions
  • Support for the "create schema" syntax to copy type information from one or more types
  • Support for wildcard (*) parameter to derived-value views (stat:uni etc.) to indicate all properties of
    input type are available in output
  • Support for subscribers with a no-parameter "update" method
  • Support for configuring the behavior of the value cache for plug-in single-row functions
  • Reduced overhead for named windows based on POJOs
  • Many bug fixes and improvements to documentation, code and performance; Please see history or
    changelog.txt for additional information.

Version 4.3.0

Released July 18, 2011

Built and tested with JDK 6.0 Update 26

API changes

  • None.

Major changes

  • We have made a change to NULL-value comparison, to closely follow SQL standards, as follows: In version
    4.3, the expression "property = NULL" always returns null, use "property is NULL"
    instead. Version 4.2 and earlier returned true/false. For more information, please see ESPER-569.
  • Support for filter expressions as part of aggregation functions, for example "select count(*,
    color='black'), count(*) as percentBlack from Marbels"
  • Support for interval algebra methods, e.g. before, after, coincides, during, includes, meets etc.
  • Support for a new expression-driven data window "win:expr". Use for dynamically shrinking and
    expanding time or length windows, or for custom expiry logic based on work days, for example.
  • Support for specifying a consumption policy on pattern filters. Useful when a pattern references the
    same filter multiple times and the application requires a filter to consume or prioritize one filter
    over another.
  • Support for the transpose(...) function. For use in the select-clause to transpose an expression result
    object to a stream.
  • Support for array operator to provide input to enumeration methods.
  • Support for subqueries that return multiple result columns to be used in an expression definition.
  • Support for @Audit to output nested expression results.
  • New example "Trivia Geeks Club".
  • Many bug fixes and improvements to documentation, code and performance; Please see history or
    changelog.txt for additional information.

Version 4.2.0

Released April 19, 2011

Built with JDK 6.0 Update 24

API changes

  • None.

Major changes

  • Support for enumeration methods, which work with lambda expressions to perform common tasks on subquery
    results, named windows, event properties or inputs that are or can be projected to a collection of
    events, scalar values or objects.
  • Support for date-time methods for date and time manipulation and querying, such as for adding or
    subtracting time periods, setting or rounding calendar fields and querying fields.
  • Support for @Audit annotation which instructs the engine to output detailed debug-level information
    about the statements processing, such as pattern instance counts, expression result values, property
    values and more.
  • Support for Virtual Data Window, an extension point for (large) external data stores to become
    accessible same as a named window.
  • Support for the 'new' operator, which populates a new data structure by evaluating column names and
    assignment expressions, useful when an expression should return multiple results, for performing a
    transformation or inside enumeration method lambda expressions.
  • Support for constructor injection for event objects populated by insert into.
  • Support for the on-merge clause to allow multiple actions (multiple then-clauses), to allow insert-into
    a stream other then the currently-merged named window and adding support for an optional where-clause
    for each action.
  • Support for mapped and indexed properties to allow an expression as a map key or index.
  • Support for expression declarations. Expressions that are common to multiple places in an EPL statement
    can be moved to a named expression declaration and reused within the statement without duplicating the
    expression itself.
  • Improvement for query planning and indexing for joins, subqueries, on-merge, on-select, on-update,
    on-delete, fire-and-forget queries and create-index to support btree indexes for use with ranges,
    inverted ranges and relational operator (>, <, >=, <=) queries.
  • Improvements to statement metrics reporting in regards to event counts and reporting for named
    windows.
  • Improvements to query plan output.
  • Reduced memory use for hash indexes on single columns.

Minor changes

  • Bug fixes: see JIRA list of resolved issues for release 4.2 or changelog.txt

Version 4.1.0

Released January 19, 2011

Built with JDK 6.0 Update 23

API changes

  • None.

Major changes

  • Support for on-merge which provides and atomic update-insert-delete (aka. upsert or merge) operation for
    use with named windows
  • Support for subqueries against named windows to share existing indexes on the named window (both
    implicitly-created or via create-index)
  • Support for configuration option to enable output of query plan to log destination (aka. explain-plan)
  • Support for a new 'typeof' function that returns the event type name, for use with variant streams and
    event type super-types (POJO extends and implements, map super-types)
  • Support for XML event type update at runtime via ConfigurationOperations
  • Support for an extended time interval grammar that now supports 'weeks', 'months' and 'years' keywords
  • Support for additional means to control external time
  • Support for loading an XML schema from a string
  • Support for a new form of the followed-by (->) operator: The form "-[max]> allows specifying
    an upper limit on the number of pattern instances
  • We refactored the pattern engine to reduce memory use of pattern instances significantly

Minor changes

  • Bug fixes: see JIRA list of resolved issues for release 4.1 or changelog.txt

Version 4.0.0

Released September 27, 2010

Built with JDK 6.0 Update 21

API changes

  • None.

Major changes

  • The following dependent jar files are upgraded:
    • Required: ANTLR version upgrade from 3.1.1 to 3.2
    • Optional: LOG4J upgrade from 1.2.15 to 1.2.16
  • The bound-repeat syntax in the repeat-until pattern operator changed syntax: The old syntax of
    separating range value by dots "[low .. high]" is no longer supported. Use the colon ":"
    character instead of "..", version 3.5 supported the same syntax.
  • The meaning of the index parameter to the "nth" aggregation function has changed: To be
    consistent with "prev" and "last" functions an index of zero now returns the current
    row. For Example: "nth(value, 0)" returns the current row and "nth(value, 1)"
    returns the previous-row value.
  • The semantics for "output first" have changed: For statements that have a "group-by"
    clause the "output first" now outputs the first events per group.
  • The data window "std:groupby" for grouped data windows has been renamed to "std:groupwin"
    to avoid confusion with the group-by clause.
  • The "first" aggregation function has been renamed to "firstever".
  • The "last" aggregation function has been renamed to "lastever". This makes a
    difference as data window deletes are reflected by the new "last" aggregation function and are
    not reflected by "lastever".
  • Support for new aggregation functions that track the data window : "first", "last"
    and "window" with a convenient syntax for access to all attributes.
  • Support for new single-row functions for data window access: "prevtail", "prevwindow"
    and "prevcount".
  • Support for registering an exception handler that is called when any continuous-query statement
    exception occurs.
  • Support for all statistics views and the size view to accept additional expressions as parameters for
    returning values pertaining to the last-applied event.
  • Support for chained method invocations on events in streams, library static methods and single-row
    functions.
  • Support for registering single-row functions by function name.
  • Support for dot-syntax in the form of "(expression).method(...).method(...)" which includes
    support for duck typing, obtaining array size and calling get(index) on an array or collection.
  • Support for subqueries to select multiple columns.
  • Support for correlated aggregation in subqueries.
  • Support for selecting multiple columns in a subquery.
  • Support for contained-event syntax on events selected from a named window.
  • Support for expressions in the [] bound repeat in patterns.
  • Support for grouped data windows to remove groups that haven't changed for a given time period, as
    specified via hint.

Minor changes

  • To be congruent to the JDBC 4 specification, the SQL query metadata now uses the value returned by the
    JDBC driver result set metadata for "getColumnLabel" as the column name or if that is null the
    value returned by "getColumnName".
  • For plug-in aggregation functions, the parameter to the "validate" method has changed and is
    now a validation context that provides additional information. The "validateMultiParameter"
    method has been removed.
  • We added a new example demonstrating runtime configuration.
  • Bug fixes: see JIRA list of resolved issues for release 3.5 or changelog.txt

September 24, 2010 - Esper 4.0.0 - Major release, read compatibility notes below

  • Requires a Java 6 runtime
  • The following dependent jar files are upgraded:
    • Required: ANTLR version upgrade from 3.1.1 to 3.2
    • Optional: LOG4J upgrade from 1.2.15 to 1.2.16
  • The bound-repeat syntax in the repeat-until pattern operator changed syntax: The old syntax of
    separating range value by dots "[low .. high]" is no longer supported. Use the colon ":"
    character instead of "..", version 3.5 supported the same syntax.
  • The meaning of the index parameter to the "nth" aggregation function has changed: To be
    consistent with "prev" and "last" functions an index of zero now returns the current
    row. For Example: "nth(value, 0)" returns the current row and "nth(value, 1)"
    returns the previous-row value.
  • The semantics for "output first" have changed: For statements that have a "group-by"
    clause the "output first" now outputs the first events per group.
  • The data window "std:groupby" for grouped data windows has been renamed to "std:groupwin"
    to avoid confusion with the group-by clause.
  • The "first" aggregation function has been renamed to "firstever".
  • The "last" aggregation function has been renamed to "lastever". This makes a
    difference as data window deletes are reflected by the new "last" aggregation function and are
    not reflected by "lastever".
  • Support for new aggregation functions that track the data window : "first", "last"
    and "window" with a convenient syntax for access to all attributes.
  • Support for new single-row functions for data window access: "prevtail", "prevwindow"
    and "prevcount".
  • Support for registering an exception handler that is called when any continuous-query statement
    exception occurs.
  • Support for all statistics views and the size view to accept additional expressions as parameters for
    returning values pertaining to the last-applied event.
  • Support for chained method invocations on events in streams, library static methods and single-row
    functions.
  • Support for registering single-row functions by function name.
  • Support for dot-syntax in the form of "(expression).method(...).method(...)" which includes
    support for duck typing, obtaining array size and calling get(index) on an array or collection.
  • Support for subqueries to select multiple columns.
  • Support for correlated aggregation in subqueries.
  • Support for selecting multiple columns in a subquery.
  • Support for contained-event syntax on events selected from a named window.
  • Support for expressions in the [] bound repeat in patterns.
  • Support for grouped data windows to remove groups that haven't changed for a given time period, as
    specified via hint.
  • Many additional bug fixes and improvements to documentation, code and performance; Please see history
    for additional information.

Version 4.0.0

Released June 21, 2010

Built with Sun JDK 5.0 Update 21; Also tested for JDK 6

API changes

  • None.

Major changes

  • Support for EPL modules and deployment services.
  • Support for "create schema": Declare an event type via EPL statement.
  • Support for "for delivery" option: Grouped-delivery means any listeners/subscribers receive
    one invocation per group, discrete delivery an invocation per event.
  • Support for expressions in parameters to SQL statements.
  • Preemptive processing of events inserted into named windows. This helps to make behavior of queries with
    named windows more intuitive.
  • Support for a new pattern guard "timer:withinmax". It takes a time period and maximum-count
    and ends the pattern subexpression when either the stopwatch or counter match.
  • Support for a new pattern guard post-fix operator "while": Similar to a while loop, ends the
    pattern subexpression when an expression turns false.

Minor changes

  • Documentation and performance improvements
  • Bug fixes: see JIRA list of resolved issues for release 3.5 or changelog.txt

Version 3.4.0

Released March 20, 2010

Built with Sun JDK 5.0 Update 21; Also tested for JDK 6

API changes

  • None.

Major changes

  • Support for variables of type Object (any type), POJO or EventType
  • Support for creating an explicit index on a named window for best on-demand query performance (aka.
    fire-and-forget queries)
  • New socket input adapter
  • New HTTP input and output adapter
  • New database output adapter for insert, update, delete (DML) and upsert (keyed-insert/update)
  • The EsperIO jar file "esperio-x.y.z.jar" is no longer needed. The few classes that EsperIO
    adapters share are now part of Esper core.

Minor changes

  • Documentation and performance improvements
  • Bug fixes: see JIRA list of resolved issues for release 3.4 or changelog.txt

Version 3.3.0

Released Dec. 17, 2009

Built with Sun JDK 5.0 Update 21; Also tested for JDK 6

API changes

  • None.

Major changes

  • Support for on-update
  • New aggregation functions: rate, last, first, nth, leaving
  • Support for subqueries to occur in filter expressions (stream or pattern)
  • Support for subqueries in split-stream and on-set and on-select
  • The "prev" and "prior" functions now accept a stream name
  • Optimization of min and max aggregation function for use with or without data window
  • Support for annotations in statement object model
  • Variables that are created via "create variable" and that are no longer referenced are
    removed

Minor changes

  • Documentation and performance improvements
  • Bug fixes: see JIRA list of resolved issues for release 3.3 or changelog.txt

Version 3.2.0

Released Sept. 6, 2009

Built with Sun JDK 5.0 Update 20; Also tested for JDK 6

API changes

  • None.

Major changes

  • Support to the proposed SQL standard "match_recognize", a regular expression-based event
    pattern matching language
  • Support for isolated service providers, which allow to control event visibility and time-related
    behavior on a statement level, i.e. suspend, preload or catch-up statements
  • Support for "update istream" which allows declarative modification of event properties of
    events entering a stream.
  • Support for "distinct" in the select clause
  • Support for "output after" syntax to discard of events until time period passed
  • Support for "limit" clause for on-select and on-insert

Minor changes

  • Documentation and performance improvements
  • Bug fixes: see JIRA list of resolved issues for release 3.2

Version 3.1.0

Released May 16, 2009

Built with Sun JDK 5.0 Update 16; Also tested for JDK 6 Update 10

API changes

  • None.

Major changes

  • The new "every-distinct" operator has been introduced to the pattern language. Very similar to
    the "every" operator, this operator suppresses duplicate results received from sub-expressions
    based on a set of expressions returning distinct-values.
  • The EPL language now understands annotations following the annotation syntax standard. An annotation is
    an addition made to information in a statement. Esper provides certain built-in annotations for defining
    statement name (@Name), adding a statement description (@Description) or for tagging statements.
    Applications can provide their own annotation classes that the EPL compiler can populate.
  • The engine now provides a way to prioritize and preempt processing of an event when multiple statements
    must process the event, via the @Priority and @Drop annotations.
  • The insert-into clause can now directly populate an underlying event object from a select clause, i.e.
    populate your object or Map type.
  • We have extended the on-insert syntax by a new split-stream syntax. This allows to list multiple
    insert-into, select clauses and where-clauses thereby making it easy to split or duplicate an event
    stream into multiple further event streams.
  • The behavior of "timer:within" when used within an "every" in a pattern has changed
    slightly: The sub-expression qualified by "timer-within" upon expiry of the timer now
    evaluates to permanently false, while previously it simple stopped. This allows the "every"
    operator to restart such sub-expression. For example, the expression: every(A -> (B where
    timer:within(5 sec))) ... When no B event arrives after an A event, the "every" restarts the
    subexpression looking for the next A followed by B within 5 sec.

Minor changes

  • The provider URI of the default engine instance is now "default" instead of null. This is for
    consistency with the default engine qualifier for optional use in stream and property name
    qualification, which is also "default". Therefore
    EPServiceProviderManager.getDefaultProvider().getURI() returns "default", and passing null to
    the EPServiceProviderManager still returns the default instance.
  • The PluginLoader interface for writing adapters has a new required method that must be implemented to
    allow plugins to initialize after complete Esper engine initialization.
  • Bug fixes: see JIRA list of resolved issues for release 3.1

Version 3.0.0

Released February 11, 2009

Built with Sun JDK 5.0 Update 16; Also tested for JDK 6 Update 10

API changes

  • The summary of changes are:
    • Upgraded version of dependent jar files
    • Moved EventType, EventBean and related exception classes from package com.espertech.esper.event
      to com.espertech.esper.client
    • Several minor rename of methods in the Configuration API related to event type name retiring
      "alias" as a word in method names
    • EPL division expressions yield double-type results
    • EPL view and pattern parameters strongly distinquish between string constant and property name
    • EPL join statements for certain stream types now require a data window declaration
    • EPL when using multiple data windows defaults to intersection semantics
    • Extension API for views, pattern objects and event representations have additional or slighly
      changed signatures

Major changes

  • The view parameters and pattern object parameters are now expressions. Thereby they gain certain new
    features:

     

    • Variables may be used to parameterize views or pattern objects;
    • Prepared statements may use substitution parameters to parameterize views and pattern objects;
    • Pattern objects may be parameterized by prior events;
    • The syntax for views namespace.name('property') is no longer supported.
  • New syntax to support contained-event selection, for use with coarse-grained events that contain
    finer-grained events or rows. This allows convenient extraction and analysis of information from
    business-level composite events.
  • Added XML and JSON renderers for output events
  • When using multiple data windows for the same stream in EPL, the default policy is intersection of data
    windows, and a union-policy is also available via keyword. This allows concise declaration and
    combination of multiple expiry policies and well-defined semantics.
  • We have made substantial internal enhancements to the type system to simplify and support transposing
    from any type of stream to an event property in a further stream.
  • Enhanced the XML DOM event to support: The changes gained features to transposing XPath expression
    results between statements and including arrays, as well as transposing property expression results. The
    changes also correct a problem in which an expression "index[1]" accessed the firs element in
    a collection and not the second.
  • Added a new method for statements to add a listener with replay in one transaction, by name "addListenerWithReplay".
  • The EPL now returns a double-type result for division expressions where both operands to a division were
    non-FP types, such as "1/2", i.e. double 0.5. This follows SQL standards and makes EPL easier
    to read and use. Esper 2.x returned an integer value following Java standards (i.e. zero).
  • The EPL does no longer assume keep-all semantics if no data window is specified for a filter-based or
    pattern-based stream in a join. EPL now requires a data window to be explicitly defined to applicable
    streams.
  • Added support for SQL-standard ANY, SOME and ALL keywords in group comparison.
  • Added advanced threading options to configuration for use with inbound, outbound and execution threading
    at engine-level.
  • Improved support for Java-object event representation with parameterized types (Java generics), List and
    Iterable properties.
  • Added support for escaping property names and event type names in case an overlap occurs with
    keywords.
  • New configuration options to change the caching behavior for UDF invocations.

Minor changes

  • Removed "stat:cube" view.
  • Removed "indicator.jmx" package.
  • Removed "emit" method from EPRuntime and EmittedListener.
  • Removed examples LinearRoad, RSI and ATM.
  • The Maven build no longer compiles the grammar. The grammar is now compiled via "esper/grammar/antlrtool.bat"
    or "antlrtool.sh". The resulting parser is part of the source code base.
  • Added new examples for named window and OHLC; We restructured the examples directory structure and added
    Eclipse projects.
  • Documentation and performance enhancements
  • Bug fixes: see JIRA list of resolved issues for release 3.0

Version 2.3.0

Released November 9, 2008

Built with Sun JDK 5.0 Update 16; Tested and certified for JDK 6 Update 10

API changes

  • Added API for on-demand, snapshot queries
  • Listener API for receiving callbacks upon statement creation and state change as well as service state
  • Event type name added to EventType interface
  • Added route methods for other event representations
  • Added user object support to EPStatement
  • Allow event types to be removed at runtime; Allow detection of which statements reference types

Major changes

  • Support for array-type properties in Maps; Support for map type name as a property type
  • Added OSGi manifest to jar files
  • Support for language-locale dependent sorting of String value

Minor changes

  • Documentation and performance enhancements
  • Bug fixes see JIRA list of resolved for release 2.3

Version 2.2.0

Released August 10, 2008

Built using Sun JDK 5.0 Update 12; Tested and certified for JDK 6 Update 1.3

API changes

  • New metrics reporting events and configuration API for instrumentation

Major changes

  • Bug fix for ESPER-264 that impacts joins that utilize the "unidirectional" keyword and that
    perform aggregation
  • Support for repeat and repeat-until in pattern matching
  • Enhancements for the create-syntax for named windows:
    • Allows an additional SQL table-like definition syntax
    • Allows constants in the model-after syntax
    • Allows the window to be modelled after another named window, and populated from another named
      window at creation time
    • Changed "as" to become an optional keyword
  • Added support for BigDecimal and BigInteger in all aspects of EPL
  • Added metrics reporting: Instrumentation to provide key engine and statement-level performance
    indicators as event streams
  • Added support for row limiting
  • Added four new data window views for first-event type expiry policies: std:firstevent, std:firstunique,
    win:firstlength, win:firsttime
  • Enhanced output limit clause to support crontab-like schedule
  • Enhanced output limit clause to support output when an variable or expression turns true
  • Enhanced plug-in aggregation functions to accept multiple parameters
  • Support for the "inner" keyword for use in outer joins
  • Support for variables to be parameters to an SQL join and method join
  • Support for polling via iterator from a statement that contains only SQL queries or method invocations
    (alone or in a join, aka. no-stream pull API)
  • Removed limitation on the number of historical streams (SQL and method) in joins, now supporting an
    unlimited number of historical streams, full iterator support
  • Support for Map inheritance: map event types may now be declared to inherit from one or more Map
    supertypes
  • Support for changing Map event types at runtime by adding properties to an existing type
  • Optimization for certain filter-only statements to more efficiently process
  • Added JMS text message marshaller and unmarshallers for Fix (Fix is a standard financial interchange
    format)

Minor changes

  • Fixed issue ESPER-270 Property name order not always reflecting select clause order for
    getPropertyNames
  • Fixed issue ESPER-269 User-define method with dot in parameter generates property not found
  • Fixed issue ESPER-268 User-defined function reports runtime errors through the stack
  • Fixed issue ESPER-264 Unidirectional keyword with aggregation posts lifetime-cumulative results rather
    then join-current cumulative results
  • Fixed issue ESPER-263 Add boolean ConfigurationOperations.isVariantStreamExists(String
    variantStreamName)
  • Fixed issue ESPER-258 Extension points for esperio
  • Fixed issue ESPER-257 Esperio beans input to support subset of beans properties in input CSV
  • Fixed issue ESPER-256 It would be really useful for CSVInputAdapter to have a row count so we can tell
    how many rows it has processed
  • Fixed issue ESPER-254 Iterating over joins that join by polling execution (database or method joins)
  • Fixed issue ESPER-250 Custom aggregation function provided by static inner class not possible
  • Fixed issue ESPER-249 Enhance TimeBatchView with FORCE_UPDATE, START_EAGER keywords
  • Fixed issue ESPER-247 Cast function for String to Int conversion returns null
  • Fixed issue ESPER-246 Unique-view incorrectly posts remove stream data for shared state under view
    sharing conditions
  • Fixed issue ESPER-243 Swallowing InterruptedException in EPServiceProviderImpl
  • Fixed issue ESPER-241 Predefined variant types not supporting dynamic event types
  • Fixed issue ESPER-239 Esperio - memory leak in AdapterCoordinatorImpl

New Features

Minor changes

Version 2.1.0

Released May 11, 2008

Built using Sun JDK 5.0 Update 12; Tested and certified for JDK 6 Update 1.3

API changes

  • New API to plug-in of a custom event type
  • Added additional sendEvent method that accepts alias name and event object, plus EventSender instance to
    skip type lookup

Major changes

  • Added support for variant event streams, into which events of disparate event types can be inserted and
    treated as the same type
  • Added support for update events (aka. version or revision events)
  • Added support for streaming XML using Apache Axiom
  • Added support for EsperIO CSV adapter to send bean events
  • Allowed normalization of subevents into resultant stream
  • Allowed DOM-type property of XML events transpose into new stream for use with XPath and nested syntax

Minor changes

  • Properties can now be prefixed by the engine URI and the event type alias used in the from-clause; Event
    streams can be prefixed by the engine URI (SQL compatibility)
  • Added full support for nano/microsecond resolution
  • Allowed access to statement's XPathFactory instance to supply XPathFunctionResolver, etc.
  • Added support for an escape syntax for event property names that contain dots
  • Allowed esperio to use external timer
  • Added support to specify a time period in output rate limiting
  • Added support for the "in" operator to accept array properties, collection (set, list)
    property or map property for contains-value semantics
  • Now uses thread ClassLoader for compatilibility with OSGi
  • Provide additional XPath return value types to cast to
  • Allow certain keywords to be used as column alias, such as "select count(*) as count from
    foo"
  • Fixed issue ESPER-197 EsperIO/CSV reported to be slow
  • Fixed issue ESPER-208 Esperio runs out of stack space when processing largeCSV file and not using engine
    thread
  • Fixed issue ESPER-209 Stop of consumer statements of named windows may not entirely deregister
    consumer
  • Fixed issue ESPER-213 ConcurrentModificationException creating consuming statements to a single named
    window under threading
  • Fixed issue ESPER-214 ClassCastException in named window dispatch for timer thread when multiple
    insert-into
  • Fixed issue ESPER-219 Documentation for plug-in views not specifying implicit contract towards object
    references
  • Fixed issue ESPER-220 TimeBatchView.computeWaitMSec can give incorrect results for low "interval"
  • Fixed issue ESPER-221 Named window with batch expiry policy causes late consumers to post incorrect data
    or throw IllegalArgumentException
  • Fixed issue ESPER-227 No documentation on time-batch view parameter for reference point
  • Fixed issue ESPER-228 PDF document page number not showing

Version 2.0.0 Major Release

Released February 17, 2008

Built using Sun JDK 5.0 Update 12; Tested and certified for JDK 6 Update 1.3

API changes

  • All package names have changed from "net.esper" to "com.espertech.esper"
  • We have renamed EQL to EPL: All method names and other references to EQL have been renamed to EPL, i.e.
    createEQL to createEPL
  • We have made changes to engine output to make the output more useful and consistent between different
    types of queries, and to make the engine more performant.
  • We have upgraded 3rd party library dependencies to new versions.
  • We have switched the schema to 2.0, made it namespace-aware and available online.

Major changes

  • New strongly-typed and fast output event delivery to subscriber objects via method call
  • Performance improvement: statements without listeners or subscriber (iterator or output-snapshot
    statements that use insert-into) now compute much faster
  • We have upgraded to ANTLR Version 3 to gain excellent error handling, incremental parsing, easy-to-read
    grammar and a smaller runtime jar
  • We have changed view parameter syntax such that event properties do no longer need to appear in quotes
  • Added support for nano/microsecond timer resolution (ESPER-191)
  • Added API for setting variable values (ESPER-181)
  • Added support for map return types in from-clause method invocations
  • Added support for a "unidirectional" keyword in joins/outer join to control join direction
  • Added support for multiple event properties in unique view (std:unique)
  • Added support for use of aggregation functions in subselect

Minor changes

  • Changes to configuration classes: Moved the classes ExpiryTimeCacheDesc, LRUCacheDesc, DataCacheDesc,
    CacheReferenceType out inner classes of ConfigurationDBRef to ConfigurationExpiryTimeCache,
    ConfigurationLRUCache, ConfigurationDataCache, ConfigurationCacheReferenceType since the classes were
    applicable elsewhere

     

    • Renamed method addJavaSqlTypesBinding on ConfigurationDBRef to addSqlTypesBinding
    • Minor change to SelectClause in the SODA API
  • Fixed issue ESPER-136 Improve error messages when encountering reserved keywords
  • Fixed issue ESPER-138 Allow Map event type to contain nested Map values
  • Fixed issue ESPER-145 Ignore start or stop commands on already started or stopped EPStatements.
  • Fixed issue ESPER-178 Problem selecting "sum" as a property of event posted by stat:uni view
  • Fixed issue ESPER-179 Iterator on select statement selecting from a named window may return incomplete
    results
  • Fixed issue ESPER-180 Null aggregation results outer joining a named window on filled named window
  • Fixed issue ESPER-183 Replace LinkedLists with ArrayDeque where possible
  • Fixed issue ESPER-184 NPE when using regexp or like on null pojo properties
  • Fixed issue ESPER-185 Remove limitation whereas grouped-by properties cannot also occur within
    aggregation functions
  • Fixed issue ESPER-186 Iterator not honoring order by clause for grouped join query with output-rate
    clause
  • Fixed issue ESPER-187 Join of two or more named windows on late start may not return correct aggregation
    state on iterate
  • Fixed issue ESPER-188 Output snapshot buffers events until output condition is reached
  • Fixed issue ESPER-188 Output snapshot buffers events until output condition is reached
  • Fixed issue ESPER-192 Support non-String type auto-discovery in EsperIO
  • Fixed issue ESPER-194 Nullpointer when using Jcl104-over-slf4j
  • Fixed issue ESPER-195 Not considering having-clause in un-aggregated and un-grouped query (no-join
    only)

Version 1.12.0 Update

Released December 15, 2007

Built using Sun JDK 5.0 Update 12; Tested and certified for JDK 6 Update 1.3

API changes

  • API change: AggregationSupport for plug-in aggregation functions now requires an implementation of the
    clear() method

Major changes

  • New feature: Named windows
    • Share data windows between statements
    • New create-window syntax to create named windows
    • Define entry criteria via insert-into
    • Define exit criteria via the new on-delete syntax
    • Perform on-demand queries using the new on-select syntax
  • New feature: Variables
    • New create-variable syntax declares a variable
    • Variables can occur in any expression
    • A variable can occur in an output-rate limit to dynamically control output rate
    • Update variables via the new on-set syntax
    • The engine makes consistency and atomicity guarantees
  • New multi-policy tumbling window (ESPER-165)
  • New time-ordering window for more flexibility in handling out-of-order events (ESPER-147)
  • New accumulating time-based data window (ESPER-166)
  • New 'snapshot' keyword for the output rate limiting clause for outputting full statement state
  • New safe iterator to provide a concurrent-safe pull API (ESPER-172)
  • Support for method invocations in the from-clause; For example to query a distributed, object database
    or web service
  • Support for iterator and safe iterator to iterate over joins and outer joins (ESPER-173)
  • Support for stream-wildcard "stream.*" selections for more flexibility selecting from joins
    and patterns (ESPER-174)
  • Support for the stream name or pattern tag name as a valid property in expressions, returning the
    underlying event for the stream
  • Support for instance method calls on stream or pattern events that are Java objects
  • Support for indexing of cached result sets of SQL poll queries and method invocations
  • Support for expiry time cache backed by soft-reference Map and hard-reference map (ESPER-167)
  • Support for an unmatched event listener that receives a callback if an event matches no statement
    (ESPER-160)
  • Support for JDK5 enum classes natively (ESPER-13)
  • Support for constants (public static final fields) in expressions
  • Performance improvements: rewritten insert-into and listener thread blocking techniques for reliable
    ordered delivery, other changes

Minor changes

  • Fixed issue ESPER-125 IllegalStateException in a self-joining statement without join condition using
    sorted window
  • Fixed issue ESPER-177 Deadlock in EPRuntimeImpl.sendEvent
  • Fixed issue ESPER-176 NullPointerException for grouped-by length view and previous operator
  • Fixed issue ESPER-175 ArrayIndexOutOfBoundsException when no event posted
  • Fixed issue ESPER-171 AutoID example in Sun JDK6 fails with Invalid schema error (a JDK6 compatibility
    issue)
  • New example: Java Messaging Service (JMS) server shell
    • demonstrates a multi-threaded JMS server
    • with dynamic statement management using Java Management Extensions (JMX)
  • Documentation improvements

Version 1.11.0 Update

Released September 15, 2007

Built using Sun JDK 5.0 Update 12

API changes

  • Support for statement object model (ESPER-108)
    • allows to build, change or interrogate an object-oriented representation of a statement
    • round-trip between EPL and object model
  • Support for precompiled statements and substitution parameters (ESPER-50, ESPER-31)
  • Support for dynamic (unchecked) properties; Support for instanceof and cast (ESPER-135)
  • Support for the StatementStopCallback to deliver events raised by plug-in views (ESPER-158)
  • Support for automatic bean aliases by specifying imported packages (ESPER-149)
  • New "current_timestamp" reserved keyword returns the current engine time (ESPER-144)

Major changes

  • None

Minor changes

  • API provides timestamp of last state change in EPStatement (ESPER-144)
  • Fixed issue ESPER-129 "DOM expects a Document, no error checking if not"
  • Fixed issue ESPER-131 "Namespace problem using XML events and XPath properties"
  • Fixed issue ESPER-134 "EPException using std:groupwin without child view"
  • Fixed issue ESPER-142 "Relational Database Access does not work with Oracle JDBC"
  • Fixed issue ESPER-159 "Two patterns with similar filters cause duplicates reported by one pattern"
  • Fixed issue ESPER-155 "BeanEventType fails on write only property"

Version 1.10.0 Update

Released July 18, 2007

Built using Sun JDK 5.0 Update 12

API changes

  • Support for a new statement-aware listener interface (ESPER-113)

Major changes

  • None

Minor changes

  • Support for case-insensitive Java-class event property names (ESPER-103)
  • Additional engine configuration options
  • Fixed issue ESPER-112 "Pattern problem in 'every' operator not restarting a permanently false
    sub-expression"
  • Fixed issue ESPER-114 "Allow equals operator on object types in expressions"
  • Fixed issue ESPER-115 "NullPointerException using iterator on pattern without window"
  • Fixed issue ESPER-118 "NullPointerException when select * and additional fields"
  • Fixed issue ESPER-121 "Filter expression not evaluating correctly after optimization and using
    multiple pattern subexpression results"
  • Fixed issue ESPER-122 "IllegalArgumentException in a join statement between same-typed
    map-underlying events"
  • Fixed issue ESPER-124 "IllegalStateException in a grouped time window using the prior function"
  • Fixed issue ESPER-126 "Allow null statement name for createPattern"
  • Documentation improvements
  • Performance improvement when running engine without log4j configuration

Version 1.9.0 Update

Released June 6, 2007

API changes

  • None

Major changes

  • Improvements to multi-threaded processing:
    • Deliver events to listeners in a predictable order
    • Deterministic in processing events between statements that consume other statement's events via
      insert-into

Minor changes

  • Support for last-day-of-month and weekday for timer:at crontab functions (ESPER-84)
  • Support for subqueries to the return event object (ESPER-105)
  • Additional documentation on grouping and aggregation (output model chapter)
  • Additional documentation on threading and concurrency (API chapter)
  • New example out of the RFID domain featuring a Swing GUI and a simulator
  • Fixed issue ESPER-98 "NullPointerException for Joins involving Map event types"
  • Fixed issue ESPER-99 "IllegalStateException combining a time window with min/max and group-by and
    output every"
  • Fixed issue ESPER-101 "ArrayIndexOutOfBounds with 'output last' and group by"
  • Fixed issue ESPER-107 "Memory leak using previous function and length window under a
    group"
  • Fixed issue ESPER-109 "NPE while fetching events from statements"
  • Fixed issue ESPER-110 "Iterator not honoring filter, aggregation, group-by and having
    clause"

Version 1.8.0 Update

Released April 22, 2007

API changes

  • None

Major changes

  • Support for subqueries including the exists and subquery-in syntax (ESPER-22 support for subqueries)
  • Support for plug-in user-defined aggregation methods, and plug-in pattern observer and pattern guard
    objects (ESPER-40)

Minor changes

  • Fixed issue ESPER-93 "Improve error handling parsing too large Integer numbers and remove L suffix
    requirement for Long"
  • Fixed issue ESPER-94 "Performance degradation for certain statement between 1.4 and 1.5 of 25%"
  • Fixed issue ESPER-96 "Cache result of user-defined functions when parameter set is
    constants"

Version 1.7.0 Update

Released March 18, 2007

API changes

  • New statement management API (ESPER-90)
    • Note: Starting this release the engine remembers stopped statements, however a stopped statement
      takes very little memory. Destroy a statement to eliminate any resources held by an engine for a
      statement.

Major changes

  • Support for free-form filter expressions (User-defined filter functions ESPER-77, Pattern Filter - null
    value support ESPER-17, ESPER-91)
  • New JMS input and output adapter based on Spring JMS templates (ESPER-4, ESPER-8, ESPER-7)
  • Support for adding new event type aliases and Map and DOM event types during runtime (ESPER-87)
  • Support for plugging-in a custom-developed view (ESPER-41)

Minor changes

  • Allow literal keywords to be case insensitive (ESPER-89)
  • More helpful error messages when invalid syntax (ESPER-82)
  • Fixed issue ESPER-86 "selecting first element via prev and count(*)"
  • Fixed issue ESPER-92 "String with parantheses not parsing in static method arg"

Version 1.6.0 Update

Released February 17, 2007

API changes

  • None

Major changes

  • Added support for group-by and previous (ESPER-80 Prev function to consider grouped windows)
  • Added length window batch (ESPER-27 jumping/tumbling window)
  • Added support for array definition (Enhancement Request ESPER-76 Java array initialization syntax for
    constants)
  • Removed dependency on Apache Common BeanUtils (commons-beanutils-1.7.0.jar)

Minor changes

  • Documentation - Output model illustrations for time windows and event model; Extensive description of
    built-in views
  • Fixed issue ESPER-78 "Insert-into streams not using correct event type when same-typed streams"

Version 1.5.0 Update

Released January 11, 2007

API changes

  • None

Major changes

  • Multithread-safety for all operations provided by the administrative and runtime API. Client
    applications can perform multithreaded sends of events into the engine as well as create, start and stop
    statements during operation, while retaining full control over threading and efficiently sharing
    resources between statements

Minor changes

  • Documentation - new chapter explaining the output model
  • Fixed issue ESPER-75 "PropertyAccessException selecting individual fields from a group-by with
    sub-ordinate length window"

Version 1.4.0 Update + Release of new EsperIO API

Released December 26, 2006

API changes

  • New Esper Input Adapter API for reading CSV (comma-separated value format) files and running event
    simulations from timestamped CSV files (ESPER-6 Input Adapter for reading CSV files)

Major changes

  • Added support for 'prior' and 'prev' (previous) operator (Enhancement request ESPER-25)
  • Added support for 'in' and 'not in' list-of-value matching in filter expressions, and for 'between' and
    'not between' keywords, and 'not in' ranges (Enhancement request ESPER-66)
  • Added support for modifying events in a stream, i.e. wildcard and expressions combined in a
    select-clause and insert into (Enhancement request ESPER-67)

Minor changes

  • Fixed issue ESPER-69 "Pull throws UnsupportedOperationException for statement not selecting
    wildcard"
  • Fixed issue ESPER-68 "Followed-by operator not releasing memory for dead sub-expressions"
  • Various documentation enhancements and performance tuning changes

Version 1.3.0 (update)

Released November 14, 2006

API changes

  • None

Major changes

  • Added support for SQL queries within EPL (Enhancement request ESPER-30)
  • Added support for regular expressions (regexp) and SQL 'like' (Enhancement request ESPER-65)

Minor changes

  • None

Version 1.2.0 (update)

Released October 26, 2006

API changes

  • None (Please NOTE any EPL changes as below)

Major changes

  • NOTE: The following pattern elements now take seconds (not milliseconds) as a parameter (fixes ESPER-52)
    : timer:within, timer:interval, win:ext_time
  • Added new syntax for specifying time periods; Example: timer:within(1 min 5 sec) is equivalent
    to timer:within(65)
  • Added support for 'in' and 'between' standard SQL keywords
  • Added support EventType adaptors for legacy Java classes (Enhancement request ESPER-55)
  • Added support for != (not equals) in filter expressions (Enhancement request ESPER-63)
  • Added support for select-clause istream and rstream keywords (Enhancement request ESPER-54)

Minor changes

  • Fixed issue ESPER-52 "EPL windows take seconds parameter while patterns take milliseconds parameter"
  • Fixed issue ESPER-58 "IllegalMonitorStateException logged by engine"
  • Added J2EE example (Enhancement request ESPER-64)
  • Added docs for "How does one use emit" (Enhancement request ESPER-62)

Version 1.1.0 (update)

Released September 19, 2006

API changes

  • None

Major changes

  • Added support for pattern expressions in EPL statements (Enhancement request ESPER-53 Consuming
    pattern-generated events in EPL)
  • Added 'case' control flow function
  • Added 'coalesce' comparison function

Minor changes

  • fixed issue ESPER-56 "count(*) always returns 0"
  • fixed issue ESPER-59 "Internal Threading Bugs Found"
  • fixed issue ESPER-57 "Initialize not resetting types declared via 'insert into'"
  • fixed issue ESPER-61 "Having clause not applied in query without group-by and without aggregation
    functions"
  • documentation enhancements

Version 1.0.5 (update)

Released August 22, 2006

API changes

  • Added methods to com.espertech.esper.client.Configuration and EPRuntime to configure and process XML DOM
    and Map events

Major changes

  • Added support for the "first" keyword in output rate limiting for outputting only the first
    matching event for an interval
  • Added support for XML events represented by a document object model (DOM) instances of
    org.w3c.dom.Node
  • Added support for Map events represented by a java.util.Map including object values

Minor changes

  • New AutoId RFID example for XML event processing, includes simulator for running from the command line
  • New chapter on Event Representations

Version 1.0.0 (final production)

Released July 24, 2006

API changes

  • Added method on Configuration to add auto-import

Major changes

  • Added support for invoking Java library static methods, invoking user-defined static methods, and
    defining an auto-import list
  • Sort view ext:sort now also allowing multiple columns to sort on
  • Added NOT, modulo (%) and SQL string concatention operator (||)

Minor changes

  • New example 'Market Feed Monitor' which showcases rate calculation and fall-off detection. With a
    simulator to run from a command line.
  • Build scripts now build Linux tarball; Shell scripts for compiling and running examples reworked.

Version 0.9.5 (Beta enhancements release)

Released July 3, 2006

API changes

  • None

Major changes

  • Support for "insert into" clause allowing chains of EPL statements and merging of event
    streams
  • Capability added to sort output using an "order-by" clause
  • Support for bit-wise AND (&), OR (|) and XOR(^) operators

Minor changes

  • Bug fix for allowing boolean expression in select clauses, such as "select a and b from MyEvent..."

Version 0.9.1 (Beta bug fix release)

Released June 10, 2006

API changes

  • None

Major changes

  • None

Minor changes

  • New EPL example 'Transaction 3-event challenge' which shows EPL in use for detecting missing events and
    computing latency totals overall and grouped. Added scripts for compiling and executing the example.
  • Bug fix in EPL for statements that contain only aggregation functions in the select clause such as
    "select sum(volume) from StockTick". The engine was incorrectly posting an event per event
    posted by the stream's window, rather then a single aggregate event.
  • Bug fix in EPL group-statements by without output rate limiting. This problem occured using a group-by
    clause without output rate limit and resulted in multiple events posted that include prior groups for
    each event posted by the window.

Version 0.9.0 (Beta Release)

Released June 4, 2006

API changes

  • None

Major changes

  • Support for output rate limiting based on number of events and time-based, and choice of last or all
    events
  • Support for outer joins for an unlimited number of event streams (was limited to 2 streams)
  • Renamed view "std:last" to "std:lastevent"

Minor changes

  • New example computing RSI (a financial indicator) using a simple pattern listener
  • New reserved keywords: last, events, output, seconds, minutes

Version 0.8.5 (Beta Release)

Released April 22, 2006

API changes

  • None

Major changes

  • Group-by view has been renamed from "std:group" to "std:groupwin" since group is a
    reserved keyword
  • Support for the "group by" and "having" clauses
  • Support for aggregation functions: max, min, sum, avg, count, median, stddev, avedev; including distinct
    and count(*)

Minor changes

  • The univariate statistics view "stat:uni" changed the name of derived event properties to
    "stddev" and "stddevpa" from formerly "stdev" and "stdevpa" to
    stay consistent with the aggregate functions of the same name

Version 0.8.0 (Beta Release)

Released March. 24, 2006.

API changes

  • Renamed method on Configuration for configuring event type alias

Major changes

  • Support for event inheritance and interface implementation, polymorphism, superclasses
  • Support for simple, mapped, indexed, nested and combinations of event properties
  • Refined exception texts to better indicate problem reasons

Minor changes

  • Documentation enhancements
  • Configuration XML file schema changes: renamed 'event' tag to 'event-type' and replaced 'name' with
    'alias'

Version 0.7.5 (Alpha Release)

Released Feb. 21, 2006.

API changes

  • Added optional Configuration parameter to EPServiceProviderManager to control engine configuration

Major changes

  • EPL supports outer joins: left, right and full join on 2 streams
  • EPL supports IS NULL, = NULL, IS NOT NULL, and !=
  • EPL allows new built-in function MAX(a, b,...) and MIN(a, b,...)
  • Event Pattern use of results in filters, such as "every a=EventX -> every
    b=EventY(objectID=a.objectID)"
  • EPL and Event Pattern: Removed requirement that event names have () postfix, e.g. 'every a=X' is now
    equivalent to 'every a=X()'

Minor changes

  • Event Patterns - improved removal of permanently false patterns (e.g. B arrives in 'A and not B')
  • Documentation enhancements
  • Added ATM sample to show simple join

Version 0.7.0 (Alpha Release)

Released Jan. 16, 2006.

API changes

  • None

Major changes

  • None

Minor changes

  • None

)

  • New example 'Market Feed Monitor' which showcases rate calculation and fall-off detection. With a
    simulator to run from a command line.
  • Build scripts now build Linux tarball; Shell scripts for compiling and running examples reworked.

July 3, 2006 - Esper 0.9.5 Beta

  • Completed move to the Codehaus open-source repository.
  • Support for "insert into" clause allowing chains of EPL statements and merging of event
    streams (continuous insertion)
  • Capability added to sort output using an "order-by" clause
  • Support for bit-wise AND (&), OR (

) and XOR(^) operators

  • Bug fix for allowing boolean expression in select clauses, such as "select a and b from MyEvent..."
  • New 10-minute tutorial; Transaction example simplified
  • June 10, 2006 - Esper 0.9.1 Beta

    • Beta bug fix release
    • Moving to the Codehaus open-source repository
    • New cool example 'Transaction 3-event challenge' which shows EPL in use for detecting missing events and
      computing latency totals overall and grouped. Added scripts for compiling and executing the example.
    • Bug fix for statements that contain only aggregation functions in the select clause that incorrectly
      posted too many events
    • Bug fix for group-by without output rate limiting that incorrectly posted events for past groups

    June 4, 2006 - Esper 0.9.0 Beta

    • Third beta release
    • Added support for output rate limiting based on number of events and time-based, and choice of last or
      all events
    • Now supporting outer joins for an unlimited number of event streams (was limited to 2 streams)

    April 22, 2006 - Esper 0.8.5 Beta

    • Second beta release
    • Added support for group-by and having
    • Added support for aggregation functions max, min, sum, avg, count, median, stddev, avedev; The "distinct"
      keyword is also supported for each; The "count(*)" syntax is supported.
    • New developers onboarded

    March 23, 2006 - Esper 0.8.0 Beta

    • Event inheritance and interface implementation support; Added support for interfaces, abstract classes,
      superclasses. E.g. select * from IMyEvent --- where IMyEvent is an interface or superclass, and event
      classes that implement this interface or extend the superclass match the criteria. Polymorphism of event
      properties is now also supported.
    • Support for simple, mapped, indexed, nested and any combination of these anywhere where and event
      property name is expected. E.g. subordinate[3].address(home).city
    • Refined exception texts to better indicate reason
    • Improved documentation

    Feb. 21, 2006 Esper 0.7.5 Alpha

    • Second Alpha release
    • Outer joins and IS NULL support in EPL
    • Patterns: Use of results in filters, such as "every a=EventX -> every
      b=EventY(objectID=a.objectID)"
    • See history for more detail

    Jan. 16, 2006 Esper 0.7.0 Alpha released

    • Provides early-access to upcoming beta release, for evaluation only
    • Full-featured and supported as by current feature list and documentation