View Source

{section}
{column}

h1. Preliminary notes

This use case can be reproduced with both Talend Open Studio and Talend Integration Suite.
This use case relies on the use case "A Simple Talend Job".

h1. Rationale

Execute a Talend job into Petals and passing it parameters that are natively supported by the job..
The job is exposed as a service into Petals. When this service is called, the job is passed the context value as a native option, before being executed.

{warning}
Be careful, this is not the recommended way to pass information to a job. It is presented only to show what is feasible.
{warning}

The input message provides the value of a context using the native parameter-passing way of Talend jobs.
Only the job's result is expected in the response.
{column}

{hide-if:display=pdf}
{column:width=350px}
{panel:title=Table of contents}{toc}{panel}
{panel:title=Contributors}{contributors:order=name|mode=list}{panel}
{column}
{hide-if}
{section}

h1. Creating and exporting the job

The job to be executed performs the following actions:
# The job loads the context variable. If the variable name is not recognized, then the default value will be used.
# 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.

\\
{info}
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).
{info}



h2. Creating the job

The job export is detailed in the use case "A Simple Talend Job".
There is no difference.


h2. Exporting the job

The job export is detailed in the use case "A Simple Talend Job".
There is no difference.



h1. Deploying and testing in Petals


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

{code:lang=xml}
<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:sequence>
</xs:complexType>

<xs:complexType name="inAttachments">
<xs:sequence>
</xs:sequence>
</xs:complexType>

<xs:complexType name="inRow">
<xs:sequence>
</xs:sequence>
</xs:complexType>
{code}

\\
And the output message only includes the job's result.

{code:lang=xml}
<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>
{code}


h2. 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 (in SoapUI) should look like:

{code:lang=xml}
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tal="http://petals.ow2.org/talend/">

<soapenv:Header/>
<soapenv:Body>
<tal:executeJob>
<!--Optional:-->
<tal:contexts/>
<!--Optional:-->
<tal:in-attachments/>
<!--Zero or more repetitions:-->
<tal:in-data-bean/>
<!--Zero or more repetitions:-->
<tal:talend-option>--context_param</tal:talend-option>
<tal:talend-option>outputLocation=C:/Documents and Settings/vzurczak/Bureau/newOutput.csv</tal:talend-option>
</tal:executeJob>
</soapenv:Body>
</soapenv:Envelope>
{code}

\\
Instead of writing the output in the _output.csv_ file, we write it into _newOutput.csv_.

\\
The returned message, when everything works, is:

{code:lang=xml}
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<tns:executeJobResponse
xmlns:tns="http://petals.ow2.org/talend/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<tns:talend-job-output>
<tns:executionResult>
<jaxb:item xmlns:jaxb="http://jaxb.dev.java.net/array">0</jaxb:item>
</tns:executionResult>
<tns:outAttachment/>
</tns:talend-job-output>
</tns:executeJobResponse>
</soapenv:Body>
</soapenv:Envelope>
{code}

\\
If the job execution fails, the 0 is replaced by another integer, e.g. 1.
One failure reason can be, as an example, that the database is not started.

\\
Another way to check the job's successful completion, is to check the existence of the output file.
Here are the first lines in this file (the database was populated with random values from another Talend job - do not be shocked by the values).

{noformat}
Griffith Paving and Sealcoatin;talend@apres91
Bill's Dive Shop;511 Maple Ave. Apt. 1B
Childress Child Day Care;662 Lyons Circle
Facelift Kitchen and Bath;220 Vine Ave.
Terrinni & Son Auto and Truck;770 Exmoor Rd.
Kermit the Pet Shop;1860 Parkside Ln.
Tub's Furniture Store;807 Old Trail Rd.
Toggle & Myerson Ltd;618 Sheriden rd.
Childress Child Day Care;788 Tennyson Ave.
Elle Hypnosis and Therapy Cent;2032 Northbrook Ct.
Lennox Air Pollution Control;4522 N. Greenview Apt. 1B
...
{noformat}