IVOA

CEA Interfaces: Legacy interfaces to the Common Execution Architecture
Version 1.0

IVOA Working Draft 21 April, 2011

This version:
http://www.ivoa.net/Documents/WD/GWS/CEAInterface-XXXX.html
Latest version:
http://www.ivoa.net/Documents/latest/CEAInterface.html
Previous versions
Authors:
Paul Harrison

Abstract

This document describes the Common Execution Connector web service interface that may be used to invoke an application remotely that conforms to the Common Execution Architecture.

Status of this document

This is an IVOA Working Draft for review by IVOA members and other interested parties. It is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use IVOA Working Drafts as reference materials or to cite them as other than "work in progress."

Parts that the editor considers should be removed from the document are marked in red with a strike through line, and parts to be expanded are in green

Comments on this document are due 15 December 2006 for consideration in the next version of this document. They should be sent to registry@ivoa.net, a mailing list with a public archive or on the VOApplication twiki discussion page. General discussion of related technology is also welcome on the Rwp03 wiki site.

A list of current IVOA Recommendations and other technical documents can be found at http://www.ivoa.net/Documents/.

Acknowledgements

This document has been developed with support from the UK Particle Physics and Astronomy Research Council (PPARC), and from the European Commission's Sixth Framework Program via the VOTech project

Conformance-related definitions

The words "MUST", "SHALL", "SHOULD", "MAY", "RECOMMENDED", and "OPTIONAL" (in upper or lower case) used in this document are to be interpreted as described in IETF standard, RFC 2119 [RFC 2119].

The Virtual Observatory (VO) is general term for a collection of federated resources that can be used to conduct astronomical research, education, and outreach. The International Virtual Observatory Alliance (IVOA) is a global collaboration of separately funded projects to develop standards and infrastructure that enable VO applications.

Syntax Notation Using XML Schema

The eXtensible Markup Language, or XML, is document syntax for marking textual information with named tags and is defined by the World Wide Web Consortium (W3C) Recommendation, XML 1.0 [XML]. The set of XML tag names and the syntax rules for their use is referred to as the document schema. One way to formally define a schema for XML documents is using the W3C standard known as XML Schema [Schema].

This document defines the interfaces to CEA servers using Web Services Description Language (WSDL) [WSDL] and schema using XML Schema. The full WSDL and Schema documents are listed in the Appendices . The WSDL files additionally import schema that were defined in the CEAApplication Data Model standard [CEAAPP].

Note that as this document represents a draft the cea: and ceab: namespaces in attached schema and instance documents have the string "rc<n>" appended where "rc" stands for release candidate and <n> is an integer representing the iteration number of the release candidate draft of the associated namespace.

Contents

1.

The concept of a Common Execution Architecture (hereafter CEA) was introduced in [CEA]. This document represents a formal publication of the interfaces to a service that provides the execution capability of applications that can be described by the CEA application model that is now defined in a separate standard [CEAAPP]. This document defined the Common Execution Connector SOAP web service that was described initially in [CEA], as well as a new [REST] interface, both of which are conformant with the IVOA Universal Worker Service [UWS] pattern. The fact that many various kinds of application can be exposed with a single web service definition and application model is an important feature of CEA, as it allows universal server and client side software facades to be created that hide the details of the web service implementation, which in turn simplifies the adoption into existing frameworks such as workflows.

2.

The rationale behind creating a Common Execution Architecture have been expounded in [CEA] and [UWS] in detail, so here only the most important features will be highlighted.

  • Asynchrony - the interaction between the client and the server must be asynchonous to allow for network timeouts/failures during the time that the application execution is occuring. This necessarily means that there is a not a simple call/response interaction between the client and the server, but rather a series of calls and responses make up the complete interaction to invoke an application and obtain the results.
  • Independence from a particular implementation technology - The design of the application definition and the description of the interface was intentionally kept at a relatively "high" level so that specific implementations could be created using particular technologies, but allowing essentially the same programatic interface (API) to be used on both the client and the server ends of the interaction. This document describes two such implementation technologies, SOAP web services and REST style web services.

2.2. Interactions

