SCA C++, C and COBOL
description
Transcript of SCA C++, C and COBOL
SCA C++, C and COBOLSCA C++, C and COBOL
www.oasis-open.org
Bryan AupperleDavid Haney
18 Sept. 2007
OASIS Status C and C++ specifications
transitioning from OSOA to OASIS Governed by the SCA-C-C++ TC
Policy related annotations Cross standard consistency Compliance test suites
COBOL specification continuing development under OSOA SCA-C-C++ TC work will influence
SCDL for C++ interface.cpp
header – C++ header file describing the interface class – (optional) Class defining the interface callbackHeader – (optional) C++ header describing the
callback interface callbackClass – (optional) Class defining the callback
interface remotable – (optional)
implementation.cpp library – Shared library defining the service factory path – (optional) Path to search for the library header – C++ header file describing the implementation class – (optional) Class defining the implementation scope – (optional)
C++ APIs ComponentContext
Primary interface for accessing SCA defined components.
Component Meta Information getCurrent(), getURI(), getProperties(),
getDataFactory() Service Lookup
getService(), getServices() Service References
getServiceReference(), getServiceReferences() getSelfReference()
C++ APIs (cont) ServiceReference
Interface for interacting with service instances
Conversational interface getConversationID(), setConversationID()
Asynchronous interface getCallbackID(), setCallbackID() getCallback(), setCallback()
C++ WSDL Mapping Defines a translation from a C++ class interface
to a WSDL Uses comment annotations to control the
conversion Defines mapping rules for:
primitive types C++ Standard Library types SDO classes, structs, arrays, enums
Defers to the OMG WSDL to C++ Mapping for generating C++ headers from a WSDL.
SCDL for C Interface defined by a set of functions interface.c
header – header file describing the interface callbackHeader – (optional) header file describing the
callback interface remotable – (optional)
implementation.c module – binary executable for the component
implementation library – (optional) indicates whether the service is
implemented as a library or a program location – (optional) location of the module scope – (optional)
C APIs Synchronous Programming
SCALocate(), SCALocateMultiple() – get handle(s) to services SCAInvoke() – invokes an operation of a service SCAProperty<PropertyType>() – get the value of a property SCAGetFaultMessage(), SCASetFaultMessage() – get or set a
fault message for a service operation Asynchronous Programming
SCAGetCallback() – get handle of callback instance SCACallback() – invoke a callback operation SCASetCallback() – set a callback function for a reference SCASetCallbackID(), SCAGetCallbackID() – get or set the callback
ID for a service instance Conversation Services
SCAGetConversationID(), SCASetConversationID() – get or set a user provided conversation ID
SCAEndConversation() – end a conversation
Implementation as Program Support environments where function is
provided by programs API
SCAService() – get name of invoked service SCAOperation() – get name of invoked
operation SCAMessageIn() – get input message
SCAMessageOut() – set output message
SCDL for COBOL interface.cobol
copybook – copybook file describing the interface callbackCopybook – (optional) copybook file that
describing the callback interface location – (optional) location of library containing the
copybook files remotable – (optional)
implementation.cobol program –binary executable for the component
implementation location – (optional) location of library containing the
binary executable scope – (optional)
COBOL APIs Same functions as in C
Synchronous Programming SCAProperty is not typed
Program-Based Implemenation Support
Asynchronous Programming Conversation Services
C & COBOL WSDL Mapping Defines a translation between language
structures and WSDL Defines type mapping rules for:
Primitive types Structs or Groups SDO Variable length strings and unbounded arrays
Defines mapping rules between operations and functions
Annotations Contained in comments, processed by tools Interface
Invocation attribute OneWay Remotable Callback
EndConversation Implementation
Scope Lifecycle Conversation information Property Reference
Open Implementations Apache Tuscany Native
http://incubator.apache.org/tuscany/sca-native.html
Implements pre-1.0 C++ specification Working towards 1.0 compliance
OASIS References SCA-C-C++ TC
http://www.oasis-open.org/apps/org/workgroup/sca-c-cpp/description.php
SCA-C-C++ Charter http://www.oasis-open.org/committees/
sca-c-cpp/charter.php
OSOA References OSOA SCA Specifications
http://www.osoa.org/display/Main/Service+Component+Architecture+Specifications
Final Specifications SCA C++ Client and Implementation
Draft Specifications SCA C Client and Implementation SCA COBOL Client and Implementation
Other References OMG WSDL to C++ Specification
http://www.omg.org/docs/ptc/06-08-01.pdf
Backup
C++ APIs (cont) Supplemental APIs
RefCountingPointer Defines a reference-counted pointer interface
SCAException Provides a hierarchy of exception classes for use
with the SCA API.• SCANullPointerException• ServiceRuntimeException• ServiceUnavailableException• NoRegisteredCallbackException• ConversationEndedException• MultipleServicesException
C++ Annotations Contained in comments, processed by tools Interface Header File
@Remotable @Callback @OneWay @EndConversation
Implementation Header File @Scope @EagerInit @AllowsPassByReference @Conversation @Property @Reference
C Annotations Contained in comments, processed by tools Header File
@Operation, @Callback @Remotable, @OneWay @EndConversation
Implementation File @Service @Reference @Property @Scope @Init, @Destroy, @EagerInit @AllowPassByReference @Conversation
COBOL Annotations Contained in comments, processed by tools Interface File
@Operation, @Callback @Remotable, @OneWay @EndConversation
Implementation File @Service @Reference @Property @Scope @Init, @Destroy, @EagerInit @AllowPassByReference @Conversation
C++ Example Interface SCDL
<service name=“LoanService”><interface.cpp header=“LoanService.h”/>
</service>
Implementation SCDL
<component name=“LoanServiceImpl”><implementation.cpp library=“loan” header=“LoanServiceImpl.h”/>
</component>
C++ Example (cont) LoanService Interface
class LoanService {public: virtual bool approveLoan( unsigned long customerNumber, unsigned long loanAmount) = 0;};
C++ Example (cont) LoanServiceImpl Interface
class LoanServiceImpl :public LoanService {public: virtual bool approveLoan( unsigned long customerNumber, unsigned long loanAmount) { // … }};
C++ Example (cont) SCA Application
int main(void) { ComponentContextPtr context = ComponentContext::getCurrent(); LoanService* service = (LoanService*) context->getService(“loanService”); bool result = service->approveLoan(12345, 100);
}