OpenEdge Operations

Progress continually improves OpenEdge operations by focusing on making OpenEdge more secure. In this release, a second authentication step has been added to the Transparent Data Encryption (TDE) keystore with a Hardware Security Module (HSM). Enterprise privacy and confidentiality regulations are also supported when PAS for OpenEdge is deployed in an OAuth2 or OpenID Connect (OIDC) environment that uses JSON Web Encryption (JWE) to encrypt the security token.

This section details OpenEdge operations features in this release.

Support for Hardware Security Module with TDE

Growing TDE security requirements for OpenEdge reflect increasing requirements for data confidentiality. TDE provides data confidentiality through the ability of its encryption key generation and storage to resist attacks. Access to TDE encrypted data requires opening the TDE keystore. While TDE uses strong external encryption key storage, data confidentiality depends on control of the database, its keystore, and the keystore passphrase.

TDE uses an external keystore system that is not part of the OpenEdge database. The TDE keystore system employs a strongly encrypted and access controlled .KS keystore file for encryption key storage.

An HSM is an enterprise-scale physical computing device that safeguards and manages digital keys, performs encryption and decryption functions for digital signatures, and provides strong authentication and other cryptographic functions. An HSM can be a hardware, firmware, software, or network device. To strengthen OpenEdge keystore security, you may add an external enterprise-managed HSM component to the OpenEdge TDE encryption key storage security. The HSM storage, which may be a local, network, or cloud service, provides client access using the PKCS #11 standard API, designed to comply with the FIPS 140-2 Level 2 certification requirements.

Note: The OpenEdge Advanced Security add-on (Progress OEAS) is required to use HSM.
The following new PROUTIL EPOLICY MANAGE KEYSTORE options support HSM authentication in an OpenEdge database:
  • EnableHSM–Adds the HSM authentication to a database that already has encryption enabled.
  • DisableHSM–Removes the HSM authentication from a database.

For more information, see Add HSM as a second layer of TDE authentication and PROUTIL EPOLICY MANAGE qualifier.

A separate utility, PROUTIL HSMVALIDATE, allows you to troubleshoot and validate the HSM environment. For more information, see PROUTIL HSMVALIDATE qualifier.

OAuth2 Adds OIDC

OIDC is an industry-standard authentication layer built on the OAuth2 authorization protocol. Using OIDC, Developers can perform remote validation of access tokens, both opaque and non-opaque, for identity management, making their applications more secure. OIDC provides a unique identity token to share common user data with clients. Developers can auto-fill standard fields like email, address, and phone number with the supplied data, improving the end-user experience.

PAS for OpenEdge supports the following:

  • Remote validation of access tokens.
  • Adding identity token data to a CLIENT-PRINCIPAL object.

PAS for OpenEdge leverages the existing oauth2 client login model and adds new security properties to support the OIDC functionality. The OESECTOOL utility includes support for testing the OIDC configurations.

For more information on how to configure remote validation, see Configure remote validation.

For more information on how to add identity token information to a CLIENT-PRINCIPAL object, see Add identity token data to a CLIENT-PRINCIPAL object.

Encrypt Payloads with JWE

OpenEdge Developers, Application Administrators, and Security Administrators benefit from the addition of JWE because it provides the ability to encrypt the payload in a JSON Web Token (JWT). Encrypted tokens ensure point-to-point security and are required for OIDC environments. OIDC, which is an identity layer on top of the OAuth 2.0 protocol, allows clients of all types to request and receive information about authenticated sessions and users.

Existing OAuth2 applications have the option to replace JSON Web Signature (JWS) tokens with JWE tokens. New applications developed and deployed to OAuth2 or OIDC environments must use JWE tokens to meet regulatory requirements.
Note: The OpenEdge Advanced Security add-on is required to use JWE tokens.

Use JWE tokens to encrypt the payloads for OAuth2 tokens.

For more information, see Encrypt payloads.

Troubleshooting

For more information on enabling debug logging, see Debug logging for OAuth2.

OESECTOOL Enhancements

OESECTOOL is a utility designed for test environments. It allows Security Administrators to test:
  • PAS for OpenEdge OAuth2 configurations.
  • PAS for OpenEdge SAML configurations.
Configuration for both OAuth2 and SAML test servers is simplified using the following properties files:
  • OAuth2—$CATALINA_BASE/conf/oesectool-oauth2.properties.
  • SAML—$CATALINA_BASE/conf/oesectool-saml.properties.

