Tuscany - Getting Started - Helloworld With Dependencies Sample
---------------------------------------------------------------

This sample extends the helloworld sample to show how to use ZIP format contributions which include dependencys jar which are made available on the contribution classpath. To demonstrate this the Helloworld service is updated to use a Apache Commons Lang 3.0 utility to capatalize the first letter of the name.

The changes to the helloworld sample are:
- update sample.HelloworldImpl class is updated to use the Apache Commons Lang 3.0 WordUtils utility 
- the Maven build is updated to use the Assembly plugin to create a ZIP archive of the contrubution which includes the dependency jars
- use a node.xml file to configure the contributions used by the Tuscany maven plugin

As with all the getting-started samples you can run this sample with:

   mvn tuscany:run 

And then as with the original helloworld sample you may explore the state of the domain with Shell commands and test the service by using the Shell "invoke" command:

   invoke HelloworldComponent sayHello yourName

which should return a hello text with the name capatilized:

   Hello YourName

