The ABL session pool is managed by the session manager which is common to all of its configured OpenEdge web applications in a PAS for OpenEdge instance.

The properties specified in the instance-name/conf/openedge.properties configuration file control how the session manager manages the ABL session pool, the pool of multi-session agents, and the local network socket connections.

The file can be edited or managed using the OEPROP command-line utility, OpenEdge Management, or a text editor.

This topic describes the OpenEdge properties and how they can be used to tune the multi-session agent and ABL sessions of a PAS for OpenEdge instance:

Property [AppServer.SessMgr] Default Description (per ABL application)
numInitialAgents 1 Number of multi-session agent processes to create at server startup.
maxAgents 2 Maximum number of multi-session agent processes that can exist.
maxABLSessionsPerAgent 200 Maximum number of ABL sessions per multi-session agent process.
maxConnectionsPerAgent 200 Maximum number of network connections between session manager and a multi-session agent.
requestWaitTimeout 15000 Maximum time in milliseconds that a client request waits for an ABL session before an error is generated.
idleSessionTimeout 300000 Maximum time in milliseconds that an ABL session remains idle before it is shut down.
idleAgentTimeout 1800000 Maximum time in milliseconds that a multi-session agent remains idle before it is shut down.
agentListenerTimeout 300000 Maximum time in milliseconds that the session manager waits for an multi-session agent to report it started before an error is generated.
agentStartLimit 0

Determines the maximum number of agents that can be started at the same time. If this value is zero or not defined, then no limit is enforced. This property can be used to prevent an "agents explosion", which is sometimes seen when a burst of new client activity occurs when no agent sessions are available on existing agents. In response to this, the session manager may try to start a new agent process for every client request received. The agentStartLimit property can cap the number of agents started simultaneously.

agentStartupParam -T "${catalina.base}/temp

Specifies the agent startup parameters that are used by each process when the session manager starts an agent.

The default value is set to -T "${catalina.base}/temp, which indicates the temp directory used by the agent.

You can also specify any client-side startup parameter that may be used when starting a Progress client startup. For example, -tmpbsize, -Bt, -tok, -s, and so on.

minAgents 1
Minimum number of agents expected at any time. If the number of agents drops below this number, then a client request causes the session manager to start enough agents to match this number.
  • Setting of 0 means minAgents is disabled.
  • Any value greater than 0 is used for minAgents.
  • If minAgents is greater than maxAgents, then the minAgent value is lowered to match the maxAgents.

The session manager ensures that there is always one multi-session agent available at all times before running the request.

idleConnectionTimeout 300000 Timeout value in milliseconds between a PAS for OpenEdge client and the session manager. If a connection is idle for more than the specified timeout value, the session manager terminates the connection by automatically disconnecting the connection to the PAS for OpenEdge instance.
idleResourceTimeout 0 Timeout value in milliseconds to determine the frequency with which the PAS for OpenEdge instance checks for idle resources. Any resource (for example, a connection, agent, or client session) that was not accessed more recently than the specified timeout for that property is terminated. If this property is set to 0, then idle resource checking is disabled.
defaultAgentWaitAfterStop 30000 Timeout value in milliseconds to wait for a busy agent to finish work during a shutdown caused by the expiration of the idleAgentTimeout. This value should be greater than the normal execution time of the application's longest running request.
defaultAgentWaitToFinish 30000 Timeout value in milliseconds to wait for a stopping agent to finish work during a shutdown caused by the expiration of the idleAgentTimeout. When this timeout expires, the agent is forcibly shut down. This value should be greater than the longest time required to handle a normal STOP condition for the application.
Property [Appserver.Agent] Default Description (per multi-session agent)
numInitialSessions 2 Number of ABL sessions started at multi-session agent startup time.
Note: Full property descriptions are located in the instance-name/conf/openedge.properties.README file.
How the OpenEdge properties should be set depends on the operating model implemented by your ABL application:
  • Stateful
  • Stateless

These application model implementations affect property settings and require an understanding of how the ABL session manager manages the client session pool, the multi-session agents in which the ABL sessions run, and how ABL sessions are selected to execute client requests.

The first priority of the session manager is to conserve system resources by maximizing the pool of ABL sessions and by scaling a larger number than is needed to handle the current client load. PAS for OpenEdge uses a find-first-free scheduler and only one ABL session. It thereby consumes only one session's worth of OS memory and file system handles.

The following is a general description of how the session manager implements its find-first-free scheduling of client requests using multi-session agents, local socket connections, and ABL sessions:

  1. The instance receives a client request from an oeabl web application transport.
  2. The first multi-session agent in the list of multi-session agents is set as the current agent.
  3. If the current multi-session agent has an unused agent connection and a free ABL session, the multi-session agent executes the client request.
    • During this time, the local agent connection is placed into an in-use state and the free ABL session is bound to the agent connection, so neither is available for use by other client requests.
    • When the client request ends, the ABL session is marked as free if a persistent procedure has not been executed and the ABL application code has not set a bound-client condition. The local agent connection returns to the unused state as available to execute any other client's request.
  4. If the number of current multi-session agent local agent connections is less than the maximum, and any ABL sessions are free, the session manager creates a new agent connection to run requests on and executes the client request.
  5. If the number of current multi-session agent local agent connections reaches the maximum, and another multi-session agent exists in the multi-session agent list, then the next multi-session agent is set as the current agent, and executes the client request.
  6. If the maximum number of multi-session agents has been reached, create a new multi-session agent. It is added to the end of the multi-session agents list, set as the current agent, and executes the client request .
  7. If you receive a large number of client requests, then queue the request if the maximum request queue size is not exceeded. Queued requests are executed as soon as a multi-session agent socket connection becomes available.

PAS for OpenEdge provides support for stateless and stateful application architecture models, where all client requests are handled stateless and the ABL application can temporarily bind the client and operate in a stateful manner. The implications of this determine how many ABL sessions and multi-session agents to configure.