Index: openacs-4/packages/acs-service-contract/www/doc/index.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/www/doc/index.html,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-service-contract/www/doc/index.html 14 Oct 2001 10:36:23 -0000 1.1 @@ -0,0 +1,167 @@ + +
+ACS Service Contract Documentation + + Why + + To facilitate greater code reuse, application integration, + and package extensibility within the OpenACS. + + To do this acs-service-contract defines an api for the creation + of interfaces and discovery of interface implementations. + + Background + + Most component systems are based on the use of interfaces. Interfaces + allow components to create contracts which define their functional + level of reuse and customization. It also provides the infrastructure + for runtime discovery of which implemented interfaces are available. + + The ACS4 is based on a thin object system, that is primarily relational + but the acs_objects system allows a veneer of object orientedness + by providing globally unique object ids, object metadata, and bundling + of data and methods as an object. While this permits a level of + reuse on an object or package basis, it requires hardcoding the unit + of reuse. + + ACS Service contract allows these objects and packages to also + define and register their implementation of interfaces, so the level + of reuse is defined at the contract level. + + In addition ACS Service contract provides mean to dispatch method + calls on an interface implementation. The dispatch means + is only available through tcl. + + Interface Discovery is available programmatically as well as via + documentation through ad_proc. + + The Service Contract interface specification was inspired by + WDSL, the interface specfication for web services. + + Hitchiker's Guide to Service Contract Definitions + + - contract - analagous to interface, contracts serve as logical + containers for operations. + + - operation - a method of an interface. defines a method signature, + including both input and outputs as well as metadata + such as caching. + + - implementation - an implementation is a set of concrete functions + that fufills an interface. + + - implementation alias - is the method of an implementation that + fufills a given operation of the contract. + + - bindings - association between an interface and an implementation. + + - types - define the kind of input and outputs a operation recieves. + + Usage + + Design the Contract + + First Off design the interface for your contract, keeping in mind + that all implementations need to implement it and that extension of + the contract after deployment is often not practical. In other words + take the time to do a little future proofing and thinking about + possible uses that you weren't planning on. + + Defining Operations + + Next define the logical operations that will make up your contract + + Register the Contract + + with acs contracts. + + Implement the Contract + + FAQ + + Why Does an implementation reference an interface? + + This might seem a little strange since a binding is the official + reference between an implementation and an interface. However + it is quite possible that an implementation for interface might + exist prior to the interface being defined, ie the interface + defining package is not installed. By retaining this information + the interface defining package can be installed and the implementations + already installed on the system can be bound to it. + + Api Reference + + [for oracle please syntax replace __ with .] + + Creating Message Types + + - (sql):: + acs_sc_msg_type__new (name, spec): + + defines a type based on spec. Spec should + be a string (possibly emtpy) that defines the + names and types that compose this type. + example 'ObjectDisplay.Name.InputType' as name + 'object_id:integer' as spec. + + Creating Interfaces + + - (sql):: + + acs_sc_contract__new (contract_name, contract_desc): + + creates a new contract to serve as a logical + container for operations. contract_desc is a text + description of the contract. + + - (sql):: + + acs_sc_operation__new (contract_name, operation_name, + operation_desc, operation_iscachable_p, + operation_inputtype, operation_outputtype + ): + + creates a new operation as part of a contract. + + Creating Implementations + + - (tcl) acs_sc_proc (contract, operation, impl): + registers an implementations. ?? why operation + + Discovery + + - (tcl) acs_sc_binding_exists_p (contract, impl): + returns boolean whether a binding exists between + a given contract name and implmentation. + + Dispatching + + - (tcl) acs_sc_call (contract, operation, [arguments, impl]): + calls an operation + + Examples + + Included in the service contract package are examples for oracle + and postgresql of a trivial contract. + + Also the search contract functions as a non-trivial core contract + used by openacs4. + + Further Reading + + Abstract Factory Pattern - GOF + + Component Systems - Clemens Syzperski + + WSDL Spec + + Credits + + Most content was provided by Neophytos Demetriou. Most of the + errors were provided by Kapil Thangavelu. + ++ + \ No newline at end of file