Preface
Purpose
Audience
Organization
Using ABL documentation
References to ABL compiler and run-time features
References to ABL data types
Typographical conventions
Examples of syntax descriptions
Long syntax descriptions split across lines
Complex syntax descriptions with both required and optional elements
OpenEdge messages
Obtaining more information about OpenEdge messages
Migrating AppServer and WebSpeed Applications
Introduction
ABL application code migration
ABL application structure
Migrating AppServer operating modes
Migrating classic state-reset operating mode
Migrating classic state-aware operating mode
Migrating classic stateless operating mode
Migrating classic state-free operating mode
Comparing event procedures between the AppServer and PAS for OpenEdge
Multi-session Agent Startup and Shutdown procedures
Session Startup and Shutdown procedures
Connect and Disconnect procedures
Activate and Deactivate procedures
Database connections in PAS for OpenEdge
ABL changes in PAS for OpenEdge
Modifications to existing ABL
New ABL specifically for PAS for OpenEdge
Environment settings in PAS for OpenEdge
File system directories and paths in PAS for OpenEdge
Migrating client connections to PAS for OpenEdge
Migrating AIA URLs to use the APSV transport
Migrating WSA URLs to use the SOAP transport
Migrating REST URLs
Using load balancing
Migrating server configuration and management
Managing server instances
Migrating classic AppServer properties
Application packaging and installation
Distribution packaging
Incremental SOAP services
Incremental REST services
Basic Web application packaging
PAS for OpenEdge instance packaging
Installation process and updates
Installing a prepacked PAS for OpenEdge instance
Installing a prepackaged OE ABL Web application
Updating an existing installation
Updating a SOAP or REST Web service
Installing remote administration
Performance and resource tuning
Classic AppServer features not applicable to PAS for OpenEdge
Development process tooling
Installation packaging and deployment
Site monitoring and administration tools
Security
Adapting classic adapter security
WebSpeed
Migrating classic WebSpeed applications
Migration notes
Application Development with PAS for OpenEdge
PAS for OpenEdge and Client Interaction
Understanding application models
Application model context management
Application model performance
Application models and Open Client Objects
Choosing the application model
Session-managed model
Session-free model
Mixed application model
Making the final choice
Context management and the session-free model
Deciding on the scope of individual requests
Session-managed operations over a bound connection
Session-free or unbound session-managed operations
Understanding synchronous and asynchronous requests
Process control flow
Specifying the type of remote request
Handling asynchronous request results
Asynchronous request queuing
Understanding the session-managed queuing model
Understanding the session-free queuing model
Asynchronous requests and internal procedures
Tuning the size of the send and response queues
Programming the Progress Application Server for OpenEdge
Programming for a PAS for OpenEdge application model
Session-free programming
Affecting application scalability
SESSION handle attributes and session-free programming
Session-managed programming
ABL for programming PAS for OpenEdge procedures
Accessing the connection ID
Accessing the name of the current remote procedure
Accessing a procedure name on PAS for OpenEdge
Using PAS for OpenEdge event procedures
Startup and Shutdown procedures
Multi-session Agent Startup procedure
Multi-session Agent Shutdown procedure
Session Startup procedure
Session Shutdown procedure
Usage requirements
Connect and Disconnect procedures
Connect procedure
Disconnect procedure
Usage requirements
Activate and Deactivate procedures
Activate procedure
Deactivate procedure
Usage requirements
Controlling PAS for OpenEdge entry points
Export list operation
Setting and resetting the export list
Calling the EXPORT( ) method
Setting an initial export list
Resetting the export list
Resolving remote procedure names
Managing context for bound and unbound session-managed connections
Using the SERVER-CONNECTION-CONTEXT attribute
Using the SERVER-CONNECTION-ID attribute
Using the SERVER-CONNECTION-BOUND-REQUEST
Making a connection bound
Making a connection unbound
Using the SERVER-CONNECTION-BOUND attribute
Managing client context for session-free and unbound session-managed connections
Passing the client context identifier between client and server
Generating a client context identifier
Managing context from the server with OERequestInfo objects
Implementing multi-tier security models
Understanding remote procedure handles
Remote procedure handles
Deleting remote procedures
Handling conditions and returning values
Raising the ERROR condition and returning values
Throwing error objects to the client
Raising the ENDKEY condition
Handling the STOP condition
Raising a timed STOP
Handling the QUIT condition
Effects of unhandled conditions
Managing transactions
Types of a PAS for OpenEdge instance transactions
Normal ABL transactions
Automatic transactions
Implementing normal ABL transactions
Implementing automatic transactions
Initializing the automatic transaction object
Controlling the transaction
Terminating automatic transactions
Restarting automatic transactions
Automatic transaction example
Programming for Open Client applications
Using the ProtoGen utility
Using code editors
Programming ABL Client Applications
Programming for the application model
ABL for programming PAS for OpenEdge client procedures
Accessing PAS for OpenEdge resources from a client
Steps for accessing PAS for OpenEdge resources
Features of client-PAS for OpenEdge interactions
Connecting to a PAS for OpenEdge instance
Creating a server object handle
Establishing a connection with the CONNECT( ) method
Connection parameters argument
Connection URL syntax for the APSV transport
Session-managed application arguments
Connection examples
Connecting to a session-managed PAS for OpenEdge instance
Connecting to a session-free PAS for OpenEdge instance
Accessing the connection ID on a session-managed client
Accessing client context regardless of application model
Managing context from the ABL client with OERequestInfo objects
Running and managing remote procedures
Running remote procedures
Synchronous remote procedures
Asynchronous remote procedures
RUN statement options for remote procedures
Passing class-based objects as parameters between a server and ABL client
Remote procedure behavior
Understanding proxy procedure handles
Accessing proxy procedure handles
Comparing proxy and local procedure handles
Deleting remote persistent procedures
Remote procedure code examples
Example 1: Remote non-persistent procedure example
Example 2: Remote persistent procedure example
Example 3: Remote persistent procedure example using the FUNCTION statement
Example 4: Remote non-persistent procedure with a class-based object as a parameter
Disconnecting from a PAS for OpenEdge instance
Using the DISCONNECT( ) method
Disconnecting a session-managed client
Disconnecting a session-free client
Deleting the server handle
Handling conditions and return values
Raising the STOP condition
Handling conditions on the RUN statement
Using the RETURN-VALUE function across sessions
Managing asynchronous requests
Executing an asynchronous request
Asynchronous request handles
Handling the response from an asynchronous request
PROCEDURE-COMPLETE events
Event procedures
Obtaining error information
Obtaining parameter values
Obtaining the return value
Canceling asynchronous requests
Canceling asynchronous requests after a specified time
Examples
Asynchronous requests and persistent procedures
Deleting asynchronous remote persistent procedures
Deleting server handles
Deleting asynchronous request handles
Mixing synchronous and asynchronous requests
Running asynchronous requests on the SESSION system handle
Examples
Synchronous request execution model
Asynchronous request execution model
A complete asynchronous request example
Design and Implementation Considerations
Primary performance considerations
Minimizing network traffic
Off loading resource-intensive processing tasks
Choosing an application model
Application characteristics to consider
Managing larger amounts of context
Managing smaller amounts of context
Considering ample computer resources
Considering the future
Setting the number of multi-session agents, sessions, and connections
Choosing a transaction model
Using load balancing
Secondary performance considerations
Connect and disconnect performance issues
Using the PAS for OpenEdge Server Connect procedure
Performance-related issue for the CONNECT( ) method
Performance-related issues for the DISCONNECT( ) method
Compiled compared to precompiled code
ABL browse design considerations
Performance issues related to schema transmission
Garbage collection for class-based objects
Transaction and record management considerations
Comparing normal ABL and automatic transactions
Ensuring a small transaction size
Returning transaction status to the client
Maintaining transaction consistency between client and server
Managing conflicts between client and server
On the client
On the server
Buffer currency and NO-LOCK
Reading the current record
Releasing the record
Setting the -rereadnolock parameter
Deployment considerations
Minimizing the effects of schema changes
Advantages of using portable r-code
Security considerations
Overview of the server security options
User authentication and authorization
Authorization over a bound session-managed connection
Authorization over an unbound session-managed or session-free connection
Database access
PAS for OpenEdge session access
Application model interactions
How to set and reset an export list for each application model
Session-managed application with a bound connection
Session-managed application with an unbound connection
Session-free application
Audit trails
PAS for OpenEdge application audit trails
Client application audit trails
Digital certificate management
Multi-language support
Distributed application design and implementation
Understanding the scope of persistent, single-run, and
Cleanup of remote procedure instances
Understanding procedure handles in distributed ABL
REMOTE attribute
PERSISTENT, SINGLE-RUN, and SINGLETON attributes
PROXY attribute
How the attributes work together
Understanding condition handling in distributed ABL sessions
Schema triggers
Conditions that make migrating your application model
Preface
Conditions that make migrating your application model