Release Notes

v5.23.0 on the GitHub

New Features

Kafka integration in OpenL

Now OpenL Tablets supports Kafka Publisher out of the box. OpenL Tablets Rule Services application handles messages from Kafka input topic and publishes rules calculation results to an output topic or dead letter topic if any error occurs during message processing.

Customizing output of SpreadsheetResult

New syntax is introduced to simplify serialization output of SpreadsheetResult objects. If step is marked with asterisks(*) symbol, it is included to SOAP/REST response. If step is marked with tilde (~) symbol, it is excluded from SOAP/REST response

Add text area for Run/Trace buttons to execute rules using JSON

Now user is able to execute rules using JSON data.

Ability to resolve git conflicts

A new UI for resolving git conflicts is added for cases, for example, if User1 modified file via Webstudio, User2 modified the same file via alternative git client. The following options are available to user:

- Use changes made by current user

- Use changes made by another user

- Upload a file with merged changes - Upload a file with merged changes

Improvement

Core:

  • Possibility to use simplified reference to SpreadsheetResult cells of an external Spreadsheets
  • length() function is added for Map objects
  • Extracted openl-default.properties from PropertySourcesLoader

WebStudio:

  • Mark successed or failed test cases and show number of failed results next to test case id
  • Single-file configuration for WebStudio (like in Rule Services)
  • Externalize filter for login name in LDAP
  • Showing Install wizard only if no settings are found in ${ openl.home }
  • Changing the ordering of changes on "Changes": the latest should be on top

Rule Services, WebStudio:

  • Support JBoss EAP 7.2

Core:

  • Support of "TRUE" condition in SmartRules
  • Parsing of dates in Datatype tables for LocalDate, LocalDateTime, LocalTime, ZonedDateTime
  • Validation is added for external Conditions and Actions
  • Optimization in Condition expression calculation, if parameter does not participate in condition
  • Supporting of Instant date type
  • Supporting syntax contains(range, value) for "contains" function
  • Casting of input numbers in rules conditions
  • The text of error message in SmartRules is updated when "Collect" feature requires array as return type

Repository:

  • Remove JCR implementation of repositories
  • Preserving the order of properties in openl-projects.properties
  • Improving of Resolve Conflict dialog

Rule Services:

  • Old behavior for loading properties is deleted
  • Refactoring of MultipleRuleServicePublisher to be as a manager of publishers
  • Payload for displaying start page in Rule Services is reduced
  • Ability to compare conflicted text files
  • Support valueOf(String) and parse(CharSequence) to instantiate types.
  • Ability to remove empty values from REST response
  • Ability to store Kafka messages to Logging system
  • Ability to log different part of data to different entities
  • Ability to define several logging system
  • Storelogdata annotations are reworked
  • Stable and predictable of JSON response fields

Core, Rule Services:

  • Improve Tracer to reduce temporary arrays creation

Fixed Bugs

