Object-Oriented ABL

OpenEdge enables Developers to use HashMaps to optimize current applications and new application features. The HashMap data structure provides better execution performance and resource utilization. It supports Generics and therefore is type-safe. It is also serializable and therefore can be persisted in a binary or JSON format.

This section details the Hash Map functionality added to object-oriented ABL in this release.

Support for Built-in Hash Map Collections

OpenEdge now supports built-in HashMap collections in object-oriented ABL. A HashMap is a collection of key-value pairs (referred to as a map) and is backed by a hash table. A map contains unique keys, where each key is associated with a value, but the values are not required to be unique (that is, multiple keys can be associated with the same value). The ordering of elements in a hash map collection is not important.

The new Progress.Collections classes and interfaces provide an efficient, built-in HashMap construct that can be used by any ABL application. In addition, the built-in construct supports a type-safe, generic programming model that allows Developers to restrict the types of objects added to the collection.

For more information, see Hash map collections in object-oriented ABL.

New HASH-CODE Function

OpenEdge now provides a new HASH-CODE function for use with hash map collections. The HASH-CODE function returns a hash code for one or more arguments, and has the following syntax:
HASH-CODE(arg [, arg]…)

For more information, see HASH-CODE function.

For more information on hash map collections, see Hash map collections in object-oriented ABL.

.NET and Java Open Client ParamArray Changes

Starting with this release, when an exception is thrown in .NET Open Client or Java Open Client while performing a request against the application server, the parameter configuration values stored in the ParamArray object are no longer reset if the values remain unmodified from their original assignment before executing the application server request.

You can return to the previous behavior by assigning the InputErrorResetPolicy or OutputErrorResetPolicy or both properties of the ParamArray to RESET_ALWAYS.

For more information, see Set the input and output error reset policy for the parameter array.

Security

OpenEdge continually monitors for potential security vulnerabilities. The effort to scan, identify, assess, and mitigate potential security threats is ongoing. Information on how Progress manages reporting, management, discussion, and disclosure of vulnerabilities discovered in OpenEdge can be found in Progress OpenEdge Security Guidelines.

OpenEdge now supports OAuth2 and SAML for authentication and authorization. These industry-standard protocols ensure a secure and convenient mechanism to authenticate users without sharing sensitive information like user credentials.

This section details the Security features in this release.

Centralize OpenEdge Domain Access Using the OpenEdge Authentication Gateway with OAuth2

System Administrators can centralize OpenEdge domain access for all PAS for OpenEdge instances by configuring an OpenEdge Authentication Gateway server to authenticate users with their existing OAuth2 identity provider. The OpenEdge Authentication Gateway automatically converts validated tokens to client-principal objects.

A quick-start guide provides step-by-step instructions on centralizing OpenEdge domain access using the OpenEdge Authentication Gateway with OAuth2.

For more information, see OpenEdge Authentication Gateway OAuth2 Quick Start.

Centralize OpenEdge Domain Access Using the OpenEdge Authentication Gateway with SAML

System Administrators can centralize OpenEdge domain access for all PAS for OpenEdge instances by configuring an OpenEdge Authentication Gateway server to authenticate users with their existing SAML identity provider. The OpenEdge Authentication Gateway automatically converts validated tokens to client-principal objects.

A quick-start guide provides step-by-step instructions on centralizing OpenEdge domain access using the OpenEdge Authentication Gateway with SAML.

For more information, see OpenEdge Authentication Gateway SAML Quick Start.

Protect Compiled OpenEdge Code

OpenEdge has introduced a new type of ABL application code packaging (or library), which can be signed and verified, to ensure that compiled OpenEdge application code (r-code) has not been corrupted or tampered with. This new type of library is known as an archive file and has a .apl file extension. The archive file is based on the Java JAR standard and has a manifest file for describing the properties of the archive. It is similar to a procedure library (.pl), but provides better security through code signing and validation. A System Administrator can create and sign an archive file using the new PROPACK and PROSIGN utilities and third-party auditors can easily inspect and verify a signed archive file to ensure applications pass security audits.

For more information, see Manage archive libraries.

To support archive files, OpenEdge has introduced the Progress.Archive.ArchiveInfo class that provides information from a manifest file for a given archive. Progress.Archive.SignaturePolicyIDs and Progress.Archive.ValidationPolicyIDs are two new enumerations describing the signature and validation policies specified in a manifest file.

For more information, see Progress.Archive.ArchiveInfo class, Progress.Archive.SignaturePolicyIDs enumeration, and Progress.Archive.ValidationPolicyIDs enumeration.