The interaction between the CEA client and the CEA server follows a similar pattern for both the interfaces. There are some extra intermediate steps that may be called between these steps, but the steps listed below are the essential interactions that can be performed on either interface for the complete execution of a job and retrieval of the results.

  1. Client requests that a new "job" be created passing a <tool> element that describes the application to run and the parameters to pass to it. The Client receives a job identifier in return that it can use to identify this particular job in subsequent calls.
  2. Client requests that the job be started.
  3. Client repeatedly inquires about the status of the job until it is informed that the job is finished.
  4. Client retrieves the results from the job.

The job goes through several phases during this interaction. The first 4 phases that are listed are what occurs for normal successful execution.

PENDING
The initial phase when the client has just requested the job to be created, and the parameters are being validated.
QUEUED
The job has been validated and accepted, but no request to start the job has yet been received
EXECUTING
The job is running, after the signal to start has been given.
COMPLETED
The job has successfully completed.
ERROR
An error of some kind has occured
UNKNOWN
The job is in an unknown state - no clear error signal has been received, but nor has it completed within an expected time.
SUSPENDED
The job has been requested to be executed by the client, but the server has not yet started the job, perhaps because of lack of available resources. (cf QUEUED). The job will be automatically started when resources become available without client intervention.
HELD
The job has been executing, but the server has suspended the job. The job will not be restarted without client intervention.

3. Interfaces

There are two possible interfaces to a CEA server using either Simple Object Access Protocol [SOAP] or "Representational State Transfer" [REST] technologies. A CEA server must implement one of these interfaces and should ideally implement both so that a CEA client has a choice to use whichever is most convenient in the given situation. These two interfaces are described in more detail below.

3.1. Common Execution Connector SOAP

The SOAP interface that implements the UWS pattern in CEA is called the Common Execution Connector and is described by the WSDL contract in Appendix A. The CEA SOAP interface adds a "call-back" feature to the UWS pattern, that means that the client does not have to continually poll the server to obtain job status, but instead can register to be "called-back" when the job status has changed. In large grids this can be beneficial as it cuts down on network traffic and cpu cycles compared with polling. There are two such call backs that can be registered.

  1. A progress listener, which can be used to receive messages about the current status of the job. This is registered with the registerProgressListener() operation of the CommonExecutionConnector port. The operation expects the endpoint of a server that implements the CEAJobMonitor WSDL contract (see Appendix C) which implements a one.
  2. A results listener, which can receive the results when the job has completed. This is registered with the registerResultsListener() operation of the CommonExecutionConnector port. The operation expects the endpoint of a server that implements the CEAResultsListener WSDL contract (see Appendix D).

A typical interactaction with the CommonExecutionConnetor interface is illustrated in the following UML diagram.

CommonExecutionConnector UML sequence diagram

Each operation in the CommonExecutionConnector interface is described in more detail in the following sections.TBC

createJob

The job is specified by passing a tool document.

Note on output parameters. The output parameters need not usually be sent of course, as they are output parameters! However, to instruct the CEA server to automatically stage the output to somewhere the output parameter should be sent with the indirect attribute set to true and the value set to the URI of the location where it is desired that the output should be sent. If this is not done the CEA server will attempt to return results in-line in the getResults SOAP call.

registerProgressListener

This allows the CEA client to register the end-point of a service that progress log messages may be sent to. This does not stop a client also requesting similar messages by polling with a getPhase call. The frequency of messages that are sent is left as an implementation detail for the CEA server, but it would be useful to sent messages when for instance;

  • the execution phase changes.
  • a new result of the execution becomes available, in cases where some results may be available before completion of the entire job.

registerResultsListener

Allows the CEA client to register the end-point of a service that the results can be sent to when ready. The client may also request results explicitly by using the getResults call.

getResults

Request the results from an execution. These will be returned in a ceat:result-list-type structure, which may return results

  • in-line as the value of the result element
  • indirectly by pointing to an external URL. e.g. to a VOSpace location.

delete

Request that the job be deleted. If the job is currently running then it will be aborted and the record of the job deleted from the CEA server. If the job has already completed then this call will delete any record of the job from the CEA server and free any resources associated with the job.

getPhase

Returns the execution phase of the job, along with some associated metadata about the current status of the job.

getExecutionSummary

Returns a detailed summary of the job including the input parameters and the results.

setTerminationTime

Sets the time at which the CEA server will automatically delete the record of the job and also reclaim any resources associated with the job. After this time it is not possible any longer to retrieve any metadata about or results from the job. Any results that have been staged to another storage location will of course not be deleted.