The OAuth2 test server supports testing the OIDC and JWE features. The SAML test server supports SAML logouts.

Use the existing OpenEdge key and certificate management utilities for testing with OESECTOOL.

Note: The OpenEdge Advanced Security add-on is required to use JWE tokens.
  • For more information on testing OAuth2 configurations, see Test OAuth2 configurations.

  • For more information on testing SAML configurations, see Test SAML configurations.

  • For more information about keys and certificates, see Manage OpenEdge Keys and Certificates.

  • For more information on oesectool-oauth2.properties, see the $CATALINA_BASE/conf/oesectool-oauth2.properties.README file.

  • For more information on oesectool-saml.properties, see the $CATALINA_BASE/conf/oesectool-saml.properties.README file.

SAML Single Logout Support

PAS for OpenEdge supports SAML single logout (SLO). This SAML flow allows end users to send a request to a PAS for OpenEdge instance to log out of all sessions established by that user. Security Administrators benefit from this feature because they can reduce the number of active users by logging out the users whose work is complete. The user sends a logout request to the PAS for OpenEdge instance, which acts as the service provider and communicates with the identity provider to log out the user from all active sessions.

For more information on how to configure SLO, see Support for SAML in PAS for OpenEdge

For more information on oeablSecurity.properties, see $DLC/servers/pasoe/conf/oeablSecurity.properties.README.

Prevent a Third-Party Library from Blocking Fatal Signals

ABL application code sometimes executes C code from a third-party library, which can make any system calls within the PAS for OpenEdge agent process, including the pthread_sigmask() call to block signals (even fatal signals) for their own thread. Blocking of fatal signals in a thread prevents the PAS for OpenEdge signal handler from handling them properly. Any fatal signal raised under such conditions results in the PAS for OpenEdge agent process disappearing without a trace, which can cause the following:
  • Long downtime and long effort for the Technical Support and Engineering team to trace, understand, and resolve the error reported because of the disappearance of the agent process.
  • Corruption and shutting down of database when the PAS for OpenEdge agent process is attached to shared memory for a database connection and one of the threads is in critical section code for the database.

In this release, the new -DisallowFatalSignalBlock parameter prevents pthread_sigmask() from blocking fatal signals. When you add this parameter to the agentStartupParam property in the openedge.properties file of a PAS for OpenEdge instance, the PAS for OpenEdge agent prevents calls to pthread_sigmask() from attempting to block fatal signals such as SIGSEGV, SIGBUS, SIGILL, and SIGFPE. However, it is effective for UNIX systems only and does not accept any arguments. This parameter also helps the IT Operations team to quickly diagnose the reason for the disappearance of the PAS for OpenEdge agent and thus saves time by achieving a faster MTTR (mean time to resolution).

For more information about agent startup parameter, see agentStartupParam property in the ABL session manager and session pool topic of the Manage Progress Application Server (PAS) for OpenEdge guide.

Kafka Event Streaming

Many modern enterprises, who are looking at distributed streaming platforms for their event-driven ecosystems, have chosen Apache® Kafka® as their preferred technology. After OpenEdge is integrated with Kafka, OpenEdge applications are able to participate in an event-driven architecture based on the Kafka platform to send and receive messages from ABL applications or to be consumed by other Kafka applications.

This release introduces sending multiple messages as a single transaction via Kafka. When sending messages via Kafka, the messages from ABL Developers can be sent with the required level of reliability without needing to manage additional producers by configuring Quality-Of-Service (QOS) settings per topic.

This section details the Kafka event streaming features in this release.

Configure Kafka on a Per-Topic Basis

The OpenEdge.Messaging API now provides the ability to set Apache Kafka® configuration properties on a per-topic basis. Previously, you could only provide limited configuration at the topic level, which meant you had to create and manage separate producers within the application to handle topics with different settings. Now, with this feature, you can apply configuration settings at the topic level, greatly reducing application complexity, overhead, and memory usage.

The following example shows how to set some Kafka properties at the topic level using SetTopicOption().
topicConfigBuilder:SetTopicOption("request.required.acks", "1").
topicConfigBuilder:SetTopicOption("request.timeout.ms", "10000"). 

For more information, see Topic configuration for a producer and Topic configuration for a consumer.

Kafka Transactional Producer