A new log entry type, SEC.Rcode, has also been introduced to enable logging related to the validation of signed archive files and the file entries contained in them.

For more information, see Signed archive file logging.

Signed Archive Libraries Shipped with OpenEdge

With the introduction of new type of ABL application code packaging or library, which can be signed and verified at runtime, some of the libraries shipped with OpenEdge are now provided as signed archives (.apl) in addition to the existing procedure libraries (.pl).

The AVM automatically includes the libraries under the gui subdirectory (for the GUI client) or the tty subdirectory (for the character mode client) in the session’s PROPATH. When both the .pl and the .apl libraries are found, the AVM includes the .apl in the PROPATH, by default.

Some libraries, such as netlib/OpenEdge.Net for HTTP Client support and messaging/OpenEdge.Messaging for messaging support, such as Kafka, are not included automatically in the session’s PROPATH. To access the functionality these libraries provide, you must add them to the PROPATH explicitly. You now have the option to include the .apl version of such libraries instead, to take advantage of the additional security provided.

Note:
  • Existing PAS for OpenEdge instances include netlib/OpenEdge.Net.pl in the PROPATH, in the openedge.properties file. You may update your configuration to use the signed archive file instead, for additional security.
  • Existing OpenEdge Authentication Gateway instances include netlib/OpenEdge.Net.pl and seclib/OpenEdge.Security.pl in the PROPATH, in the openedge.properties file. You may update your configuration to use the signed archive files instead, for additional security.

Support for TLS 1.3

PAS for OpenEdge now uses TLSv1.2 or TLSv1.3 as default, and TLSv1.3 takes precedence over TLSv1.2 in all the communication between the OpenEdge client and OpenEdge server. TLSv1.3 offers several improvements such as a faster TLS handshake and simpler and more secure cipher suites.

During a handshake between the OpenEdge client and the OpenEdge server, if there is a mismatch in the preferred list of supported groups between the TLS vendor of the client and the TLS vendor of the server, then the handshake process involves an additional cycle of key-exchange negotiations. This release achieves a performance improvement for TLSv1.3 handshake process by eliminating the additional cycle of key-exchange negotiations between the client and the server. This performance improvement for TLSv1.3 is only supported for ABL Client Socket (ABL HTTP Client).

For more information on performance improvement for TLSv1.3 using supported groups, see Change the default protocol and ciphers for Progress OpenEdge clients, CONNECT () method (Socket object), and Configure TLS security settings.

The OpenEdge Management and OpenEdge Explorer now support the TLSv1.3 secure protocol.

Database Maintenance

OpenEdge now allows Database Administrators to perform database storage optimizations without downtime. The time required to get the database online from a stored backup is reduced, making the restore process faster even for compressed DB backups. The existing option of online reorganization of data is made much smarter and consequently much faster and resource-efficient. Faster record and key validation in index check enable you to detect and repair integrity issues more quickly.

This section details the database maintenance features in this release.

Remove Data Storage Areas While the Database is Running

The structure of a database must be managed so that it continues to operate efficiently and meet user needs. Over time, the structure may require changes to improve storage or performance. In the event of degrading storage performance, a Database Administrator can now move data to a different storage area on another device and remove the old storage area. The database can remain online while the old storage device is unmounted and removed from the machine for repairs or replacement.

The driving benefit of this feature is higher availability. The database can remain online serving data while storage areas or their extents are removed from the database. All users and processes connected to the database may remain connected while the extents are removed.

Prior to this release, a Database Administrator could only use PROSTRCT REMOVE when the database is offline, requiring a maintenance outage.

The new PROSTRCT REMOVEONLINE qualifier lets Database Administrators return space to the operating system without a production outage. For operations in the cloud, the customers benefit from reducing their space needs without waiting for a scheduled maintenance window. End users experience higher availability for large database deployments because PROSTRCT REMOVEONLINE can connect to a database running in multi-user mode.

For syntax and recommendations for running the new options, see PROSTRCT REMOVEONLINE qualifier.

Faster Restore Process

Backup and restore are key steps in a database repair scenario. Progress strongly recommends that you back up an original database before you do any repair work on it, to have a fallback if the repair renders the database unusable. When the database is repaired and deemed viable, you should back up that version of it before putting it into production. If you use OpenEdge Replication, use a restore of the backup to make the replication target databases.

Reducing time for the restore operation helps reduce outage duration, because every minute matters when you restore to recover from a database outage. When creating a replication target database, a faster restore minimizes the potential for data loss.

This release offers new options to the PROREST utility that speed up restore operations.