4. Registering CEA Services

The registration of CEA components is covered in detail in [CEAAPP], however it is worth noting some specific points here about service endpoints.

  • the two different interfaces have their own types in VOCEA.xsd, and should be registered individually with these types in the <capability> of the resource.
  • the <accessURL> that is registered for the REST service is the one that starts at the path element above /(jobs)/ level of the URI interface hierarchy as described in [UWS], and that ./jobs is the concrete representation of the (jobs) level of the path in that specification.

5. Security

CEA implementations generally follow the security recommendations of the IVOA GWS group [SSO]. Specifically for the SOAP version of the interface, message level security using WS-Security is implemented, and for the REST version transport layer TLS security is used. At a minimum CEA servers should check client authentication via these means. A CEA server should publish it's authorization policy, but as a minimum policy the server should allow read and write access only to the creator of a job.

6. Possible Extensions to CEA Interfaces

There are some extensions to the CEA interface definitions that could be made, that would detract from the "purity" of the original design, but might make the interfaces more easily usable in many practical deployment scenarios.

  • Allow the original job to be created in the REST interface with a POST containing a standard post variables to represent the parameters rather than having to POST the <tool> document. There are some practical problems in representing whether parameters are indirect or not, and representing array valued parameters, but naming conventions could overcome these. It would probably also be beneficial (though even less RESTful) to allow the parameters to be encoded in the URL and use http GET to create the job - thus allowing easy "bookmarking" of a particular invocation request.
  • In the SOAP interface, expose each registered application as a single synchonously callable SOAP RPC style web service.

7. Appendix A: The complete Common Execution Controller WSDL 1.0

