Migration Notes

5.27.4

Due to the default OTLP protocol change to http/protobuf in line with the specification, users must now connect via the http://jaeger:4318 port or set OTEL_EXPORTER_OTLP_PROTOCOL=grpc for using the 4317 port. For more details, refer to the release notes and the OTLP protocol specification.

5.27.3

  • Now, OpenL Rule Services will output Double and Float type numbers in a more readable format. Instead of displaying numbers like "3.1415E-5", it will show them as "0.0000031415.
  • The date parsing functionality has been enhanced for greater accuracy. Previously, erroneous components within a date input were disregarded. In contrast, the updated system now generates an error. See the examples below
    Text Actual in UTC Expected in UTC Expected in UTC+3
    10/20/20 17 20 October 2020 00:00:00.000 Error Error
    10/20/2017 18:00 20 October 2017 00:00:00.000 20 October 2017 18:00:00.000 20 October 2017 18:00:00.000
    10/20/2017 09:00 20 October 2017 09:00:00.000 the same the same
    10/20/2017, 10/20/2018 the first date is parsed only an array of dates an array of dates
    2017-10-20T09:00:00 20 October 2017 09:00:00.000 the same the same
    2017-10-20T09:00:00.9876 20 October 2017 09:00:00.000 20 October 2017 09:00:00.987 20 October 2017 09:00:00.987
    2017-10-20T09:00:00.9876Z 20 October 2017 09:00:00.000 20 October 2017 09:00:00.987 20 October 2017 12:00:00.987
    2017-10-20T09:00:00Z 20 October 2017 09:00:00.000 20 October 2017 09:00:00.000 20 October 2017 12:00:00.000
    2017-10-20T09:00:00GMT+3 20 October 2017 09:00:00.000 20 October 2017 06:00:00.000 20 October 2017 09:00:00.000
    2017-10-20T09:00:00+03:30 20 October 2017 06:00:00.000 20 October 2017 05:30:00.000 20 October 2017 08:30:00.000
    2017-10-20T09:00:12.1212+03 20 October 2017 09:00:12.000 20 October 2017 06:00:12.121 20 October 2017 09:00:12.121
    2007-04-05T24:00 5 April 2007 00:00:00.000 6 April 2007 00:00:00.000 6 April 2007 00:00:00.000

    5.27.1

    The following properties support is stopped:

    • ruleservice.instantiation.strategy.lazy
    • ruleservice.jaxrs.responseStatusAlwaysOK

    5.27.0

    The user database schema is updated. It is recommended to create a backup before making any changes.

    The following deprecated code is removed:

    • org.openl.rules.helpers.InOrNotIn
    • org.openl.rules.helpers.IDoubleHolder
    • org.openl.rules.helpers.DoubleHolder
    • org.openl.rules.helpers.DoubleRange#intersect
    • org.openl.rules.helpers.DoubleRange#compareLowerBound
    • org.openl.rules.helpers.DoubleRange#compareUpperBound
    • org.openl.rules.helpers.DateRange#getUpperBoundType
    • org.openl.rules.helpers.DateRange#getLowerBoundType

    5.26.13

  • Now, OpenL Rule Services will output Double and Float type numbers in a more readable format. Instead of displaying numbers like "3.1415E-5", it will show them as "0.0000031415.
  • The date parsing functionality has been enhanced for greater accuracy. Previously, erroneous components within a date input were disregarded. In contrast, the updated system now generates an error. See the examples below
    Text Actual in UTC Expected in UTC Expected in UTC+3
    10/20/20 17 20 October 2020 00:00:00.000 Error Error
    10/20/2017 18:00 20 October 2017 00:00:00.000 20 October 2017 18:00:00.000 20 October 2017 18:00:00.000
    10/20/2017 09:00 20 October 2017 09:00:00.000 the same the same
    10/20/2017, 10/20/2018 the first date is parsed only an array of dates an array of dates
    2017-10-20T09:00:00 20 October 2017 09:00:00.000 the same the same
    2017-10-20T09:00:00.9876 20 October 2017 09:00:00.000 20 October 2017 09:00:00.987 20 October 2017 09:00:00.987
    2017-10-20T09:00:00.9876Z 20 October 2017 09:00:00.000 20 October 2017 09:00:00.987 20 October 2017 12:00:00.987
    2017-10-20T09:00:00Z 20 October 2017 09:00:00.000 20 October 2017 09:00:00.000 20 October 2017 12:00:00.000
    2017-10-20T09:00:00GMT+3 20 October 2017 09:00:00.000 20 October 2017 06:00:00.000 20 October 2017 09:00:00.000
    2017-10-20T09:00:00+03:30 20 October 2017 06:00:00.000 20 October 2017 05:30:00.000 20 October 2017 08:30:00.000
    2017-10-20T09:00:12.1212+03 20 October 2017 09:00:12.000 20 October 2017 06:00:12.121 20 October 2017 09:00:12.121
    2007-04-05T24:00 5 April 2007 00:00:00.000 6 April 2007 00:00:00.000 6 April 2007 00:00:00.000

    5.26.10

    Upgrading H2 DB requires migrate according to the migration guide are described in https://www.h2database.com/html/migration-to-v2.html

    5.26.1

    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"]

    5.26.0

    WebStudio SAML

    If the SSO:SAML user mode was used in 5.25, for successful migration to 5.26, add the "Entity ID" parameter to webstudio.properties (entity ID = Client saml name) before the migration. Example: security.saml.entity-id=webstudio. This parameter can also be added in the "Entity ID" field in the installation wizard/Step3. Note that in 5.25, if the entity ID is not provided, the default value is http://localhost:8080/webstudio/saml/metadata is used by the system. In 5.26, the default value is "webstudio".

    The link for downloading WebStudio SAML metadada XML is http://localhost:8080/webstudio/saml2/service-provider-metadata/webstudio .

    Note that a private certificate is now generating per WebStudio instance and stores in the properties file. Previous hardcoded private key was removed from the Java KeyStore. It means, that public key for the IdP must be updated from the WebStudio SAML metadata XML.

  • On the Identity Provider side it needs to define:
    Single sign-on URL = http://localhost:8080/webstudio/login/saml2/sso/webstudio
    Audience URI (Entity ID) = webstudio

    Webstudio, Rule Services

    Java 8 is not supported any more. Java 11 is supported only!

    Due to MSSQL driver upgrade, use encrypt=false;trustServerCertificate=true; in the connection string if your server does not support encryption. For more information, see:
    https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/ssl-certificate-rotation-sqlserver.html and
    https://docs.microsoft.com/en-us/sql/connect/jdbc/release-notes-for-the-jdbc-driver?view=sql-server-ver15#changes-in-102

    Upgrading H2 DB requires migrate according to the migration guide are described in https://www.h2database.com/html/migration-to-v2.html

    Starting from OpenL Tablets 5.26.0, Groovy Scripts have an access to all Java types of a project and its dependency projects generated from their Datatype tables. It was the most requested feature after Groovy Scripts support had been introduced. To support the feature we had to change a module compilation algorithm to use the same classloader for each project. Before the change, each module in the project had used its own classloader. The change may break backward compatibility if multiple projects use Datatypes with the same name even if the modules don’t have a relationship, but a relationship between projects exists. To migrate your projects in this case, you should define unique package names there (refer to Ref Guide, Dev Properties - > Dev Properties List section).

    5.25.3

    Core:

    DoubleValue and similar types in the org.openl.meta package are deprecated for usage. It should be replaced by similar types from the Java language, E.g. DoubleValue to Double, BigIntegerValue to BigInteger and so on

    To prevent the compilation errors in 5.26.0, the *Value-specific operation should be replaced. See proposed fixes below (Compatible with 5.24.0):
    *Value-specific operation Proposed fix Alternative fix
    cast(a, 1) (Integer) a
    DoubleValue.round(a , n) round( a , n ) (DoubleValue) round( a, n )
    a.getValue() (Double) a
    DoubleValue.add(a, b) a + b (DoubleValue) ( a + b )
    a.length length( a )
    (int) (cast((a),1)) (Integer) a
    isNumeric(str) like( str, "#+" )
    like( str, "####" )
    isNotEmpty( toInteger( str ) )
    isNotEmpty( toDouble( str ) )

    SOAP/WSDL services and Aegis converters are deprecated for usage. It should be migrated to REST/OpenAPIv3 services.

    5.25.2

    Core:

    In previouse version there was an issue with matching fields in an unpredictive order, when idntifiers are in the different letter case in the same class. E.g. when java class contained the similar fields and getters/setters (static and non-static), e.g. public static ID field and getId() method. So to prevent unpredictive binding of idntifiers, there was added additional check, which fails if clash is possible.

    In the log it seems like:

    • Static field 'Id' is not found in type 'MyBean'.
    • Metod 'calc(Reference<MyBean>) is not found.

    To fix this errors it needs to correct identifiers to prevent clashing. E.g. use myBean.id calc(myBean) instead of MyBean.Id calc(MyBean)

    5.24.0

    WebStudio

      • Project changes history created before migrating to 5.24.0 is not available after migration. The files will remain in the folder but in WebStudio there will be no records in "Local Changes" and no possibility to restore them. A user must save the necessary changes before the migration.
      • While migrating from 5.23.x to 5.24.0, all necessary files and properties are moved automatically. To migrate from earlier versions, such as 5.21.16 or 5.22.7, migrate manually to the last minor version of 5.23.x and then to 5.24.0. That is, perform migration step by step, for example, 5.22.7 > 5.23.11 > 5.24.0. More details are in the document Migration from earlier than 5.23.x.
      • Default repository folders are changed in 5.24.0. New folder paths are used by default only for a freshly installed 5.24.0. After migration from 5.23.x, old local paths remain, and if adding new repositories in 5.24.0, the path is generated from the old path.
      • The administrator user is deleted after migration to 5.24.0. To set a new administrator user, use the "security.administrators" property in the webstudio.properties file.

    Rule Services

    The following properties were changed

    BeforeAfter
    ruleservice.datasource.filesystem.supportDeployments Removed.
    production-repository.support-deployments Removed.
    ruleservice.instantiation.strategy.lazy=true ruleservice.instantiation.strategy.lazy=false

    5.23.9

    WebStudio

    The following properties were changed

    BeforeAfter
    { 0} { 1} { 2} in repository.design.new-branch-pattern { project-name} { username} { current-date}
    repository.design.new-branch-pattern repository.design.new-branch.pattern
    repository.design.comment-validation-pattern repository.design.comment-template.comment-validation-pattern
    repository.design.invalid-comment-message repository.design.comment-template.invalid-comment-message
    repository.deploy-config.comment-validation-pattern repository.deploy-config.comment-template.comment-validation-pattern
    repository.deploy-config.invalid-comment-message repository.deploy-config.comment-template.invalid-comment-message
    repository.design.factory = org.openl.rules.repository.git.GitRepository repository.design.factory = repo-git
    repository.production.factory = org.openl.rules.repository.db.JdbcDBRepositoryFactory repository.production.factory = repo-jdbc
    org.openl.rules.repository.db.JdbcDBRepositoryFactory repo-jdbc
    org.openl.rules.repository.db.DatasourceDBRepositoryFactory repo-jndi
    org.openl.rules.repository.aws.S3Repository repo-aws-s3
    org.openl.rules.repository.git.GitRepository repo-git

    Rules Services

    BeforeAfter
    production-repository.factory = org.openl.rules.repository.LocalRepositoryFactory production-repository.factory = repo-file
    org.openl.rules.repository.db.JdbcDBRepositoryFactory repo-jdbc
    org.openl.rules.repository.db.DatasourceDBRepositoryFactory repo-jndi
    org.openl.rules.repository.aws.S3Repository repo-aws-s3
    org.openl.rules.repository.git.GitRepository repo-git
    ruleservice.datasource.filesystem.supportDeployments production-repository.support-deployments

    5.23.8

    Rule Services

    The following properties were changed

    BeforeAfter
    ruleservice.datasource.filesystem.supportVersion Removed.
    ruleservice.datasource.deploy.clean.datasource Removed. Use your startup script if it is required to clean files before run RuleServices.
    ruleservice.datasource.dir production-repository.uri
    ruleservice.tmp.dir Removed. java.io.tmpdir is used instead.

    OpenL Rules

    The following API was deprecated

    BeforeAfter
    org.openl.rules.ruleservice.core.interceptors. AnyType org.openl.rules.ruleservice.core.interceptors. RulesType
    org.openl.rules.project.resolving. CWPropertyFileNameProcessor Remove any references from rules.xml files. The default implementation covers this functionality out-of-the-box.
    org.openl.rules.project.resolving. PropertiesFileNameProcessor Migrate custom implementation to use new API. Be noted that the default implementation covers multiple scenarios of parsing file names and can be used instead of the custom implementation.

    5.23.6

    WebStudio & Rule Services

    The following properties were changed

    BeforeAfter
    version-in-deployment-name Removed.

    5.23.3

    WebStudio

    The setting "Unlimited numbers of copies" will automatically be set to false after migration to this version, and the setting "The maximum count of saved changes for each project:"=100 will be applied. If there is a need to store unlimited amount of changes, set the setting "Unlimited numbers of copies" = true before opening any project. This setting is changed to prevent uncontrolled consumption of free space on HDD/SDD for 'undo' operations during editing a project.

    The following properties were changed

    BeforeAfter
    project.history.count=0 project.history.count=100
    project.history.unlimited=true Removed. Use project.history.count=

    Rules Service

    The following properties were changed

    BeforeAfter
    ruleservice.aegisbinding.readXsiTypes ruleservice.aegis.readXsiTypes
    ruleservice.aegisbinding.writeXsiTypes ruleservice.aegis.writeXsiTypes
    ruleservice.aegisbinding.ignoreNamespaces ruleservice.aegis.ignoreNamespaces
    ruleservice.deployer.enable ruleservice.deployer.enabled
    DISABLED, ENABLED and SMART in ruleservice.jackson.defaultTypingMode JAVA_LANG_OBJECT, OBJECT_AND_NON_CONCRETE, NON_CONCRETE_AND_ARRAYS, NON_FINAL, EVERYTHING, DISABLED. See ObjectMapper
    ruleservice.jackson.defaultTypingMode = SMART ruleservice.jackson.defaultTypingMode = JAVA_LANG_OBJECT

    5.23.1

    WebStudio

    The following properties were changed

    BeforeAfter
    default.openl.compatibility.version openl.compatibility.version
    Undefined. webstudio.configured=false

    Rules Services

    The following properties were changed

    BeforeAfter
    ruleservice.baseAddress Removed.
    ruleservice.jackson.serializationInclusion = ALWAYS ruleservice.jackson.serializationInclusion = USE_DEFAULTS

    5.23.0

    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

    5.22.2

    OpenL Rules

    Behavior is changed for nulls for multiplication and division operation. For old behavior use import org.openl.rules.binding.MulDivNullToOneOperators.*

    5.22.0.1

    OpenL Maven Plugin

    Delete deprecated: generateUnitTests, unitTestTemplatePath, overwriteUnitTests in OpenL Maven Plugin

    OpenL Rules

    • Delete deprecated: org.openl.rules.calculation.result.convertor.* org.openl.rules.calc.result.convertor.*
    • Cells calculation order in Spreadsheet type table with non-spreadsheetresult return value is changed. Calculation of such spreadsheets may need to be updated or property "calculateAllCells = false" can be added for backward compatibility.
    • Month numbers are from 1 to 12 (January number is 1). Previously it was from 0.

    5.21.13

    OpenL Rules

    CalculationStep.getStepName() returns a value without type definition now. Was: "MyStep:Double". Became: "MyStep"

    5.21.11

    WebStudio

    Old modeshape-based repositories are not supported, and all related libraries were removed from WebStudio

    5.21.7

    Rules Service

    The following properties were changed

    BeforeAfter
    ruleservice.useRuleServiceRuntimeContext Removed.
    ruleservice.datasource.type = local production-repository.factory = org.openl.rules.repository.LocalRepositoryFactory
    ruleservice.datasource.type Removed.

    OpenL Rules

    • Remove any references on useRuleServiceRuntimeContext in rules-deploy.xml files.
    • The following properties are removed:Custom1, Custom2 and Transactional.
    • Remove coma from lob name for backward compatibility
    • Map<String, String> will not be compiled (generic types are not supported by OpenL)
    • Generated getters and setters are compatible with JavaBean specs v1.01 now. So for fields like iCoin - getiCoin()/setiCoin() methods will be generated.

    5.21.4

    OpenL Rules

    Test tables don't support business dimensional properties, so replace all definition with _context_ input parameter

    Expectations should be defined properly: only one result or error should be set in a test table, not both.

    5.21.3

    Rule Services

    <detail> element was changed in SOAP fault message. <type> and <stackTrace> elements were added with additional description of the fault

    OpenL Rules

    @VariationsFromRules annotation and VariationDescription class were deprecated. Please, remove reference on this classes, which will be deleted in OpenL Tablets v5.22.0

    5.21.2

    Rule Services

    Because of strict SOAP v1.1 validation, please be attentively that null values are sent like <aField xsi:nil="true" />

    OpenL Demo

    All examples have been converted to XLSX format

    5.21.1

    Rule Services

    Switched to slf4j adapter in CXF library instead of direct usage of log4j

    Deleted deprecated org.openl.rules.ruleservice.publish.WebServicesRuleServicePublisher

    5.21.0

    Rules Service

    The following properties were changed

    BeforeAfter
    repository.encode.decode.key = This is the key for password secure repository.encode.decode.key =

    OpenL Rules

    • All rules calculations should be revised. Because of changed type of division operations, please be aware that 7/4 is equal 1.75, not 1. Returned type became Double instead of Integer. Users who still need to use whole number division logic will need to adjust their rules.
    • Because of more strict table structures, it is possible that some tables would not be compiled/parsed. In this case, please check neighboring rows/columns. All comments (notes) in cells must be started from '//' (two slashes)

    5.20.0

    Rules Service

    The following properties were changed

    BeforeAfter
    version-in-deployment-name = true version-in-deployment-name = false

    Changed behavior of the Deployment Repository because of the performance issue. In exceptional case it can be restored old behavior using version-in-deployment-name=true.

    Core

    Java 7 is used as minimal supported version (Java 9 is now supported). Added validation of duplicated packages/classes inside OpenL WARs.

    OpenL Rules

    The implicit casting from Double to Integer was removed as error-prone. So use a correct argument type or use round function.

    5.19.6

    Core

    Removed deprecated IVocabulary class

    5.19.5.1

    OpenL Rules

    Used more accurate conversion from Double to BigDecimal type. Double (1.1) will be converted to BigDecimal(1.1) instead of BigDecimal(1.100000000000000088817841970012523233890533447265625)

    5.19.1

    Rule Services

    Default OpenL properties are initialized in PropertySourcesLoader now. Add the following lines into web.xml:
    <context-param>
    <description>Load default and application properties to the Spring application
    environment.</description>
    <param-name>contextInitializerClasses</param-name>
    <param-value>org.openl.spring.env.PropertySourcesLoader</param-value>
    </context-param>
    All OpenL-related properties should be in a single file. Merge rules-production.properties , ruleservice-ext.properties , openl-ruleservice.properties into application.properties. It is also recommended to remove default properties from the merged file.

    OpenL Maven Plugin

    JavaWrapperAntTask was replaced with openl-maven-plugin. Use 'generate' goal to generate Java beans from OpenL datatypes

    The following properties were changed

    BeforeAfter
    ruleservice.openl.home openl.home
    ruleservice.datasource.repositoryPropertiesFile = rules-production.properties Removed.
    production-repository.factory = org.openl.rules.repository.factories.JdbcDBRepositoryFactory production-repository.factory = org.openl.rules.repository.db.JdbcDBRepositoryFactory

    Core

    • OpenL does not use JCL loging framework anymore, all dependencies on JCL were removed. Use JSF4J instead.
    • RulesEngineFactory(File) was deprecated. Use RulesEngineFactory(URL) or RulesEngineFactory(String) instead
      String xlsxPath = "filepath/or/classpath/to/file.xlsx";

      // The argument is a filepath. It is useful for JUnit tests
      new RulesEngineFactory(xlsxPath);

      //Alternative way, using a classpath
      URL xlsxUrl = getClass().getResource(xlsxPath);
      new RulesEngineFactory(xlsxUrl);

    OpenL Rules

    • Add ‘rules.xml’ file to any rules projects which were based on a deprecated Eclipse rules project template
    • If the rules relied on ‘autoType’ property being off by default it is advised to check if rules are working correctly and add this property if necessary
    • It is also recommended to remove the following imports in 'Environment' table from the rules:
      • import java.utils.Arrays
      • import org.apache.commons.lang
      • import org.dozer.mapping
        OpenL has own 'smart' functions like isEmpty() and addAll()

    © Copyright OpenL Tablets, 2004-2024