For more information and recommendations for running the new options, see PROREST utility.

Optimized Large Table Reorganization

Periodically, Database Administrators need to reorganize a table to eliminate fragmented data. Table reorganization works efficiently online in small transactions without affecting running applications. However, for large tables, a table reorganization:
  • Takes a long time.
  • Generates a large amount of recovery data because it scans and reorganizes the entire table.
  • May increase disk space costs.
  • May make OpenEdge Replication or hot standby less efficient.
This release offers two new optimizations for the table reorganization utility:
  • The restrict option reorganizes sections of a table instead of the entire table. You can specify the starting position and possibly an ending position within the table to manage the portion to scan. To reorganize the entire table, you can omit the restrict option.
  • The smarter scanning feature optimizes the TABLEREORG utility by using an index to recognize and skip the sections of data that are already in physical sort order and do not need reorganization. The benefit is improved scalability for very large tables. This feature is enabled by default but can be disabled using the new nosmartscan option or running PROUTIL TABLEREORG with a resume option.

These optimizations speed up the table reorganization operation, greatly reduce disk space costs, and improve operational efficiency of the deployment for the Database Administrator.

For more information, see PROUTIL TABLEREORG qualifier.

View Database Character Set Information

When analyzing database corruption, a Database Administrator may find it useful to know the character set, word rule, CRC value, and code pages used in each database. The Data Dictionary provides character set information but in this release, you can easily locate and display it using the following database tools:

  • Information messages 20665 through 20668, logged by the broker to the database log file (.lg)
  • The Database status VST fields _DbStatus-Codepage, _DbStatus-Collation, _DbStatus-Wordrule-Number, and _DbStatus-Wordrule-CRC
  • Collation and Character Set Information in output from the PROUTIL -C DESCRIBE utility

To view current collation and code page settings, see OpenEdge database log file, Database status (_DbStatus) and PROUTIL DESCRIBE qualifier.

Run Multi-threaded Index Checks

Database Administrators can now run index checks using multiple threads to validate the record for each key and the key order. Using threads enables serial operations to run in parallel, improving performance.

Currently, threading is only supported for online Index Check options 3 and 4 but both options use multiple threads automatically if your system supports it. Index Check option 4, Validate key order, is selected by default when you run PROUTIL IDXCHECK. It is a best practice to also choose Index Check option 3, Validate record for each key, whenever you run PROUTIL IDXCHECK.

For a better user experience, the interval between index check messages is now increased from every 10,000 keys to every 500,000 keys. Note that like other threaded utilities, threaded index checks do not support word indexes.

For more information, see PROUTIL IDXCHECK qualifier.

Deprecated Support for OpenEdge RDBMS 1024 and 2048 Block Sizes

Support for the smaller database block sizes, 1024 and 2048 bytes, is deprecated in this release. This deprecation applies to the creation of new database and starting up existing databases.

To determine if this deprecation affects you, identify your database block size using PROUTIL DESCRIBE and locate the Block Size in the output. The larger sizes, 4096 and 8192, were introduced in Progress V8.2. The default size was changed to 4096 for Windows and Linux, early in OpenEdge 10.x.

To change the database block size, you must perform a dump of the data and load it into a database with a new structure. The dump and load can be done with PROUTIL DUMP and PROUTIL LOAD in your current version of OpenEdge.

When existing databases with the smaller block sizes are recreated with a larger block size they experience less system paging. They can also take advantage of features available only with the larger block sizes, such as large index key entries.

Enable AI Archiver Online

After-imaging (AI) files capture transaction information useful for roll-forward recovery. AI files allow you to restore a database without losing transactions completed after the last backup. The AI Archiver automates AI file management, but prior to this release, you needed to perform a backup to run AI Archiver online.

In this release, Database Administrators can turn on the AI Archiver while the database is online, without the overhead of an unnecessary online backup, improving the ease of use for customers with databases larger than 2TB.

For more information, see RFUTIL AIARCHIVER ENABLE qualifier.

Support for .NET 6 on Windows in OpenEdge

.NET 6 support is crucial for customers who developed their OpenEdge applications using .NET Framework. With this release of OpenEdge, customers can now migrate their existing Windows .NET applications to .NET 6, making the OpenEdge applications current in terms of support, security, look and feel, and long-term sustainability. By supporting .NET 6, OpenEdge provides a clear path for customers looking to maintain and modernize their .NET application without disruptive architectural redesign.