< wsdl:definitions name = "CommonExecutionConnector" targetNamespace = "urn:cea.applications.astrogrid.org" xmlns:xml = "http://www.w3.org/XML/1998/namespace" xmlns: = "http://schemas.xmlsoap.org/wsdl/" xmlns:agcred = "http://www.astrogrid.org/schema/Credentials/v1" xmlns:agpd = "http://www.astrogrid.org/schema/AGParameterDefinition/v1" xmlns:apachesoap = "http://xml.apache.org/xml-soap" xmlns:cea = "http://www.astrogrid.org/schema/CommonExecutionArchitectureBase/v1" xmlns:ceat = "http://www.astrogrid.org/schema/CEATypes/v1" xmlns:impl = "urn:impl.cea.applications.astrogrid.org" xmlns:intf = "urn:cea.applications.astrogrid.org" xmlns:ns = "http://www.astrogrid.org/schema/ExecutionRecord/v1" xmlns:soapenc = "http://schemas.xmlsoap.org/soap/encoding/" xmlns:wkf = "http://www.astrogrid.org/schema/AGWorkflow/v1" xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" >
< wsdl:types >
< xsd:schema attributeFormDefault = "unqualified" elementFormDefault = "qualified" targetNamespace = "urn:impl.cea.applications.astrogrid.org" >
< xsd:annotation >
< xsd:documentation > AGApplictionBase needed for the application descriptions </ xsd:documentation >
</ xsd:annotation >
< xsd:import namespace = "http://www.astrogrid.org/schema/CommonExecutionArchitectureBase/v1" schemaLocation = "../../../cea/CommonExecutionArchitectureBase/v1.0/CommonExecutionArchitectureBase.xsd" />
< xsd:annotation >
< xsd:documentation > Workflow.xsd is needed for the tool element </ xsd:documentation >
</ xsd:annotation >
< xsd:import namespace = "http://www.astrogrid.org/schema/AGWorkflow/v1" schemaLocation = "../../../jes/AGWorkflow/v1.0/AGWorkflow.xsd" />
< xsd:annotation >
< xsd:documentation > CEATypes is needed for the status callback.. </ xsd:documentation >
</ xsd:annotation >
< xsd:import namespace = "http://www.astrogrid.org/schema/CEATypes/v1" schemaLocation = "../../../cea/CEATypes/v1.0/CEATypes.xsd" />
< xsd:annotation >
< xsd:documentation > The following types are all needed for the wrapped style of the interface </ xsd:documentation >
</ xsd:annotation >
< xsd:element name = "ApplicationNameList" >
< xsd:annotation >
< xsd:documentation > This is to be used to return a simple name list </ xsd:documentation >
</ xsd:annotation >
< xsd:complexType >
< xsd:sequence >
< xsd:element maxOccurs = "unbounded" name = "ApplicationName" type = "xsd:string" />
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "init" >
< xsd:complexType >
< xsd:sequence >
< xsd:element ref = "wkf:tool" />
< xsd:element name = "jobstepID" type = "ceat:job-identifier-type" >
< xsd:annotation >
< xsd:documentation > The identifier for the job step being executed </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "initResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "initReturn" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The idetifier that can be used to track this particular execution instance of the application </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "abort" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "executionId" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The identifier for the execution instance that is to be aborted. </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "abortResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "abortReturn" type = "xsd:boolean" >
< xsd:annotation >
< xsd:documentation > returns true if the application was successfully aborted </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "registerProgressListener" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "executionId" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The identifier for the execution instance that is to be executed. </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
< xsd:element name = "endpoint" type = "xsd:anyURI" >
< xsd:annotation >
< xsd:documentation > the endpoint of the listener interface to register </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "registerProgressListenerResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "registerReturn" type = "xsd:boolean" >
< xsd:annotation >
< xsd:documentation > returns true if the listener was successfully registered </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "registerResultsListener" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "executionId" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The identifier for the execution instance that is to be executed. </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
< xsd:element name = "endpoint" type = "xsd:anyURI" >
< xsd:annotation >
< xsd:documentation > the endpoint of the listener interface to register </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "registerResultsListenerResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "registerReturn" type = "xsd:boolean" >
< xsd:annotation >
< xsd:documentation > returns true if the listener was successfully registered </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "execute" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "executionId" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The identifier for the execution instance that is to be executed. </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "executeResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "abortReturn" type = "xsd:boolean" >
< xsd:annotation >
< xsd:documentation > returns true if the application execution was successfully started </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "queryExecutionStatus" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "executionId" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The identifier for the execution instance that is to be queried </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "queryExecutionStatusResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "queryExecutionStatusReturn" type = "ceat:message-type" >
< xsd:annotation >
< xsd:documentation > This is the standard execution status message </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "getExecutionSummary" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "executionId" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The identifier for the execution instance that is to be queried </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "getExecutionSummaryResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "getExecutionSummaryReturn" type = "ceat:execution-summary-type" >
< xsd:annotation >
< xsd:documentation > This is the standard execution status message </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "returnRegistryEntry" >
< xsd:complexType />
</ xsd:element >
< xsd:element name = "returnRegistryEntryResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "returnRegistryEntryReturn" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > This should probably be a proper xml type when registry schema extension is defined. </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "ceaElmFault" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "mess" type = "xsd:string" />
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "getResults" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "executionId" type = "xsd:string" >
< xsd:annotation >
< xsd:documentation > The identifier for the execution instance that is to be queried </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
< xsd:element name = "getResultsResponse" >
< xsd:complexType >
< xsd:sequence >
< xsd:element name = "getResultsReturn" type = "ceat:result-list-type" >
< xsd:annotation >
< xsd:documentation > A list of results </ xsd:documentation >
</ xsd:annotation >
</ xsd:element >
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
</ xsd:schema >
</ wsdl:types >
< wsdl:message name = "initRequest" >
< wsdl:part element = "impl:init" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "executeRequest" >
< wsdl:part element = "impl:execute" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "ceaFault" >
< wsdl:part name = "message" type = "xsd:string" />
</ wsdl:message >
< wsdl:message name = "getResultsResponse" >
< wsdl:part element = "impl:getResultsResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "queryExecutionStatusRequest" >
< wsdl:part element = "impl:queryExecutionStatus" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "getExecutionSummaryRequest" >
< wsdl:part element = "impl:getExecutionSummary" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "abortRequest" >
< wsdl:part element = "impl:abort" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "registerResultsListenerRequest" >
< wsdl:part element = "impl:registerResultsListener" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "registerResultsListenerResponse" >
< wsdl:part element = "impl:registerResultsListenerResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "registerProgressListenerRequest" >
< wsdl:part element = "impl:registerProgressListener" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "registerProgressListenerResponse" >
< wsdl:part element = "impl:registerProgressListenerResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "returnRegistryEntryRequest" >
< wsdl:part element = "impl:returnRegistryEntry" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "getResultsRequest" >
< wsdl:part element = "impl:getResults" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "initResponse" >
< wsdl:part element = "impl:initResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "returnRegistryEntryResponse" >
< wsdl:part element = "impl:returnRegistryEntryResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "queryExecutionStatusResponse" >
< wsdl:part element = "impl:queryExecutionStatusResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "getExecutionSummaryResponse" >
< wsdl:part element = "impl:getExecutionSummaryResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "abortResponse" >
< wsdl:part element = "impl:abortResponse" name = "parameters" />
</ wsdl:message >
< wsdl:message name = "executeResponse" >
< wsdl:part element = "impl:executeResponse" name = "parameters" />
</ wsdl:message >
< wsdl:portType name = "CommonExecutionConnector" >
< wsdl:operation name = "init" >
< wsdl:input message = "intf:initRequest" name = "initRequest" />
< wsdl:output message = "intf:initResponse" name = "initResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
< wsdl:operation name = "execute" >
< wsdl:input message = "intf:executeRequest" name = "executeRequest" />
< wsdl:output message = "intf:executeResponse" name = "executeResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
< wsdl:operation name = "abort" >
< wsdl:input message = "intf:abortRequest" name = "abortRequest" />
< wsdl:output message = "intf:abortResponse" name = "abortResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
< wsdl:operation name = "registerResultsListener" >
< wsdl:input message = "intf:registerResultsListenerRequest" name = "registerResultsListenerRequest" />
< wsdl:output message = "intf:registerResultsListenerResponse" name = "registerResultsListenerResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
< wsdl:operation name = "registerProgressListener" >
< wsdl:input message = "intf:registerProgressListenerRequest" name = "registerProgressListenerRequest" />
< wsdl:output message = "intf:registerProgressListenerResponse" name = "registerProgressListenerResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
< wsdl:operation name = "queryExecutionStatus" >
< wsdl:input message = "intf:queryExecutionStatusRequest" name = "queryExecutionStatusRequest" />
< wsdl:output message = "intf:queryExecutionStatusResponse" name = "queryExecutionStatusResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
< wsdl:operation name = "getExecutionSummary" >
< wsdl:input message = "intf:getExecutionSummaryRequest" name = "getExecutionSummaryRequest" />
< wsdl:output message = "intf:getExecutionSummaryResponse" name = "getExecutionSummaryResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
< wsdl:operation name = "returnRegistryEntry" >
< wsdl:input message = "intf:returnRegistryEntryRequest" name = "returnRegistryEntryRequest" />
< wsdl:output message = "intf:returnRegistryEntryResponse" name = "returnRegistryEntryResponse" />
</ wsdl:operation >
< wsdl:operation name = "getResults" >
< wsdl:input message = "intf:getResultsRequest" />
< wsdl:output message = "intf:getResultsResponse" />
< wsdl:fault message = "intf:ceaFault" name = "ceaFault" />
</ wsdl:operation >
</ wsdl:portType >
< wsdl:binding name = "CommonExecutionConnectorServiceSoapBinding" type = "intf:CommonExecutionConnector" >
< wsdlsoap:binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" />
< wsdl:operation name = "init" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
< wsdl:operation name = "abort" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
< wsdl:operation name = "registerResultsListener" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
< wsdl:operation name = "registerProgressListener" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
< wsdl:operation name = "execute" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
< wsdl:operation name = "queryExecutionStatus" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
< wsdl:operation name = "getExecutionSummary" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
< wsdl:operation name = "returnRegistryEntry" >
< wsdlsoap:operation />
< wsdl:input >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body namespace = "urn:cea.applications.astrogrid.org" parts = "parameters" use = "literal" />
</ wsdl:output >
</ wsdl:operation >
< wsdl:operation name = "getResults" >
< wsdlsoap:operation soapAction = "capeconnect:CommonExecutionConnectorService:CommonExecutionConnector#getResults" />
< wsdl:input >
< wsdlsoap:body use = "literal" />
</ wsdl:input >
< wsdl:output >
< wsdlsoap:body use = "literal" />
</ wsdl:output >
< wsdl:fault name = "ceaFault" >
< wsdlsoap:fault name = "ceaFault" use = "literal" />
</ wsdl:fault >
</ wsdl:operation >
</ wsdl:binding >
< wsdl:service name = "CommonExecutionConnectorService" >
< wsdl:port binding = "intf:CommonExecutionConnectorServiceSoapBinding" name = "CommonExecutionConnectorService" >
< wsdlsoap:address location = "http://localhost:8080/astrogrid-applications/services/CommonExecutionConnectorService" />
</ wsdl:port >
</ wsdl:service >
</ wsdl:definitions >

