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 |