Now that .NET 6 is supported, Developers and software architects can take advantage of newer .NET libraries and platform features, such as user interface improvements for .NET-based controls. .NET 6 also provides a significant performance improvement over .NET Framework, for many types of .NET programs.

To enable this feature, use the .NET Common Language Runtime (-clrnetcore) startup parameter. If this parameter is not specified, then the AVM uses .NET Framework 4.8. For more information, see Support for .NET in OpenEdge on Windows.

Developer Productivity

In this release, the enhancements to Progress Developer Studio for OpenEdge empower Developers to increase productivity and efficiency when developing ABL applications.

This section details the Developer productivity features in this release.

ABL Type Hierarchy View in Progress Developer Studio for OpenEdge

CAUTION: From OpenEdge Release 12.8.7 onwards, this feature is deprecated and no longer supported. For more information, see Known issues in OpenEdge 12.8.7.

The ABL Type Hierarchy view shows the parent-child relationship between ABL classes and interfaces to help an ABL Developer view the hierarchy and inheritance structure of a class.

This view allows an ABL Developer to:
  • View the following details of an element:
    • SuperTypes—Parents and ancestors that are higher in the hierarchy.
    • SubTypes—Parent-child relationships that are lower in the hierarchy.
  • Navigate to any class or interface listed in the ABL Type Hierarchy view.

For more information, download "OpenEdge 12.7 Documentation" from OpenEdge Documentation Archive and see "Use ABL type hierarchy view" in Progress Developer Studio for OpenEdge Online Help.

Optimize the Initialize OpenEdge Tooling Process

CAUTION: From OpenEdge Release 12.8.7 onwards, this feature is deprecated and no longer supported. For more information, see Known issues in OpenEdge 12.8.7.

A project PROPATH specifies the paths for all the dependencies used by an ABL project to build, validate, compile, and run the project. As part of creating the Initialize OpenEdge Tooling model for a project, the Developer Studio analyses all the source files, procedure libraries (.pl), and binary files in all the file paths that are specified in the PROPATH.

Prior to this release, any change to the PROPATH caused by an addition, deletion, or modification of a PROPATH entry, after completion of the Initialize OpenEdge Tooling process, led to the re-building of the OpenEdge tooling model, from scratch.

In this release, the Developer Studio optimizes the process of re-building the OpenEdge tooling model by updating the existing OpenEdge tooling model based on the PROPATH changes and then appending it to the existing OpenEdge tooling model. This optimization avoids the time consuming process of re-building the OpenEdge tooling model from scratch.

For more information, download "OpenEdge 12.7 Documentation" from OpenEdge Documentation Archive and see "Exclude PROPATH entry from initialize OpenEdge Tooling" in Progress Developer Studio for OpenEdge Online Help.

Enhanced Error Messages for Better User Experience

In this release, the OpenEdge installer error messages are improved. They are self-explanatory, making it easier for users to troubleshoot and resolve installation issues quickly, thus enhancing the user experience.

Continuous Operations

With a strong focus on supporting modern applications for the cloud and hybrid world, this release of OpenEdge delivers even more capabilities that address the demand for continuous operations.

This section details the continuous operation features in this release.

Improved Agent Session Life-Cycle Management in PAS for OpenEdge

Prior to this release, a PAS for OpenEdge System Administrator had to configure a multi-session PAS for OpenEdge agent to automatically scale up and add more sessions to handle more concurrent requests. However, there was no provision to automatically scale down or trim the excess ABL sessions when they were no longer necessary or had reached an age limit or memory limit. System Administrators sometimes addressed this issue by creating a monitoring process to identify and trim the ABL sessions when they were no longer required.

In this release, OpenEdge adds new properties to the openedge.properties file, which allow the System Administrator to configure a PAS for OpenEdge instance to scale down the excess ABL sessions by trimming them when they are no longer necessary or have reached an age limit or memory limit.

For more information, refer to ablSessionActiveMemoryLimitFinish, ablSessionActiveMemoryLimitStop, ablSessionMemoryLimit, ablSessionMemoryDump, ablSessionFailureLimit, and ablSessionRequestLimit properties in Configure OpenEdge properties.

Third-Party Support

The following updates were made to the supported third-party products.

Version Update for Infragistics Controls

In this release, the version of the OpenEdge Ultra Controls .NET license, which installs Infragistics Ultimate UI for Windows Forms, is updated to 22.2.20222.27.

Installer Upgrade to Support InstallShield 2021 R2

In this release, the OpenEdge installer is upgraded to support InstallShield 2021 R2. This upgrade improves supportability for customers, enables support for the latest Windows operating systems, and enhances the capabilities to support MSI installers.