A Simple Talend Job

Version 1 by Vincent Zurczak
on Mar 03, 2010 18:24.

compared with
Key
This line was removed.
This word was removed. This word was added.
This line was added.

Changes (46)

View Page History

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

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

Create a new job called SimpleJob (right-click on Job Designs and Create Job).
Add a tMysqlInput component on the graphical workspace. It will be the start component.
Then, add a tFileOutputDelimited component on the graphical workspace, and link the two components with a main connection.

h2. Creating the job

Create a new job called SimpleJob (right-click on *Job Designs* and *Create Job*).
Add a *tMysqlInput* component on the graphical workspace. It will be the start component.
Then, add a *tFileOutputDelimited* component on the graphical workspace, and link the two components with a main connection.

\\
Your job should look like this:

!SimpleJobAppearance.jpg!

\\
Let's configure the components.
Select the *tMySqlInput* component, and go into the *Component* view.

Provide the required information to connect to the database.
Set the request query value to

{panel}
| "select CustomerName, CustomerAddress from customers" |
Make sure to know forget the quotes.
{panel}

\\
Make sure to not forget the surrounding quotes.

!SimpleJobProperties.jpg!

\\
And click Guess Schema.
Click *Guess schema*.
The request is parsed, the database is queried about its structure, and the component schema is guessed.
If you click Edit Schema, *Edit schema*, you can see the component schema, with the column names and types.

!SimpleJobSchema.jpg!

\\
Propagate the schema changes to the *tFileOutputDelimited*.
And let's now configure this second component. Select it on the graphical workspace and go into the *Component* view.
Click "..." on the file name row, and select the output location, e.g.
Click *...* on the *file name* row, and select the output location, e.g. "C:/Documents and Settings/vzurczak/Bureau/output.csv"

"C:/Documents and Settings/vzurczak/Bureau/output.csv"
\\
We are now going to replace this value by a context.
Go into the Contexts view.
Click "+" *+* and give the new context variable the name "outputLocation". Let it be a string.
Go into the "values as tree" tab, and set the default value of this context variable to C:/Documents and Settings/vzurczak/Bureau/output.csv (without the quotes).

!SimpleJobContextes.jpg!

Now, turn back in the *Component* view and select the *tFileOutputDelimited* component.
Set the file name value to context.outputLocation and save the job.
Set the *file name* value to

{panel}
context.outputLocation
{panel}


and save the job.

When this job is executed, it reads the values in the MySQL table, and writes them into the CSV file whose location is defined by the context variable outputLocation.

h2. Exporting the job

Select the job and right-click it. Select *Export to Petals ESB*.
Update the target destination.
Let the job be exposed as a singleton. Do not export any context.

You should have the following dialog:

!SimpleJobExport.jpg!

Click *Finish*.




h2. Looking at the created archive generated WSDL

The created archive is a Petals service assembly.
More details are available in the documentation of the petals-SE-Talend.
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.

What must be taken care of is the jbi.xml and the WSDL files available in the service-unit.
If you open the created archive, it contains another archive. This second archive contains a jbi.xml file.
\\
The input message's description requires empty parameters.

The WSDL file exposes no parameter.
The possible input parameters are:
{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

SoapUI is used for this test...
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:

{code:lang=xml}

{code}

\\
And the returned message should be:

{code:lang=xml}

{code}