In OpenEdge 12.2, the PAS for OpenEdge multi-session agent self-manages ABL sessions, so that whenever an ABL session creation fails, subsequent requests are queued instead of failing, and executed when an ABL session becomes available.

This addresses failures due to resource unavailability in a production environment and supports continuous operations of ABL applications. The enhanced ABL Session Management functionality allows PAS for OpenEdge to dynamically change its in-memory maxABLSessionsPerAgent based on resource availability.

ABL Session Management reduces the in-memory value of of maxABLSessionsPerAgent if the multi-session agent reaches the limit of allowed concurrent connections to a resource. Instead of connections failing due to exceeding the number of concurrent connections to a resource, the multi-session agent alerts the PAS for OpenEdge Session Manager to queue the requests, or start up a new multi-session agent (if one is available), rather than return a failed request.

The value of is maxABLSessionsPerAgent is represented in-memory with the property dynmaxablsessions.

This behavior is enabled by default.

Here’s how it works

To provide an example use case:

A PAS for OpenEdge instance has its maxABLSessionsPerAgent set to 200 in the openedge.properties file.

The PAS for OpenEdge instance connects to an OpenEdge database that has a Maximum Number of Users (-n) set to 100.

In this example, the database prevents more than 100 concurrent incoming requests, so the multi-session agent cannot start more than 99 ABL sessions when required. Therefore, any additional requested ABL sessions will fail due to exceding resource limits.

If a large connection event (a "storm of requests") occurs where a burst of people send requests, the multi-session agent turns the request storm into new sessions. The multi-session agent then sends the sessions to the OpenEdge database to request a resource. The database rejects concurrent requests after the 100th is received, and then remaining requests return as failed.

With the enhanced ABL Session Management, when the multi-session agent receives the 100th request, the minAvailableABLSessions property triggers the multi-session agent to change its in-memory maxABLSessionsPerAgent value to 99. This is because the multi-session agent is alerted that there are no more available sessions due to an error message from the database.

With the maxABLSessionsPerAgent set to 99 in-memory, the PAS for OpenEdge Session Manager queues the remaining requests until an existing ABL session becomes available. The Session Manager then routes a queued request to an available ABL session in the multi-session agent. Instead of failing, the requests are queued in the Session Manager until a session opens in the multi-session agent.

Controlling Min and Max Available ABL Sessions

The minAvailableABLSessions property has been added to openedge.properties in support of enhanced ABL Session Management. This property specifies the smallest number of available ABL sessions that are reserved by the multi-session agent during its operation. The minAvailableABLSessions property tries to pre-start an ABL session to ensure a resource connection is available. If the multi-session agent detects that the number of available sessions has fallen below the default value of 1, the multi-session agent signals to the Session Manager to lower the maxABLSessionsPerAgent to the number of current ABL sessions.

You can set the value of minAvailableABLSessions higher than 1 to request that more additional available ABL sessions be reserved for incoming requests.

When the number of minAvailableABLSessions falls below the threshold defined in openedge.properties, then the value of the maxABLSessionsPerAgent property changes to match the number of current ABL sessions.

The change of the maxABLSessionsPerAgent value occurs in-memory rather than being written into the openedge.properties file. This in-memory ABL session limit is stored in the property dynmaxablsessions.

Enhanced ABL Session Management APIs

You can view, update, and reset the in-memory value of the maxABLSessionsPerAgent (dynmaxablsessions) property using OEJMX queries or the REST APIs provided by the OE Manager application.