www.oasis-open.org SCA C++, C and COBOL Bryan Aupperle ([email protected]) David Haney ([email protected]) 13 Dec. 2007 Specification Status C and C++ specification development proceeding in OASIS Based on work started in Open SOA (OSOA) Now proceeding in the SCA-C-C++ TC COBOL specification remains under OSOA SCA-C-C++ TC work will influence SCA-C-C++ TC Work Updated conformance statements Definition of a conformance test suite Formal definition of C/C++ Annotations Updated C++ -> WSDL, WSDL -> C++ Mapping Incorporation of SCA Policy 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) Indicates whether the service can be called from a remote system 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) Specifies the lifetime and reuse options for an implementation instance C++ APIs ComponentContext Primary interface for accessing SCA defined components. Component Meta Information Service Lookup getCurrent(), getURI(), getProperties(), getDataFactory() 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 Defines a mapping from a WSDL to a C++ class interface Currently defers to the OMG WSDL to C++ Mapping Alternative mappings are being reviewed. 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); return 0; } 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) Indicates whether the service can be called from a remote system 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) Specifies the lifetime and reuse options for an implementation instance C APIs Synchronous Programming Asynchronous 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 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 C Example Interface SCDL <service name="LoanService"> <interface.c header="LoanService.h"/> </service> Implementation SCDL <component name="LoanService"> <implementation.c module="loan"/> </component> C Example (cont) LoanService Interface char approveLoan( long customerNumber, long loanAmount); LoanService Implementation char approveLoan( long customerNumber, long loanAmount) { … } C Example (cont) SCA Application void clientFunction() { … SCALocate(L”customerService”, &serviceToken, &compCode, &reason); SCAInvoke(serviceToken, L“getCreditRating”, sizeof(custNum), (void *)&custNum, sizeof(rating), (void *)&rating, &compCode, &reason); } 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) Indicates whether the service can be called from a remote system implementation.cobol program –binary executable for the component implementation location – (optional) location of library containing the binary executable scope – (optional) Specifies the lifetime and reuse options for an implementation instance COBOL APIs Same functions as in C Synchronous Programming SCAProperty is not typed Program-Based Implementation Support Asynchronous Programming Conversation Services 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 COBOL Example LoanService Interface 01 LoanServiceInf. * @Operation name="LoanApplication" * input="CustomerName" * output="LoanAmount" 03 LoanApplication. 05 CustomerName PIC X(255). 05 LoanAmount PIC 9(4). COBOL Example (cont) LoanService Implementation PROCEDURE DIVISION. IN-THE-BEGINNING. PERFORM GET-MY-CONTEXT. EVALUATE My-Operation WHEN ApproveLoanOperation * Get service request MOVE length of CustomerNumber of ApproveLoan To InputMessageLength CALL "SCAMessageIn" using by content SCA-COMPCODE, SCA-REASON, My-Service, My-Operation, InputMessageLength, CustomerNumber of ApproveLoan PERFORM CUSTOMER-SERVICE * Return service response CALL "SCAMessageOut" using by content SCA-COMPCODE, SCA-REASON, My-Service, My-Operation, OutputMessageLength, LoanAmount of ApproveLoan WHEN OTHER CONTINUE END-EVALUATE. * Return to SCA runtime GOBACK. GET-MY-CONTEXT. CALL "SCAService" using by content SCA-COMPCODE, SCA-REASON, My-Service. CALL "SCAOperation" using by content SCA-COMPCODE, SCA-REASON, My-Operation. COBOL Example (cont) SCA Application PROCEDURE DIVISION. . CALL "SCALocate" using by content SCA-COMPCODE, SCA-REASON, CustomerServiceReference, CustomerServiceToken. CALL "SCAInvoke" using by content SCA-COMPCODE, SCA-REASON, My-CustomerServiceToken, CreditRatingOperation, InputMessagelength, CustomerNumber, OutputMessageLength, Rating. C & COBOL WSDL Mapping Defines a translation between language structures and WSDL Defines type mapping rules for: Primitive types Structs or Groups 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 Open CSA Member Section SCA-C-C++ Technical Committee http://www.oasisopen.org/committees/tc_home.php?wg_abbre v=opencsa-ms http://www.oasisopen.org/committees/tc_home.php?wg_abbre v=sca-c-cpp SCA-C-C++ Charter http://www.oasis-open.org/committees/sca-ccpp/charter.php OSOA References OSOA SCA Specifications http://www.osoa.org/display/Main/Servi ce+Component+Architecture+Specifica tions Specifications SCA C++ Client and Implementation SCA C Client and Implementation SCA COBOL Client and Implementation Thai Traditional Chinese Gracias Russian Spanish Thank You English Merci French Obrigado Brazilian Portuguese Arabic Grazie Danke Italian German Simplified Chinese Japanese 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, @Conversational @Callback, @OneWay @EndsConversation Implementation Header File @Scope @EagerInit @AllowsPassByReference @ConversationAttributes @Property @Reference C Annotations Contained in comments, processed by tools Header File @Interface @Operation, @Callback, @OneWay @Remotable, @Conversational @EndsConversation Implementation File @Service @Reference @Property @Scope @Init, @Destroy, @EagerInit @AllowPassByReference @ConversationAttributes COBOL Annotations Contained in comments, processed by tools Interface File @Interface @Operation, @Callback, @OneWay @Remotable, @Conversational @EndsConversation Implementation File @Service @Reference @Property @Scope @Init, @Destroy, @EagerInit @AllowPassByReference @ConversationAttributes
© Copyright 2026 Paperzz