The OpenEdge.Messaging API now provides transactional control over sending messages to an Apache Kafka® cluster. A transaction is a way to group messages, so that all the messages in the group remain invisible to consumers, until all have been sent successfully, and the transaction is completed. The transactional producer is an additional set of APIs that extend the existing message producer class.

For more information, see Kafka Transactional Producer.

Object Oriented ABL

This release provides the ability to serialize a SortedSet collection to JSON. Any ABL application can use a collection of built-in objects to guarantee the elements returned by the iterator are always in sorted order. OpenEdge now uses a lightweight version of the object that contains only the values required to identify an equal element to provide a faster element look-up.

This section details this feature.

Sorted Set Collections

OpenEdge now supports built-in SortedSet collections in Object Oriented ABL (OOABL). A SortedSet is a collection that maintains a unique set of elements (objects) in a specific order.

Earlier implementations for SortedSet included using temp-tables, the OpenEdge.Core.Collections package, or arrays. These implementations have limitations and are inefficient for a SortedSet use case. The new Progress.Collections classes and interfaces provide an efficient, built-in SortedSet 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 set.

To support sorted set collections, the following five new built-in classes and interfaces (along with their associated properties and methods) have been added to ABL:

For more information, see Sorted set collections in object-oriented ABL.

Developer Productivity

An API-first approach allows OpenEdge to become a truly open platform with service and data integration. This release provides new features to empower Developers to meet business needs with improved time to market, increased productivity and performance, and lower overall costs. The enhancements to ABL make it easier to get new Developers up to speed, quickly and effectively.

This section details the Developer productivity features in this release.

Identify Memory Leaks

Developers can now use the OpenEdge.Core.Util.LeakCheck class in the corelib library to process log files and identify memory leaks. The LeakCheck class uses:
  • The ParseLog method to identify memory leaks and potential objects that may be causing these leaks in AVM log files, like PAS for OpenEdge logs and LOG-MANAGER logs.
  • GetReport to generate a report in JSON format.

Temp-table access is available for Developers who want to create custom reports. The OpenEdge.Core.pl is included on the default PROPATH for TTY and GUI environments.

For more information on how to use the LeakCheck class, see Identify memory leaks using the LeakCheck class in Troubleshoot ABL Applications.

For more information on the LeakCheck class, see OpenEdge.Core.Util.LeakCheck.

Eclipse Upgrade for Progress Developer Studio

In this release, the Progress Developer Studio for OpenEdge has been upgraded to use the Eclipse version 4.23 or Eclipse 2022-06.

Reduced Tooling Initialization Time in Progress Developer Studio

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.
Previously initializing large, complex workspaces in the Progress Developer Studio took a long time. To reduce overhead, the initialization process is now split into the following processes:
  • Initial scan—Processes all the project source files and stores the file-specific information in the metadata but without any inter-file dependencies. After this scan, ABL Developers can use most of the tooling features (except for find references and intelligent compilation).
  • Deep scan—Creates the relationship between various files, such as classes, procedures, and include files. After this scan, the find references and intelligent compilation features are available to ABL Developers.

For more information, download "OpenEdge 12.6 Documentation" from OpenEdge Documentation Archive and see "Parts of initialization process" in Progress Developer Studio for OpenEdge Online Help.

Change to the FULL_TEXT_FORMAT of the ABL Logger

As of OpenEdge 12.6, the message group (if available) is no longer displayed when using the FULL_TEXT_FORMAT of the ABL logger. In its place, the logger short name is used.

To revert to the previous behavior and display the message group, use the TOKEN_FORMAT and REPLACE_TOKENS_FORMAT filters. For example, the following options produce output that includes the message group.

{
   "logger":{
      "myLogger":{
         "logLevel":"INFO",
         "filters":[
            {
               "name":"TOKEN_FORMAT",
               "format":"[${t.now}] ${msg.grp} ${msg.level}: ${msg}"
            },
            "REPLACE_TOKENS_FORMAT",
            {
               "name":"NAMED_FILE_WRITER",
               "fileName":"my_logs.log",
               "appendTo":true
            }
         ]
      }
   }
}

The REPLACE_TOKENS_FORMAT filter allows you to fine-tune your preferred message format.

For more information, see Log filters in Troubleshoot ABL Applications.

Enhanced ABLUnit Annotation Support