8. Appendix C: The complete CEAJobMonitor WSDL 1.0

< wsdl:definitions targetNamespace = "urn:jes/jobmonitor/v1" xmlns:xml = "http://www.w3.org/XML/1998/namespace" xmlns: = "urn:jes/jobmonitor/v1" xmlns:intf = "urn:jes/jobmonitor/v1" xmlns:impl = "urn:jes/jobmonitor/service/v1" xmlns:wrapper = "urn:jes/jobmonitor-wrapper/v1" xmlns:ceat = "http://www.astrogrid.org/schema/CEATypes/v1" xmlns:apachesoap = "http://xml.apache.org/xml-soap" xmlns:wsdlsoap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc = "http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/" >
< wsdl:documentation > Interface definition for the 'monitor' web service - used as a callback endpoint by the application controller. </ wsdl:documentation >
< wsdl:types >
< xsd:schema targetNamespace = "urn:jes/jobmonitor-wrapper/v1" >
< xsd:import namespace = "http://www.astrogrid.org/schema/CEATypes/v1" schemaLocation = "../../../cea/CEATypes/v1.0/CEATypes.xsd" />
< xsd:element name = "monitorJob" >
< xsd:complexType >
< xsd:sequence >
< xsd:element ref = "ceat:job-identifier" />
< xsd:element ref = "ceat:message" />
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
</ xsd:schema >
</ wsdl:types >
< wsdl:message name = "monitorJobRequest" >
< wsdl:part element = "wrapper:monitorJob" name = "parameters" />
</ wsdl:message >
< wsdl:portType name = "JobMonitor" >
< wsdl:operation name = "monitorJob" >
< wsdl:input name = "monitorJobRequest" message = "monitorJobRequest" />
</ wsdl:operation >
</ wsdl:portType >
< wsdl:binding name = "JobMonitorServiceSoapBinding" type = "JobMonitor" >
< wsdlsoap:binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" />
< wsdl:operation name = "monitorJob" >
< wsdlsoap:operation soapAction = "monitorJob" />
< wsdl:input >
< wsdlsoap:body use = "literal" />
</ wsdl:input >
</ wsdl:operation >
</ wsdl:binding >
< wsdl:service name = "JobMonitorService" >
< wsdl:port name = "JobMonitorService" binding = "JobMonitorServiceSoapBinding" >
< wsdlsoap:address location = "http://localhost:8080/axis/services/JobMonitorService" />
</ wsdl:port >
</ wsdl:service >
</ wsdl:definitions >

