Interfaces
    
        Often a pattern emerges that may take advantage of having multiple
        internal or external implementations. Adaptive Framework declares an 
        Adaptive Interface definition for these patterns in
        order to formalize and document the related functions and parameters.
        This allows the core and extensions to follow a contract and work
        cohesively together through the interface implementation. Refer to the
        following table for a list of interfaces and their descriptions.
    
| Interface | Description | 
|---|---|
afw_extension | Interface returned from afw_extension_initialize() of an Adaptive Framework environment extension module. Additional information about an extension is found in object /afw/_AdaptiveManifest_/<extension_id>. | 
afw_adaptor_factory | Factory to create an instance of an afw_adaptor. | 
afw_adaptor | Adaptor interface. | 
afw_adaptor_object_type_cache | Adaptor object type cache interface. This interface is used by afw_adaptor_get_object_type(). | 
afw_adaptor_session | Adaptor session interface. | 
afw_adaptor_transaction | Adaptor session transaction interface. | 
afw_adaptor_impl_index_cursor | Adaptor implementation index cursor interface. | 
afw_adaptor_key_value | Adaptor implementation of key value interface. | 
afw_adaptor_impl_index | Adaptor implementation index interface. | 
afw_authorization_handler_factory | Factory to create an instance of an afw_authorization_handler. | 
afw_authorization_handler | Adaptive framework authorization handler interface. | 
afw_content_type | Adaptive Content Type. | 
afw_content_type_object_list_writer | |
afw_data_type | Adaptive Data Type. | 
afw_list_setter | Adaptive list setter interface. | 
afw_list | Adaptive value list interface. | 
afw_log_factory | Log factory. | 
afw_log | Log. | 
afw_object_setter | This is interface used to set properties and meta of an adaptive object. See interface afw_object method get_object_setter for more information. | 
afw_object | This is interface used to access the properties of an adaptive object. | 
afw_server | Adaptive framework server interface. | 
afw_service_type | Adaptive framework service type interface. Each instance is registered in the environment with type of "service_type" and id of the service type id. | 
afw_object_associative_array | This is interface for an object associative array. | 
afw_request_handler_factory | Create an instance of an afw_request_handler. | 
afw_request_handler | Adaptive framework request handler interface. | 
afw_connection | Adaptive Framework connection. This has not yet been developed. | 
afw_request | Adaptive framework request interface. | 
afw_xctx | Adaptive Framework Execution Context (xctx) interface. An execution context holds common information related to a unit of work in Adaptive Framwork. This unit of work runs in a single thread of a single-threaded or multi-threaded process. In a multi-threaded process, the main thread has the global execution context. Other threads have their own execution context and required the appropriate mutexes or queued work to access memory in the global execution context. The type of execution contexts can be "server", "request_session', etc. A execution context's pool, properties, and object cache will last for the life of the execution context. An execution context's parent will always have a longer life. | 
afw_stream | An interface for a stream. | 
afw_pool | Adaptive framework pool interface. | 
afw_adaptor_journal | Adaptor journal interface. | 
afw_value | Adaptive value. | 
afw_variable_handler | Adaptive variable handler. | 
afw_writer | An interface for a writer. | 
The following sections describe a few interfaces that are significant to discussion of the Adaptive Framework architecture. For a more comprehensive list, refer to the Developer Guide.
Request Handlers
    
            Request Handlers control how client requests are
            handled to by implementing the 
            afw_request_handler interface. Currently, the 
            only Request Handler provided by Core is the Adaptor Request
            Handler, which allows clients to retrieve and store objects in
            configured Adaptor(s). In time, additional request handlers may be
            added to provide functionality, such as XACML.
        
Content Types
    
            Both core and extensions may register Content
            Types, which provide Adaptive Objects with an external
            representation. These Content Types are useful for translating
            adaptive objects between adaptors and storing them in ways that are
            convenient and useful.  
            They allow you to encode and decode all properties of an Adaptive
            Object, including their Adaptive Values. The following content types
            are provided by core:
        
| Content Type | Description | 
|---|---|
| JSON | Javascript Object Notation | 
| XML | Extensible Markup Language | 
| UBJSON | Universal Binary JSON | 
| YAML | YAML Ain't Markup Language | 
Adaptors
    
            Adaptors implement several
            afw_adaptor_ interfaces in order to provide your
            Adaptive Framework application with a way to store and retrieve
            Adaptive Objects. There are several adaptors that are included with
            the Adaptive Framework:
        
| Adaptor | Description | 
|---|---|
| File | File-based object storage | 
| LDAP | Lightweight Directory Access Protocol | 
| LMDB | Lightning Memory-Mapped Database | 
| Model | Model Adaptor | 
| VFS | Virtual File System | 
Logs
    
            Logs implement the afw_log interface and allow
            for messages produced by Adaptive Framework to be routed to an
            external destination for viewing. There are currently two Logs 
            available:
        
| Log | Description | 
|---|---|
| Standard | Logging to standard output | 
| Syslog | Logging to syslog | 
Journals
    
            Journals implement the afw_adaptor_journal
            interface and allow for object events to be journaled into a
            persistent queue. Journals must maintain cursors into this queue to
            track clients (or Provisioning Peers) who are 
            producing or consuming journal entries. Currently, two adaptors 
            also support the Journal interface:
        
| Journal | Description | 
|---|---|
| File | File-based journal | 
| LMDB | Lightning Memory-Mapped Database journal | 
Authorization Handlers
    
            Authorization Handlers implement the
            afw_authorization_ interfaces in order to  
            provide Adaptive Framework Core with a way to request and enforce
            authorization decisions when clients make requests for resources.
            There is currently one Authorization Handler provided by Core:
        
| Authorization Handler | Description | 
|---|---|
| Script | Adaptive-Script based authorization |