OpenEdge 12.6 introduces expanded annotation support in ABLUnit to align with modern testing practices and improve test clarity and maintainability.

  • @BeforeAll and @AfterAll

    These preferred annotations supplement the legacy @Before and @After annotations. They execute once per test class—before and after all test methods, respectively. They are ideal for initializing and cleaning up shared resources.

  • @BeforeEach and @AfterEach

    These preferred annotations supplement the legacy @Setup and @TearDown annotations. They execute before and after each test method, respectively, allowing for more granular test preparation and cleanup.

Note: The updated annotation names provide greater clarity regarding their function, although the legacy names remain supported for backward compatibility.

For more information, see Annotations supported with ABLUnit in Progress Developer Studio for OpenEdge Online Help.

Database Storage

In this release, OpenEdge provides the ability to clean up unused index blocks, large file support for all OpenEdge versions, and data storage areas to be truncated online.

This section details the data storage improvements in this release.

Clean up Unused Index Blocks

The PROUTIL IDXCOMPACT qualifier is an online database utility that improves query performance by cleaning up unused index blocks. In this release, Database Administrators who have just performed a mass delete operation can improve query performance by specifying the new UNUSEDBLOCKS option. This option causes PROUTIL IDXCOMPACT to scan only the delete chain and clean up blocks if the index is a unique index. This option also improves OLTP performance and speeds up certain PROUTIL IDXCOMPACT operations.

For more information, see PROUTIL IDXCOMPACT qualifier.

Large file Support with All Database Licensing

Database Administrators typically use Enterprise-level licensing on their production databases because they have larger number of users, larger amounts of data, and require the functionality to manage both. Frequently, Database Administrators make a copy of their production database and use it on development and QA systems or for business reporting. These environments do not merit Enterprise-level functionality and are typically licensed with the Workgroup Edition. The problem arises when a Database Administrator makes a copy of their production database that uses large files and wants to use the copy in their development environment without the required Enterprise license.

In this release of OpenEdge, large file support is no longer restricted to users with Enterprise licenses.

Databases automatically have large file support enabled if they are:
  • Created with OpenEdge 12.6
  • Opened with OpenEdge 12.6
  • Converted by the conv1112 utility in OpenEdge 12.6
  • Migrated from versions before OpenEdge 12.6 to OpenEdge 12.6

For more information, see Database creation and large file support.

Truncate a Data Storage Area Online

Database Administrators frequently encounter situations where the business no longer has use for historical or already processed data. Leaving the data in an area causes processing overhead as the data grows substantially, so Database Administrators need to remove data online and quickly. Prior to this release, Database Administrators could only truncate an area offline, after truncating the BI file and disabling after-imaging.

This feature lets Database Administrators use the existing PROUTIL TRUNCATE AREA <area-name> command to truncate Type I and Type II areas when the database is online, and the BI recovery and AI roll-forward are active. Before truncating an area online, use TABLE DROP or ONLINE TABLE TRUNCATION to clear the specified storage areas of tables and their associated indexes and LOBs. After using this feature, Database Administrators can run PROSTRCT REMOVE offline on empty data storage areas to remove them.

For more information, see Truncate data storage areas.

Repair Database Corruption

This release provides several enhancements to the functionality used to detect and repair database corruption. These enhancements include offline support for additional diagnostics utilities, expanded record deletion, reduced overhead processing, and more detailed data about corrupt records.

This section details the enhancements to the repair database corruption features in this release.

Run Diagnostic Utilities Concurrently on an Offline Database

Under rare circumstances, when a failed database cannot be restarted, Database Administrators must examine the database, troubleshoot, and fix the issue, before restarting the database. Prior to this release, a Database Administrator had to run diagnostic utilities in single-user mode, which created a bottleneck for disaster recovery.

To expedite diagnosing issues, a new enhancement lets certain diagnostic utilities run concurrently. Running utilities concurrently while the database is stopped reduces the cost of checking for database corruption in a disaster scenario.

Supported utilities must have read-only connections to run concurrently.

Read-only database connections allow for any number of connections at once, limited by the maximum number of connections.

Table 1. Utilities that allow read-only connections
Supported in this release Supported in previous releases
DBTOOL options 1, 3, 4, 5, 7, and 10 PROCOPY
PROUTIL CHANALYS PROSTRCT LIST
PROUTIL DBANALYS PROSTRCT STATISTICS
PROUTIL IDXANALYS PROUTIL DUMP
PROUTIL IDXCHECK PROUTIL DUMPSPECIFIED
PROUTIL LOBANALYS
PROUTIL TABANALYS

