Post on 26-Dec-2015
transcript
SCA C++, C and COBOLSCA C++, C and COBOL
www.oasis-open.org
Bryan Aupperle (aupperle@us.ibm.com)David Haney (haney@roguewave.com)
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 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
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
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
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
http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=opencsa-ms
SCA-C-C++ Technical Committee http://www.oasis-open.org/committees/tc_ho
me.php?wg_abbrev=sca-c-cpp 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
Specifications SCA C++ Client and Implementation SCA C Client and Implementation SCA COBOL Client and Implementation
Thank YouMerci
Grazie
Gracias
Obrigado
Danke
Japanese
English
French
Russian
GermanItalian
Spanish
Brazilian PortugueseArabic
Traditional Chinese
Simplified Chinese
Thai
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