Hello World Erlang Service Sample
=================================
This sample demonstrates an SCA service that uses a Erlang binding 

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

In order to run Erlang samples you need to have Erlang/OTP distribution installed - 
epmd binary is required in your system path. See http://erlang.org for downloads.

If you just want to run it to see what happens open a command prompt, navigate
to this sample directory and do:

ant run

OR if you don't have ant, on Windows do

java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-helloworld-erlang-service.jar helloworld.HelloWorldServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-erlang-service.jar helloworld.HelloWorldServer

Now the server is started you can use the helloworld-erlang-reference sample to 
exercise it. 

Sample Overview
---------------
The sample provides a single component that is wired to a service with a 
Erlang binding.

helloworld-erlang-service/
  src/
    main/
      java/
        helloworld/
          HelloWorldService.java          - interface description for 
                                            HelloWorldServiceComponent
          HelloWorldImpl.java             - component implementation
          HelloWorldServer.java           - starts the SCA Runtime and 
                                            deploys the helloworlderlangservice
                                            .composite and then waits for the
                                            service to be called via Erlang
      resources/
        helloworlderlangservice.composite    - the SCA assembly for this sample

    test/
      java/
        helloworld/
          HelloWorldErlangServerTestCase.java - JUnit test case
        dynaignore/    						  - internal Java classes for ignoring test 
        										in case of missing Erlang/OTP distribution
  helloworld-service.png                  - a pictorial representation of the 
                                            sample .composite file
  build.xml                               - the Ant build file
  pom.xml                                 - the Maven build file        

Building And Running The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built and run using Ant using the 
following commands

cd helloworld-erlang-service
ant compile
ant run

You should see the following output from the run target.

run:
     [java] EPMD server started
     [java] 2009-05-26 11:59:07 org.apache.tuscany.sca.node.impl.NodeImpl <init>
     [java] INFO: Creating node: helloworlderlangservice.composite
     [java] 2009-05-26 11:59:08 org.apache.tuscany.sca.node.impl.NodeImpl configureNode
     [java] 2009-05-26 11:59:08 org.apache.tuscany.sca.node.impl.NodeImpl configureNode
     [java] 2009-05-26 11:59:08 org.apache.tuscany.sca.node.impl.NodeImpl start
     [java] INFO: Starting node: helloworlderlangservice.composite
     [java] HelloWorld server started (press enter to shutdown)

     
As this point the SCA service is exposed as a Erlang module via Erlang RPC which is
started automatically by the SCA runtime. To stop the server just press 
enter.

To exercise the service run up the helloworld-erlang-reference sample. Take a look at 
the README in that sample and you will see you need the following commands

cd helloworld-erlang-reference
ant run

Building Sample Using Maven 
-------------------------------------------
With either the binary or source distributions the sample can be built 
using Maven as follows. 

cd helloworld-erlang-service
mvn

You should see the following output 

...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15 seconds
[INFO] Finished at: Wed Jul 02 12:50:24 BST 2008
[INFO] Final Memory: 13M/51M
[INFO] ------------------------------------------------------------------------


This shows that the module has compiled successfully. 