Core:

  • 2-Level Condition is interpreted incorrectly in Smart Rules
  • Incorrect user message with NPE is displayed for function flatten(null)
  • Return column is identified as Condition in case of merged column in Smart Rules
  • java.lang.ClassCastException appears is user uses $RulesId in External Condition
  • "The element is null" NPE is presented to user in Spreadsheet Table, if Datatype contains error
  • Error "java.lang.IllegalArgumentException: argument type mismatch" appears for transform index array operation
  • "The element is null" NPE is displayed for addAll() method
  • Error is displayed in Smart Rules table, if condition is specified incorrectly in External Condition.
  • Double values can be stored in "Date" cell format
  • ClassCastException on Rules running because of primitives can't be correctly casted
  • Condition is incorrectly match on Return column, if simplified syntax is used in External condition
  • Incorrect count of errors is displayed in Test table if it refers to Data table
  • Incorrect type of return object is identified in Smart Rules, if return column calls rule returning SpreadsheetResult type
  • It's allowed to specify the same parameter in the several columns in test table
  • Return Column is identified as Condition in Smart Rules
  • Method allTrue() doesn't work for spreadsheet cell range, if one of the cell is empty
  • Method contains(A[], B) doesn't work, if A[] not the same type as B
  • NPE is thrown if methods of Utils classes are used with Generics
  • SmartRules: Return column type is defined incorrectly, if column name and column type corresponds to return type
  • Spreadsheet cells that are referenced to primitives are converted to non-primitives
  • Error is displayed in Test table, if it refers to Data table, that contains non-unique indexes
  • Negative precision doesn't work properly in test tables
  • NPE appears for List in index operations
  • Comparison operators are not symmetrical for inheritable types (Timestamp vs Date)
  • Error "java.lang.reflect.InvocationTargetException: null" appears on comparison NaN with double
  • NPE error is presented to user, because cast doesn't work properly with null
  • The compilation exception is not presented in case of refferencing to element of a Set or a Collection by index
  • Impossible to set a value to the bean referenced to the spreadsheet cell, if the cell value is null
  • NPE is presented on the UI if user call Custom Datatype element by index
  • No error is presented to user, if run table, that reference to another table with several business version, without runtime context, if number of table versions is even
  • NPE on execution of Rules table appears if RET column refers to Condition column, that contains calling another rules
  • Array of custom datatype elements, that are not defined, are returned from data table, if they have array elements, that reference to another data table
  • Incorrect warning message is displayed in Smart Rules, if input variables are matched perfectly with conditions
  • An error "There is no index 0 in the sequence" is presented for Data table, if data table references to another data table
  • No validation of type of Map return result for Smart and Simple rules
  • Return Column is matched on the particular field of output compound object, but should be matched on whole object
  • Incorrect matching of input data with condition in Smart Rules, if words differ by one letter in Smart Rules
  • The error is displayed in Smart Rules, if return column contains a Compound result with 1 column
  • The error "Failed to compile decision table." is presented to user, if external condition matches to DT return column
  • NPE is presented to user if _PK_ is specified for custom datatype field
  • Validation on Alias is not working when an object created via 'new Bean()' constructor
  • Not user-friendly message is presented to user if, input parameter is matched on the field of compound output parameter with different type in SmartRules
  • Input parameter doesn't match condition if variable name and conditions have different register of letters in SmartRules
  • Horizontal condition are interpreted as Vertical condition, if Smart Lookup table contains errors
  • Fields of complex object is not ordered in Rule execution result
  • One of conditions is ignored, if technical title (C1) is merged, but columns with conditions are separate
  • Support transposed Simple rules and Smart rules
  • Compilation doesn't find alias datatypes cast in some cases.
  • Entered elements of Two-dimensional array is interpreted as nulls
  • NPE "The element is null" is presented to user for array index operation where null is used

WebStudio:

  • "Run into File" feature doesn't work on Docker
  • "Run Into File" operation failure if the field of complex object has List type
  • "Something went wrong" error appear on expanding SpreadsheetResult input item
  • "Run in File" feature doesn't work for Map data type
  • Project is failed to load, if some cells outside table are merged
  • NPE appears in log if Spreadsheet table contains null
  • Deleted project is available for selection in "Name" drop down list
  • Time is displayed incorrectly in WebStudio if cell type is Custom m/d/yyyy h:mm
  • SmartLookup: Conditions doesn't match properly, if condition has array of Alias Datatypes
  • "Name" field in Deployment Repo section is populating with User's name after email entering in Chrome browser
  • Project is failed to open if connected library is specified in Environment table incorrectly
  • NPE appears in log if there is compilation error in spreadsheet step
  • There are no a tooltip and a link for a constructor of a Datatype
  • Security Manager allows to terminate an application server via Rule table
  • NPE errors appear in log, if user open on UI the test, that references to non-existing datatype field
  • Comment for "Copy Project" action isn't displayed on revisions tab
  • Date can't be selected via UI for Smart Rules, if max-min feature is used
  • "Run in File" feature doesn't work for List data type
  • WebStudio can't be configured under Jetty
  • The value is displayed in different formats in Trace: tree and Trace: returned result
  • JBoss: Error 500 appears on the UI, after Installation completed via installation wizard
  • NPE appears on "Copy Project" action, if database connection is incorrect

