SCA C++, C and COBOL Bryan Aupperle ([email protected]) David Haney ([email protected]) 13 Dec....

33
SCA C++, C and COBOL SCA C++, C and COBOL www.oasis-open.org Bryan Aupperle ([email protected]) David Haney ([email protected]) 13 Dec. 2007

Transcript of SCA C++, C and COBOL Bryan Aupperle ([email protected]) David Haney ([email protected]) 13 Dec....

SCA C++, C and COBOLSCA C++, C and COBOL

www.oasis-open.org

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 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

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