By default, there are no physical connections between a state-free AppServer and a client—that is, all AppServer agents are available to handle requests from any client making a request for its application services. As long as a state-free AppServer has agents available (it has at least one agent that is not currently handling a client request), it can handle requests from any client on the network.
However, at any time during the handling of a client request, a client can become bound to the agent—that is, the AppServer agent handling the request becomes available to handle requests only from the client it is currently servicing. The function of this physical binding is very different from a bound connection in stateless operating mode (see the Statelessoperating mode).
A client can bind to an agent in state-free operating mode only by invoking a RUN PERSISTENT request to instantiate a persistent procedure. When this happens, the AppServer broker that receives the request creates a physical connection between the client and an available agent where the persistent procedure is then instantiated.
For the client, this physical binding is valid only for requests to execute internal procedures or user-defined functions of the remote persistent procedure that it has instantiated on this agent. If the client makes any other requests for the specified application service, all other available AppServer instances or other available agents of a single AppServer can execute these requests. For the agent, this physical binding means that it is no longer available to handle requests from any other clients while it is bound to this single client.
Caution: Binding a single session-free AppServer agent to a single client, as described in this section, reduces the resources available to handle requests from all clients for the session-free application service. Therefore, be certain that your application requires this type of agent binding before using it for application development. As an alternative, consider using RUN SINGLE-RUN or RUN SINGLETON, both of which instantiate an external procedure without binding to the agent.
A bound agent becomes free (unbound) and is again available to handle requests from all clients when the bound client deletes the remote persistent procedure that it has created on the agent. Note that it is the successful instantiation (by means of RUN PERSISTENT) of a remote persistent procedure that forces an agent to become bound to the client. If a client fails in its attempt to instantiate a remote persistent procedure, no binding between the client and AppServer agent occurs.
In general, then, a state-free AppServer agent is available to handle a client request as long as it is not currently processing a client request and as long as it is not waiting on an exclusive bound connection to a single client. If a state-free AppServer has no AppServer agents available to handle requests, it returns a run-time error to the OpenEdge interface (client or Web service) that sent the request.
Note: In stateless operating mode, if the AppServer receives a request from a connected client and it has no available agents, it queues the request until an agent becomes available to execute it instead of returning an error, as does a state-free AppServer.
To help a state-free AppServer session perform common tasks for each request that it receives, you can configure Activate and De-activate procedures on the AppServer. For more information on connection and request management on a state-free AppServer, see Programming the AppServer.