Rule Services:

  • Response type is missed in Swagger schema
  • Project deployment failure, if there are several input parameters with the same name, but different capitalization
  • REST services uses incorrect media type for simple types of data
  • QueryParam is ignored in REST service interface
  • WADL is stripped when interface is used in beans
  • OOM appears on starting Webservice, if rules contain errors
  • Security Manager disables access for libs in OpenL project
  • Services fails with ClassCastException when constants are used in RETURN
  • WebStudio rewrites system settings that affects Rule Services
  • ElasticSearch doesn't work

Demo:

  • WebStudio in Demo failed to log errors because of Security Manager
  • Security Manager disable access for libs in OpenL project
  • java.security.AccessControlException appears Demo under Java 9+

OpenL-maven-plugin:

  • Projects with dependency and multimodule projects can't be built via OpenL Maven Plugin if Data table from one module is referenced to another module
  • SimpleLookup table sometimes returns wrong result

Repository:

  • Incorrect error messages if case of incorrect git authentication information is specified
  • WebStudio in Demo can't be connected to local git repository using relative path
  • User is blocked because of 3 authentication failures when user's password git password was changed
  • No validation for "Path in repository" field on "Create Project" and "Copy Project" screens
  • WebStudio is broken by incorrect git settings
  • "Something went wrong" error appears if URL for git repo and local path are equal
  • Incorrect branch Name is displayed for project on repository tab
  • Repository becomes empty after deleting a project from copied branch
  • "New branch pattern:" field is not allowed to save empty
  • "master" branch is displayed for the local projects
  • The list of deployment configuration is not displayed on the UI, if non-folder structure is specified for Design repository
  • No errors is displayed on the UI if user switch to removed branch in WebStudio
  • "New branch pattern" feature doesn't work, if user entered the pattern containing braces with unsupported place holder
  • Local demo-project can't be deleted if Design repository was changed from local to git
  • "Refresh" button reset Project branch back to master branch for projects in "Closed" status
  • No validation to "Path in repository" field on Admin tab
  • Error "JGitInternalException" is presented to user on entering folder name of existing folder with different capitalization
  • Issues with git Commit messages for Deploy Configuration
  • Projects can't be opened if design repository is broken

Repository, WebStudio:

  • jgit doesn't work with Security Manager

Updated libraries

  • commons-beanutils updated to v1.9.4
  • commons-compress updated to v1.19
  • cassandra driver updated to v4.2.2
  • commons-collections4 updated to v4.4
  • commons-codec updated to v1.13
  • jgit updated to v5.6.0.201912101111-r
  • Jackson databinding updated to v2.10.1
  • elasticsearch updated to v7
  • Spring Framework updated to v5.2.3.RELEASE
  • Spring Security updated to v5.2.1.RELEASE
  • CXF updated to v3.3.5
  • log4j updated tov2.13.0
  • Ehcache updated to v 3.8
  • Deleted: commons-configuration
  • Deleted: dom4j
  • Deleted: jettison
  • Deleted: Apache JCL
  • Deleted: JCR

Known issues

  • Deployment error may occur due to SocketTimeoutException which arose when checking the connection to DB when the Java security manager is used. In the default database H2, the connection timeout is 2 seconds. The check took longer (~30 seconds) in cases when virtual adapters were created on the server, for ex. for Docker or VirtualBox. After stopping these adapters the problem disappears
  • During the installation process a non-ambiguous working directory should be specified (started with . or / or disc name for Windows)
  • Rule Services in DEMO package is not working under Linux. Please use the following solution: add line "permission java.lang.RuntimePermission "getStackWalkerWithClassReference"" in the end of demo-java.policy file in "grant codeBase "file:${ catalina.home }/webapps/webservice/-"" section.
  • Demo doesn't work if the path to demo folder contains spaces due to issue with log4j.

