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.
The Tuscany SCA Erlang binding is compatible with Erlang/OTP version R12B but
doesn't work correctly with some later versions including R14B. See TUSCANY-3759
for details.

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. 