9. Appendix D: The complete CEAResultsListener WSDL 1.0

< wsdl:definitions targetNamespace = "urn:cea/resultslistener/v1" xmlns:xml = "http://www.w3.org/XML/1998/namespace" xmlns: = "http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap = "http://xml.apache.org/xml-soap" xmlns:ceat = "http://www.astrogrid.org/schema/CEATypes/v1" xmlns:intf = "urn:cea/resultslistener/v1" xmlns:mime = "http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soapenc = "http://schemas.xmlsoap.org/soap/encoding/" xmlns:wrapper = "urn:cea/resultslistener-wrapper/v1" xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" >
< wsdl:documentation > interface definition for the results callback web service. </ wsdl:documentation >
< wsdl:types >
< xsd:schema targetNamespace = "urn:cea/resultslistener-wrapper/v1" >
< xsd:import namespace = "http://www.astrogrid.org/schema/CEATypes/v1" schemaLocation = "../../../cea/CEATypes/v1.0/CEATypes.xsd" />
< xsd:element name = "putResults" >
< xsd:complexType >
< xsd:sequence >
< xsd:element ref = "ceat:job-identifier" />
< xsd:element name = "result-list" type = "ceat:result-list-type" />
</ xsd:sequence >
</ xsd:complexType >
</ xsd:element >
</ xsd:schema >
</ wsdl:types >
< wsdl:message name = "PutResultsRequest" >
< wsdl:part element = "wrapper:putResults" name = "parameters" />
</ wsdl:message >
< wsdl:portType name = "ResultsListener" >
< wsdl:operation name = "putResults" >
< documentation > Return the results to the listener </ documentation >
< wsdl:input message = "intf:PutResultsRequest" />
</ wsdl:operation >
</ wsdl:portType >
< wsdl:binding name = "ResultsListenerServiceSoapBinding" type = "intf:ResultsListener" >
< wsdlsoap:binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" />
< wsdl:operation name = "putResults" >
< wsdlsoap:operation soapAction = "putResults" />
< wsdl:input >
< wsdlsoap:body use = "literal" />
</ wsdl:input >
</ wsdl:operation >
</ wsdl:binding >
< wsdl:service name = "ResultsListenerService" >
< wsdl:port binding = "intf:ResultsListenerServiceSoapBinding" name = "ResultListener" >
< wsdlsoap:address location = "http://localhost:8080/axis/services/ResultsListenerService" />
</ wsdl:port >
</ wsdl:service >
</ wsdl:definitions >

