Preliminary notesThis use case can be reproduced with both Talend Open Studio and Talend Integration Suite. |
Rationale
Execute a Talend job into Petals and passing it a context as a parameter described in the service's WSDL interface..
The job is exposed as a service into Petals. When this service is called, the parameter is passed to the job, which is then executed.
| Unlike the native way to pass options to a job, exporting a context as a parameter is one of the recommended ways to pass information to a job. |
The input message provides the value of of the context which is exposed as a parameter in the service's interface.
Only the job's result is expected in the response.
Creating and exporting the job
The job to be executed performs the following actions:
- The job is passed the value of the context variable.
- The job connects to a database.
- It retrieves the content of a table.
- It serializes part of the extracted data as a CSV file on the disk.
This job has one context variable, which indicates the location of the CSV file.
| In the scope of this use case, it is assumed there is a database formationtalend on the localhost, having a table named customers. The schema of the customers table includes two columns named CustomerName and CustomerAddress, both being of type varchar(255). |
Creating the job
The job export is detailled in the use case "A Simple Talend Job".
There is no difference.
Exporting the job
The job export is detailled in the use case "A Simple Talend Job".
There is no difference.
Deploying and testing in Petals
Looking at the generated WSDL
In the created Petals service assembly, the most interesting thing to look at is the WSDL.
Indeed, the WSDL will determine the way the exported service will be called.
The input message's description requires empty parameters.
<xs:element name="executeJob" type="tns:executeJob" /> <xs:complexType name="executeJob"> <xs:sequence> <xs:element minOccurs="0" name="contexts" type="tns:talendContexts" /> <xs:element minOccurs="0" name="in-attachments" type="tns:inAttachments" /> <xs:element maxOccurs="unbounded" minOccurs="0" name="in-data-bean" type="tns:inRow" /> <xs:element maxOccurs="unbounded" minOccurs="0" name="talend-option" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:complexType name="talendContexts"> <xs:sequence> <xs:element name="outputLocation" type="xs:string" minOccurs="0" default="C:/Documents and Settings/vzurczak/Bureau/output.csv" /> </xs:sequence> </xs:complexType> <xs:complexType name="inAttachments"> <xs:sequence> </xs:sequence> </xs:complexType> <xs:complexType name="inRow"> <xs:sequence> </xs:sequence> </xs:complexType>
As you can see, the context name, type and default value have been exported in the generated WSDL.
In any case, the default value is more useful to document the service than for the execution.
| Obviously, the file path example to illustrate a context may not be the best one. Anyway, it serves its purpose, which is being an example. |
And the output message only includes the job's result.
<xs:element name="executeJobResponse" type="tns:executeJobResponse" /> <xs:complexType name="executeJobResponse"> <xs:sequence> <xs:element minOccurs="0" name="talend-job-output" type="tns:talendJobOutput" /> </xs:sequence> </xs:complexType> <xs:complexType name="talendJobOutput"> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="executionResult" nillable="true" type="ns1:stringArray" /> <xs:element minOccurs="0" name="outAttachment" type="tns:outAttachments" /> <xs:element maxOccurs="unbounded" minOccurs="0" name="outDataBean" nillable="true" type="tns:outRow" /> </xs:sequence> </xs:complexType> <xs:complexType name="outAttachments"> <xs:sequence> </xs:sequence> </xs:complexType> <xs:complexType name="outRow"> <xs:sequence> </xs:sequence> </xs:complexType>
Deploying and testing this new service
To test this service, you can use a tool like SoapUI.
This way, you can see what the XML messages look like.
The first thing to do is to create a service-unit for the Petals-BC-SOAP component, that exposes (consumes) our Talend job as a service outside the bus.
This step is not described here. You can take a look at the Petals-BC-SOAP documentation and the Petals Studio documentation.
Just make sure the SOAP configuration uses the InOut MEP.
Now, your input message should be:
And the returned message should be: