ABL application PING service
- Last Updated: February 11, 2026
- 3 minute read
- OpenEdge
- Version 13.0
- Documentation
The PING service allows an ABL client to interrogate the state of a data service (online or offline) and the ABL application's ability to respond. It can be used in conjunction with other static service resources (such as /static/home.html), and the HTTP status to isolate whether the server, service, transport, and ABL application are available for use. Validating the state of data service or ABL application using the PING service is better than testing with static resources because the PING service runs ABL code.
The APSV, REST, and WEB transports use the ServerStatus() method of the OpenEdge.Rest.Admin.AppServerStatus class to implement the PING
service. Each transport executes the same AppServerStatus class for the PING service, which can be extended to
return application-specific information about database connections, PROPATH, loaded
libraries, caches, available services, and more.
Transport Syntax
REST
|
WEB
|
|
Prior to OpenEdge 12.5, the PING service for the WEB transport could be enabled in one of two ways:
- By configuring a handler in the openedge.properties file that associates the /_oepingService/_oeping endpoint with the
OpenEdge.Web.PingWebHandlerwith the following line:handlern=OpenEdge.Web.PingWebHandler : /_oepingService/_oepingNote:handlernshould be replaced with whichever sequential handler you are creating for _oeping. For example,handler1. - The other method of enabling the PING service for the WEB
transport is to create an
_oepingServicedirectory at the following location within your PAS for OpenEdge web application directory structure: {instance-name}/webapps/{webapp-name}/WEB-INF/adapters/web/_oepingService/. In the_oepingServicedirectory, create a file called _oepingService.handlers with the following content:{ "version": "2.0", "serviceName": "_oepingService", "handlers": [{ "uri": "/_oeping", "class": "OpenEdge.Web.PingWebHandler", "enabled": true }] }
The PING service only responds to the URL as it is configured in openedge.properties or the _oepingService.handlers file.
You can configure the handler to be something other than
=OpenEdge.Web.PingWebHandler: /_oeping
/_oepingService/_oeping. For example, if the OpenEdge.Web.PingWebHandler is mapped to /ping, then a client must call instance/web-app/web/ping in order for the
ServerStatus( ) =OpenEdge.Web.PingWebHandler:
/_oeping method to be called.
OpenEdge 12.5 has added an ABL Service package for the WEB PING service that automates the deployment of the _oepingService.handlers file.
|
|
APSV
|
- Configure
oepingEnabled=1in theopenedge.propertiesfile. - Run
OpenEdge/ApplicationServer/Util/apsv_oeping.ponhappsrv (OUTPUT JSON_Data), wherehappsrvis the application server handle andJSON_Datais the JSON output.
JSON output format
When a PING is successful, it can return a JSON array with the following information:
|
No return to a PING indicates that the agent is available, since
the default value for text is blank ("
").
To customize the return value, extract the OpenEdge.Rest.Admin.AppServerStatus class from the oe-install-dir/src/OpenEdge.ServerAdmin.pl procedure library and place the customized version in your PROPATH.
If a PING is not successful, it returns a JSON array with the following information:
|
Note that the error message may include additional properties,
Securing the PING service
You can restrict access to the PING service in the /web-app/WEB-INF/oeablSecurity.csv file. For example, to restrict everyone from accessing REST or WEB PING, add the line in bold:
|
denyAll(), which restricts access to
PING, must appear before the following line, which allows access to all REST
services.Create a custom WEB and REST transport PING service
To alter the behavior for both the WEB and REST transport ping services, the easiest approach is to create a new AppServerStatus class in a directory structure of OpenEdge/Rest/Admin/ within your PROPATH, ahead of any default DLC paths.
- Start by creating the following directory structure within
your {instance-name}/openedge
directory:
>cd {instance-name}/openedge >mkdir OpenEdge/Rest/AdminNote: using {instance-name}/openedge as the basis for the class exploits the fact that this directory is automatically included in your PROPATH. - Create an AppServerStatus.cls file inside of the Admin directory with
the following contents:
block-level on error undo, throw. class OpenEdge.Rest.Admin.AppServerStatus: method public character ServerStatus ( ): return "Pong!". end method. end class. - Restart the PAS for OpenEdge instance or terminate any
existing agent PIDs. A test of the WEB and REST ping services should then result in the following:
>curl -H "Accept: application/json" -X GET http://host:port/rest/_oepingService/_oeping {"response":{"_retVal":"Pong!"}} >curl -H "Accept: application/json" -X GET http://host:port/web/_oepingService/_oeping {"response":{"_retVal":"Pong!"}}
This simple example can be illustrative for porting existing WEB classes to use the handler syntax with PAS for OpenEdge.