10. Appendix E: CEATypes Schema

The CEATypes.xsd schema that is required by the WSDL files above

< xsd:schema targetNamespace = "http://www.astrogrid.org/schema/CEATypes/v1" elementFormDefault = "qualified" attributeFormDefault = "unqualified" xmlns:xml = "http://www.w3.org/XML/1998/namespace" xmlns:ceat = "http://www.astrogrid.org/schema/CEATypes/v1" xmlns:ceapd = "http://www.astrogrid.org/schema/AGParameterDefinition/v1" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" >
< xsd:import namespace = "http://www.astrogrid.org/schema/AGParameterDefinition/v1" schemaLocation = "../../../jes/AGParameterDefinition/v1.0/AGParameterDefinition.xsd" />
< xsd:element name = "message" type = "ceat:message-type" />
<!-- needed to change schema of this. unit tests reveal that axis can't transport xsd:dateTime as an attrib. works as an element though. gah if I'm changing one field to a nested element, may as well change the lot of them... -->
< xsd:complexType name = "message-type" >
< xsd:annotation >
< xsd:documentation > A log entry recorded during execution </ xsd:documentation >
</ xsd:annotation >
< xsd:all >
< xsd:element name = "content" type = "xsd:string" minOccurs = "0" />
< xsd:element name = "source" type = "xsd:string" minOccurs = "0" />
< xsd:element name = "timestamp" type = "xsd:dateTime" minOccurs = "0" />
< xsd:element name = "level" type = "ceat:log-level" minOccurs = "0" />
< xsd:element name = "phase" type = "ceat:execution-phase" minOccurs = "0" />
</ xsd:all >
</ xsd:complexType >
< xsd:element name = "job-identifier" type = "ceat:job-identifier-type" />
< xsd:simpleType name = "job-identifier-type" >
< xsd:annotation >
< xsd:documentation > Element for pass-through activity token </ xsd:documentation >
</ xsd:annotation >
< xsd:restriction base = "xsd:string" />
</ xsd:simpleType >
<!-- supporting types -->
< xsd:simpleType name = "execution-phase" >
< xsd:annotation >
< xsd:documentation > Enumeration of possible phases of job execution </ xsd:documentation >
</ xsd:annotation >
< xsd:restriction base = "xsd:string" >
< xsd:enumeration value = "PENDING" />
< xsd:enumeration value = "INITIALIZING" />
< xsd:enumeration value = "RUNNING" />
< xsd:enumeration value = "COMPLETED" />
< xsd:enumeration value = "ERROR" />
< xsd:enumeration value = "UNKNOWN" />
</ xsd:restriction >
</ xsd:simpleType >
< xsd:simpleType name = "log-level" >
< xsd:annotation >
< xsd:documentation > Enumeration of possible message log levels </ xsd:documentation >
</ xsd:annotation >
< xsd:restriction base = "xsd:string" >
< xsd:enumeration value = "info" />
< xsd:enumeration value = "warn" />
< xsd:enumeration value = "error" />
</ xsd:restriction >
</ xsd:simpleType >
< xsd:complexType name = "result-list-type" >
< xsd:sequence >
< xsd:element name = "result" type = "ceapd:parameterValue" minOccurs = "0" maxOccurs = "unbounded" />
</ xsd:sequence >
</ xsd:complexType >
< xsd:complexType name = "input-list-type" >
< xsd:sequence >
< xsd:element name = "input" type = "ceapd:parameterValue" minOccurs = "0" maxOccurs = "unbounded" />
</ xsd:sequence >
</ xsd:complexType >
< xsd:complexType name = "execution-summary-type" >
< xsd:all >
< xsd:element name = "application-name" type = "xsd:string" minOccurs = "1" maxOccurs = "1" />
< xsd:element name = "execution-id" type = "xsd:string" minOccurs = "1" maxOccurs = "1" />
<!-- have startTime and end Time here ?? -->
< xsd:element name = "input-list" type = "ceat:input-list-type" minOccurs = "1" maxOccurs = "1" />
< xsd:element name = "result-list" type = "ceat:result-list-type" minOccurs = "0" maxOccurs = "1" />
< xsd:element name = "status" type = "ceat:execution-phase" minOccurs = "1" maxOccurs = "1" />
</ xsd:all >
</ xsd:complexType >
</ xsd:schema >

11. Appendix E: Change History

This is the first version that has been made public - some content is based on [CEA].

12.

[RFC 2119]
Bradner, S. 1997. [] , IETF RFC 2119, http://www.ietf.org/rfc/rfc2119.txt
[RM]
Hanisch, Robert (ed.) 2004. [] , IVOA Recommendation, http://www.ivoa.net/Documents/REC/ResMetadata/RM-20040426.htm
[VR]
Plante, Ray (ed.) 2006. VOResource: an XML Encoding Schema for Resource Metadata, IVOA Working Draft, http://www.ivoa.net/Documents/latest/VOResource.html
[VSTD]
Harrison, Paul. (ed.) 2006. VOStandard: an XML Encoding Schema for IVOA Standards, IVOA Working Draft, http://www.ivoa.net/Documents/latest/VOResource.html
[CEA]
Harrison, Paul. 2005. A Proposal for a Common Execution Architecture , IVOA Working Draft, http://www.ivoa.net/Documents/latest/CEA.html
[UWS]
Rixon, Guy. 2007. Universal Worker Service, V0.3, IVOA Working Draft, http://www.ivoa.net/internal/IVOA/IvoaGridAndWebServices/UWS-0.3.pdf
[CEAAPP]
Harrison, Paul. 2007. CEA Application Model: A model and XML Encoding Schema for Applications in the Common Execution Architecture, IVOA Working Draft, http://www.ivoa.net/Documents/latest/CEAApplicationDM.html
[xml]
Bray, Tim, Paoli, Jean, Sperberg-McQueen, C. M., Maler, Eve, Yergeau, Francois, Cowan, John (editors) 2006, [] ,,http://www.w3.org/TR/xml11/
[schema]
Fallside, David C., Walmsley, Priscilla (editors) 2004, [] , W3C Recommendation 28 October 2004, http://www.w3.org/TR/xmlschema-0/
[ISO8601]
Wolf, Misha and Wicksteed, Charles 1997, [] , http://www.w3.org/TR/NOTE-datetime.
[ID]
Plante, R., Linde, T., Williams, R., Noddle, K. 2005, [] , http://www.ivoa.net/Documents/REC/Identifiers/Identifiers-200505XX.html.
[WSDL]
Christensen, E., Curbera, F., Meredith, G., Weerawarana, S. [] , W3C Note 15 March 2001, http://www.w3.org/TR/wsdl.
[WSDL2]
Chinnici, R., Moreau, J-J., Ryman, A., Weerawarana, S. [] , W3C Working Draft 26 March 2007, http://www.w3.org/TR/wsdl20/.
[SOAP]
Box, D., Ehnebuske, D., Kakivaya, G., Layman, A., Mendolsohn, N., Neilsen, H.F., Thatte, S., Winer, D. [] , W3C Note 08 May 2000, http://www.w3.org/TR/2000/NOTE-SOAP-20000508/.
[REST]
Roy T. Fielding [] , http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm.

$Revision: 847 $ $Date: 2008-10-29 14:33:57 +0000 (Wed, 29. Oct 2008) $ $HeadURL: $