Release Notes
v5.26.1 on the GitHub
New Features
An ability to read the *.properties files as a localization bundle is added.
All localization bundles must be stored in the i18n folder inside the OpenL Tablets project.The name of the localization bundle must match the following pattern: message%locale%.properties. Localization bundle files are key-value plain text files. msg(String code, Object... params) function reads a localization message.
A template function for messaging is introduced.
New function is introduced: format(String pattern,String args)
format(“Hello 1 and 2”, “John”, “Hanna”) -> “Hello John and Hanna”
The REST service is added to download an example of application.properties with default settings.
application.properties for OpenL Tablets WebStudio: GET /rest/config/application.properties
application.properties for OpenL Tablets Rule Services: GET /admin/config/application.properties
AspectJ OpenL Profiler is added.
OpenL Rule Service Profiler is a tool that collects the method call statistics from the request execution.
Varargs are added to array functions.
Varargs are supported in the following functions:
- T[] add(T... elements)
- T[] add(T[] target, T... elements)
- T[] addAll(T[]... elements)
- T[] removeElement(T[] target, T... elements)
- T[] removeNulls(T... elements)
- T[] sort(T... elements)
- Boolean allTrue(Boolean... elements)
- Boolean anyTrue(Boolean... elements)
- Boolean allFalse(Boolean... elements)
- Boolean anyFalse(Boolean... elements)
- Boolean noNulls(T... elements)
- T max(T... elements)
- T min(T... elements)
- T avg(T... elements)
- T sum(T... elements)
- T product(T... elements)
An ability to specify context data in the OpenL Tablets rule as a separate argument is added.
Now context data can be passed as a separate argument.
Improvements
Core, Rule Services:
- An error() function is able now to return the error with the error code.
error("ERRCD1", "Error Description1") ->{ "code": "ERRCD1", "message": "Error Description1", "type": "USER_ERROR"}
Core:
- The Date() function/constructor and supplementary functions for manipulations with the Date object are introduced.
- Memory usage in DecisionTableMetaInfoReader is reduced.
- THB currency support is added.
Rule Services:
- Automatic deployment of the "classpath:*/openl/*.zip" resources to the repository is added.
Webstudio:
- The index.lock file is deleted on the Git repository initialization during OpenL Tablets WebStudio startup.
- Deployment repositories are optional now.
Demo, Docker:
- The Heroku container deployment is now supported.
- Jetty is updated to version 10. The amount of the used Jetty modules is reduced.
Webstudio, Rule Services:
- Default fallback values for repeated configurations are supported.
Fixed Bugs
Core:
- The contains(StringRange, String) function cannot be matched to the range starting with zero.
- An incorrect error and warning messages are displayed for versioned tables if there are input or output parameters of the CustomSpreadsheetResult type.
- Spreadsheet compilation fails because of the spreadsheet title containing a line break.
- No error is displayed in a test table referencing the SpreadsheetResult data table in a column of the CustomSpreadsheetResult type.
- The nearest common type for a 1-dimensional array and a 2-dimensional array is identified as an array of elements of Object type.
- java.lang.NullPointerException is logged on opening a smart rules table with a merged cell.
- An incorrect text is highlighted in the error if the rule name starts with a number.
- A non-informative error message is displayed if the OpenL Tablets keywords are used in the table incorrectly.
- No error is displayed if the rule is called with the number of arguments exceeding the number of input arguments.
- The rule table does not properly cast the SpreadsheetResult called by a full name from another module.
- The java.lang.NullPointerException error is displayed for a constructor if the datatype contains an error.
- The copy() operation does not copy transient object fields.
WebStudio:
- The Delete action button gets corrupted on project deletion.
- The "compilation failed with circular reference issue" error is displayed for specific tables.
- A session cookie does not contain the HttpOnly and Secure attributes.
- The "Something went wrong" error is displayed on expanding a CustomSpreadsheetResult input item.
- RepositoryTreeController is vulnerable to a JNDI injection.
- “Something went wrong” error is displayed on executing the Run table.
- A "Sorry! Something went wrong. " error is displayed on the rule table opening if the row under the table is merged.
- The Open/Close action button is displayed for a local project after updating the repository local path.
- A user record with special symbols in its name cannot be updated or removed.
- The "Constructor not found" error is displayed in the dependent table if the main table is modified.
- The "Manage Sources/Edit module" pop-up window cannot be closed if the "Back" browser button is clicked.
- Search results include system virtual tables.
- A user assigned a role of big length fails to log into OpenL Tablets WebStudio.
- Editing any function via OpenL Tablets WebStudio breaks the Excel file.
- The "Deployment1" name is automatically populated for the first added deployment repository.
- The length of the "Default group for all users:" field is less than 65.
- A user with the only Viewers role assigned cannot open a project via the "Open" button.
- An error occurs on sending a request larger than 200KBytes.
- The 'Deploy’ action button is displayed for a local project and users without the deploy permission.
- OpenL Tablets WebStudio stops responding on opening a project if the method receives many parameters.
- A circular dependency error is not displayed.
- UI issues occur when the Design repository is not accessible.
- A user cannot copy the closed project if the 'Do not link to origin project' option is selected.
- The 'Group name' field is vulnerable to the XSS script attack.
- The 'URL' field for the Git repository is populated with the default JDBC URL value if the first repository is a JDBC repository.
- The incorrect module is displayed in the breadcrumbs if a user navigates to the table from the Table Dependency tab.
- A link to a datatype table is displayed incorrectly.
- No warning message is displayed to a user when opening a project with the same name as another opened project.
- An error message is not displayed if incorrect workspace directory is specified.
- The Delete action button gets corrupted on project deletion.
DEMO:
- Warning messages are displayed for Tutorial 6 and Tutorial 8.
- The "java.security.AccessControlException" error is displayed on when creating a project in Demo and OpenL Tablets Rule Services fails to start.
- An AccessControlException error is displayed for concurrent execution when Java security policy is enabled.
- Issues with DEMO application when it is run under a proxy with a prefixed location path.
DEMO, Docker:
- Memory settings cannot be redefined via JAVA_OPTS.
Rule Services:
- Memory leaks are detected in Tomcat logs on stopping.
- If the 'message' attribute is null, it has a String type if a response type is 422.
- A deadlock accidently occurs on deploying to a Deployment repository.
- A server error 500 'java.lang.IllegalArgumentException' in OpenL Tablets Rule Services accidently occurs.
Security:
- SAML attributes are not applied if SAMLResponse have not a defined attribute type like xsi:type="xs:string"
Docker:
- Docker images are not working with non-Latin symbols.
Updated Libraries
Vulnerabilities are fixed: CWE-611, CVE-2022-22978 ,CVE-2022-31159.
- Spring Framework 5.3.22
- Spring Security 5.7.2
- Spring Boot 2.7.1
- Kafka 3.2.0
- CXF 3.5.3
- Cassandra Java Driver 4.14.1
- Log4j 2.18.0
- Jetty 10.0.11
- Hive JDBC 3.1.3
- Apache Avro 1.11.0
- ZooKeeper 3.7.1
- Apache Thrift 0.16.0
- Netty 4.1.79.Final
- Kotlin Stdlib 1.7.10
- Apache Groovy 3.0.11
- Amazon S3 SDK 1.12.262
- Azure BLOB Client 12.18.0
- JGit 6.2.0.202206071550-openl
- Mockito 4.6.1
- Joda Time 2.10.14
- Guava 31.1-jre
- Apache XML Security 2.3.1
- Swagger UI 4.11.1
- Istack Common Utility Code Runtime 3.0.12
- H2 DB 2.1.214
- Hibernate ORM 5.6.10.Final
- Hibernate Validator 6.2.3.Final
- Reactor Netty 1.0.21
- OkHttp 4.10.0
- Reactive Streams 1.0.4
- Datasource Proxy 1.8
- Spring Security 5.7.1
Migration Notes
Core
Method add(T[] array, int index, T element) has been renamed to addElement(T[] array, int index, T... elements). Previously it worked unpredictably because of the same declaration was matched to the two different implementation. E.g. the following code: add(array, 1, 2) // [10, 20, 1, 2] or [10, 2, 20] ? where array = [10, 20]
could be evaluated in not the same way as add(array, "1", "2") // exactly ["10", "20", "1", "2"], where array = ["10", "20"]