Due to the changes made in encryption algorithm used to store the platform settings (e.g. connection strings) in the context of the Secure Confidential Information storage, when upgrading to version 9.1, it is required that you have already installed the revision 9.0.1.0 or higher to avoid downtime in the Production environment.
Issue
Encrypt built-in-function was removed
Stack
.NET, JAVA
Rationale
This isn’t an encryption function, it’s just a function to generate an hash. We isolated hashing functions in a new System Components’ extension named PlatformPasswordUtils.
Workaround
Old eSpaces will be automatically upgraded by SS to use the new equivalent method.
Comparing passwords stored in ossys_User with the result of the Encrypt built-in-function will return false
Until Berlin, passwords were stored using MD5 which is considered an insecure hashing algorithm. To make those passwords secure, after Berlin we use SHA512 with a dynamic salt to generate password hashes. Passwords are automatically upgraded when the user logs in the platform via SC, LT, DevTools, and via direct calls to LoginPassword system action.
Applications that are validating passwords by comparing the result of the Encrypt built-in-function with the password stored in the database need to be changed to use the action ValidatePassword provided by the PlatformPasswordUtils extension.
Extensions using Settings.Encrypt and Settings.Decrypt methods of the RuntimePlatform may stop working as expected
Until Berlin settings were stored using RC4 with fixed IV, which is considered an insecure hashing algorithm. To make those settings secure, after Berlin we use AES128 with a dynamic IV to encrypt settings.
Extensions that use this (non) public APIs should be validated by the customers
Extensions that compile in Java 6 may not compile as they are in Java 8
JAVA
Java 8 introduces several changes to the language and to the structure of classes and interfaces which produces compilation errors in extension code.
Some of the errors that were identified are use of deprecated APIs, changes in Java internal packages and changes in system interfaces.
Extension code should be manually changed to overcome errors in the following scenarios:
Usage of deprecated APIs - Java documentation should be checked to identify which APIs have been created to replace deprecated ones, changing extension code to stop calling deprecated ones. Ex.: Thread.stop(Throwable) method that was deprecated for some time was now removed.
Changes in Java internal packages - Upgrading Java runtime forced the upgrade of libraries that are shipped with the Platform. These libraries are not intended to be used therefore, code that references them must be changed. Ex.: Apache Http Components (httpcore.jar and httpclient.jar) were updated and extension that were using them must be updated.
Changes in system interfaces - When extension code extends or implements Java types that changed, compilation errors may occur because of new members not being implemented, forcing extension code to also implement these new members. Other errors related with name clashing may also occur forcing renames in members of derived types that are defined in the extension code. Ex.: java.sql.Statement interfaces changed from Java 6 to Java 7. Because all methods of an interface must be implemented, previous code that uses these interfaces will not compile on Java SE 7 unless you add the new methods
Oracle compatibility documentation for Java 7 and Java 8.
Platform APIs accepting/returning Lambdas instead of Actions
Improve generated code readability and decrease computational overhead caused by anonymous classes.
Code that references Platform APIs must be:
Recompiled - Code uses an Action class as argument to a new API that expects a Lambda class; or
Recompiled - Code expects a Lambda class as return from an old API call that returns an Action class; or
Changed - Code expects an Action class when calling a new API call that returns a Lambda class; or
Changed - Code overrides a class or interface member that has a Lambda class in its signature instead of an Action class
Example of code that needs change:
was: Action0 action = ...;
now should be: Action0_Lambda action = …;
was: void method(Action0 action)
now should be: void method(Action0_Lambda action)
usages in screen actions for which there are no On Notify handlers need to be executed in AJAX context (e.g. contain Ajax Refreshs)
Calls to non supported platform web services (e.g. available in SC) that requires authentication will fail with an invalid login error
Due to security constraints, passwords stored with MD5 will be automatically upgraded on login to be stored using SHA512 with dynamic SALT. After the password upgrade, calls to non supported platform web services that are using Encrypt built in to generate the password hash will fail with invalid login.
If the application calling those web services have access to the platform database they can read the hashed password from the ossys_user and use it to login. Otherwise login will fail.
Libraries shipped by the Platform were updated which may cause extension code that references them to break
With the update of the Java runtime, several libraries needed an upgrade. Also, there were cases where we were using very old versions of some libraries and the upgrade of the Java runtime allowed us to upgrade them.
Change code that references libraries.
The action NotifyWidget behavior changed and was renamed to Notify. To keep the old behavior, all usages of the NotifyWidget were replaced by the JSNotifyWidget.
To improve the performance of the NotifyWidget, the OnNotify handler is executed synchronously in the same request and same transaction.
To keep the same behavior continue using the JSNotifyWidget. To start start using server-side notifications change the JSNotifyWidget usages to Notify.
The NotifyWidget Javascript API was renamed from OsNotifyWidget to OsNotify. The previous version is deprecated but it is still available for compatibility reasons.
Make the API more developer friendly.
The built-in functions TextToEntityRefText(), IntegerToEntityRefInteger(), EntityRefIntegerToInteger(), EntityRefTextToText have been renamed to: TextToIdentifier(), IntegerToIdentifier(), IdentifierToInteger() and IdentifierToText() respectively.
JBoss Community 7.1
JBoss EAP 6.3
Weblogic 11g
Wildfly 8.2
Jboss EAP 6.4
Beta 2 release is not compatible with beta 1, therefore the development tools must be updated.