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
Example procedures
OpenEdge messages
Obtaining more information about OpenEdge messages
AppServer and Client Interaction
Understanding AppServer operating modes
State-reset operating mode
General AppServer-client interaction
Connection management
Performance considerations
Context management
State-aware operating mode
General AppServer-client interaction
Connection management
Performance considerations
Context management
Stateless operating mode
General AppServer-client interaction
Connection management
Performance considerations
Context management
State-free operating mode
General AppServer-client interaction
Connection management
Performance considerations
Context management
Session models and application services
Session models and Open Client objects
Choosing a session model
Session-managed model
Session-free model
Making the final choice
Context management and the session-free model
Deciding on the scope of individual requests
Session-managed operations
Session-free operations
Load balancing and session models
Session-managed load balancing
Session-free load balancing
Configuring load balancing
Message compression support
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 AppServer
Programming for an AppServer session model
Session-free programming
Affecting application scalability
SESSION handle attributes and state-free operating mode
Session-managed programming
ABL for programming AppServer procedures
Accessing the connection ID
Accessing the name of the current remote procedure
Accessing a procedure name on the AppServer
Using AppServer configuration procedures
Startup and Shutdown procedures
Startup procedure
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 AppServer 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 stateless connection context
Using the SERVER-CONNECTION-CONTEXT attribute
Using the SERVER-CONNECTION-ID attribute
Using the SERVER-CONNECTION-BOUND-REQUEST attribute
Making a connection bound
Making a connection unbound
Using the SERVER-CONNECTION-BOUND attribute
Managing state-free and stateless client context
Passing the client context identifier between client and server
Generating a client context identifier
Managing context from the AppServer 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 AppServer 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 session model
ABL for programming AppServer client procedures
Accessing AppServer resources from a client
Steps for accessing AppServer resources
Features of client-AppServer interactions
Connecting an application service or AppServer instance
Creating a server object handle
Establishing a connection with the CONNECT( ) method
Connection parameters argument
Session-managed application arguments
Connection examples
Connecting to a session-managed AppServer
Connecting to a session-free AppServer
Accessing the connection ID on a session-managed client
Accessing client context regardless of session 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 an AppServer and an 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 an AppServer instance
Using the DISCONNECT( ) method
Disconnecting from a session-managed AppServer
Disconnecting from a session-free application service
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
Cancelling asynchronous requests
Cancelling asynchronous requests after a specified time limit
Examples
Asynchronous requests and persistent procedures
Deleting asynchronous remote persistent procedures
Deleting server handles
Deleting asynchronous request handles
Debugging asynchronous requests
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 AppServer operating mode
Application characteristics to consider
Managing larger amounts of context
Managing smaller amounts of context
Limiting bound connections
Considering ample computer resources
Considering the future
Setting the number of AppServer agents
Choosing a transaction model
Using load balancing
Secondary performance considerations
Connect and disconnect performance issues
Using the AppServer 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 AppServer
Managing conflicts between client and AppServer
On the client
On the AppServer
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
Server configurations and resources
Network deployment considerations
Security considerations
Overview of the AppServer security options
User authentication and authorization
Authorization on a state-reset or state-aware AppServer
Authorization on a stateless or state-free AppServer
Database access
AppServer session access
Operating mode interactions
How to set and reset an export list for each operating mode
State-reset operating mode
State-aware operating mode
Stateless operating mode
State-free operating mode
Audit trails
AppServer application audit trails
Client application audit trails
Run-time compilation
Operating system
Secure Sockets Layer (SSL)
Secure AppServer configurations
Internet-secure AppServer
SSL-enabled AppServer
SSL connection handling for brokers and agents of an SSL-enabled AppServer
Identifying the SSL server connected to an AppServer client
Multi-language support
Distributed application design and implementation
Understanding the scope of persistent, single-run, and singleton procedures
Cleanup of remote procedure instances
Understanding procedure handles in distributed ABL sessions
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 easier
Debugging
AppServer debugging
Distributed debugging
Remote debugging
Using distributed debugging
About the Debugger window
Restrictions on Debugger operation
Using remote debugging
Attaching the Debugger to an AppServer session
Initiating the Debugger from within an AppServer session
Invoking the Debugger from ABL
Establishing an initial breakpoint
Summary of debugging requirements
Examining the AppServer agent log file
Connecting to AppServers Using a URL
Internet and intranet connections
Connecting over an intranet
Connecting through a NameServer
Connecting directly to an AppServer
Connecting over the Internet
Connecting using HTTP
Connecting using HTTPS
Preface
Connecting using HTTPS