Migration Notes

WebStudio

All OpenL WebStudio related properties should be composed into a single file. Merge rules-production.properties , db.properties , system.properties into application.properties or webstudio.properties. It is also recommended to remove default properties from the merged file.

The following location can be used to store properties (the next overrides previous):

  • ${ user.dir}\application.properties (RO)
  • ${ user.home}\application.properties (RO)
  • ${ openl.home}\{ appName}.properties (RW)

Where { appName} - is Spring application name (Servlet context path).

So for the simplest case, when webstudio.war is deployed in Tomcat, the appName is webstudio and file is webstudio.properties.

It allows to separate configs for different OpenL applications under the same server.
Common settings also can be located in application.properties file.

The following properties were changed

BeforeAfter
repository.encode.decode.key=This is the key for password secure secret.key=
user.settings.home Removed. ${ webstudio.home}/user-settings directory can be deleted.
webstudio.home openl.home
design-repository.***** repository.design.*****
production-repository.***** repository.production.*****
design-repository.factory = org.openl.rules.repository.factories.LocalJackrabbitRepositoryFactory repository.design.factory=org.openl.rules.repository.git.GitRepository
org.openl.rules.repository.factories. LocalJackrabbitRepositoryFactory Removed.
org.openl.rules.repository.factories. WebDavRepositoryFactory Removed.
org.openl.rules.repository.factories. RmiJackrabbitRepositoryFactory Removed.

Note 1: Supporting of the following Design & Deployment repositories were discontinued:

  • Remote RMI
  • Remote WebDav
  • Local (were replaced with GIT)

Use Migration Tool to convert them into DB or GIT based repositories if needed.

Note 2: secret.key property allows OpenL WebStudio to encode any properties ended with ****.pasword. By default secret.key is empty that means all passwords are stored in the plain view. Decoding of the passwords happens only when two things are: secret.key is set and password is wrapped into ENC( eNcoDedPa$$w0RD ) signature. So there is possibbility to define as encodded password in properties files so and plain view password, when secret.key is set.

To get encoded "plain password" you can use the following comand from the bash console:

echo -n "plain password" \ | openssl aes-128-cbc \ -K $(echo -n "My $eCr3T" | sha1sum | awk '{ print substr($1, 1, 32) }') \ -e \ -iv 00000000000000000000000000000000 \ -base64 \ | awk '{ print "ENC("$1")" }'

Be noted, that "My $eCr3T" value must be changed on your secret value.

BeforeAfter
repository.encode.decode.key=My $eCr3T
design-repository.password=eNcoDedPa$$w0RD
secret.key=My $eCr3T
repository.design.password=ENC(eNcoDedPa$$w0RD)

Or:
secret.key=My $eCr3T
repository.design.password=plain PASSWORD

Rules Services

The following properties were changed

BeforeAfter
ruleservice.logging.store.enabled ruleservice.store.logs.enabled
repository.encode.decode.key secret.key
ruleservice.logging.store.cassandra.enabled ruleservice.store.logs.cassandra.enabled
ruleservice.logging.store.type.cassandra.protocol.version cassandra.protocol.version
ruleservice.logging.store.type.cassandra.schema.create cassandra.schema.create
ruleservice.logging.store.elastic.enabled ruleservice.store.logs.elasticsearch.enabled

The following deprecated properties files were deleted:

  • rules-production.properties
  • openl-ruleservice.properties
  • *-ruleservice-ext.properties

The following properties files should be used:

  • application.properties
  • application-default.properties

OpenL Rules

rules-deploy.xml should contain a correct set of actual publishers or publishers tag should be absent otherwise the project will not be deployed

© Copyright OpenL Tablets, 2004-2024