Reduce Index Fix Processing Overhead

The PROUTIL IDXFIX qualifier is an online database utility that finds and fixes issues in indexes. Database Administrators use PROUTIL IDXFIX for:
  • Routine database health checks or when there is a problem in the database.
  • Database repairs in case of a problem.
PROUTIL IDXFIX options 1 and 8 now scan only the blocks belonging to Type II tables and indexes, instead of a whole Type II area. This improvement significantly reduces the overall run time for executing PROUTIL IDXFIX when scanning records in Type II tables for missing index entries (with and without index block validation) or when scanning Type II indexes for index block validation.
Outputs from option 1 and option 8 have changed. New messages (shown in bold) now specify Type II areas and the object number of the blocks being scanned for a Type II object:
Scanning records in area 9 for missing keys:
Processing blocks of table 13 in area 9.
Phase 1, processing block number 16384 in area 9. (8365)
Phase 1, processing block number 16385 in area 9. (8365)
…
Processed 1953724 blocks of table 13.
Record scan in area 9 complete: 0 keys read,  1953724 total.
Scanning records in area 14 for missing keys:
Processing blocks of index 40 in area 14.
Phase 1, processing block number 249856 in area 14. (8365)
Phase 1, processing block number 249857 in area 14. (8365)
Phase 1, processing block number 249858 in area 14. (8365)
…
Phase 1, processing block number 250095 in area 14. (8365)
Processed 2338 blocks of index 40.
Record scan in area 14 complete: 400 keys read,  4000 total.

These performance improvements only apply to objects in Type II areas and do not affect Type I objects.

For more information, see PROUTIL IDXFIX qualifier.

Expand Index Fix Record Deletion Scenarios

The Index Fix utility (PROUTIL IDXFIX) is often used on a production database that is stopped due to index corruption. Option 6 lets the Database Administrators delete a record and all its indexes from the database.

If any part of the record and its index entries is missing, IDXFIX cannot continue. When IDXFIX is blocked, the fallback is to attempt the dump and load functionalities: binary, binary using table scan, and ABL dump and load. Each of these approaches takes successively longer to use and to proceed through the repair attempts. Expanding the scenarios that can be repaired by IDXFIX, rather than going to more costly repairs, reduces database downtime.

In this release, Option 6 can delete records without index entries and identify the table, index, and other objects affected by record removal.

For more information, see PROUTIL IDXFIX qualifier and Troubleshoot record and index fragmentation.

Binary Dump Produces More Data and Detail about Corrupt Records

The binary dump utility and the binary dump specified utility handle certain kinds of record corruptions, such as a record continuation that cannot be found. This new behavior is expected to make the dump and load process smoother and enable customers to recover data more easily.

If a corrupt record is detected, the utilities display proper information, such as Row ID or table number of the record, which a Database Administrators can use to identify and fix the corruption.

These utilities also include an option to prevent themselves from continuing with numerous errors if too many records are corrupted. This option allows each utility to stop after a certain number of errors have been detected. By default, the utilities continue despite a high number of errors.

For more information, see PROUTIL DUMP qualifier and PROUTIL DUMPSPECIFIED qualifier.

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, making great strides toward the need for:
  • The highest levels of availability.
  • Maintaining uptime SLAs for improved customer experience.

This section details the continuous operation features in this release.

Obtain the Number of Bytes Used in an After-Imaging File

After-Imaging (AI) files record the changes in the database. The amount of data in an AI file reflects the Create-Update-Delete (CUD) operations during the timeframe when the AI file was used. When AI Management is also used, AI files can be switched and archived automatically. When AI Management copies the AI file to the specified directory, it marks the file empty and all the information of that file is lost.

To monitor the database performance, customers need to know the number of bytes used in the AI file while AI Management is executing. When the AI file is switched, OpenEdge now writes the number of bytes in a new message to the database log (.lg) file.

For more information, see Switch to a new AI file.

Dump and Load Table Data Using Data Admin Utilities

The dumping and loading of data definitions and table contents is important when developing applications and maintaining databases. You can dump and load table data using:

For more information and sample dump and load codes, see Dump and load table data using Data Admin Utilities.

Third-Party Support

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