Notification Broker Binding Sample
==================================

This sample illustrates the use of <binding.notification/> with a
broker.

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

Sample Overview
---------------

This sample illustrates the use of a notification broker that is located in a
separate (and remote) composite with respect to any producers or consumers. As
such, this sample is run in conjunction with the binding-notification-producer
sample, the binding-notification-consumer sample, or both. Take a look at the
composite file or the .svg file which shows the composite file in pictorial form.
The composite service and composite reference each have a <binding.notification/>
that handles the remote communication. This binding includes an 'ntm' attribute
that refers to the notification type manager, which manages the connectivity of
producers, consumers and brokers, and which (for this sample) is assumed to be
running on http://localhost:8083. The ntm is a system component that is included in
and runs as part of the binding-notification module.
This sample also illustrates the use of a wsdl interface in the notification
component's <implementation.notification/>. This allows messages sent and received
via <binding.notification/> to be transported as literal xml over http.

Sample Usage
------------

These instructions assume that you will start the notification samples in the
following order:
 binding-notification-consumer
 binding-notification-broker
 binding-notification-producer

For a clean shutdown without exceptions, you should end the notification samples
in the following order:
 binding-notification-producer
 binding-notification-broker
 binding-notification-consumer

This sample is run using the tuscany binary distribution. To see what it does,
first start the consumer sample. When this is running, open a command prompt,
navigate to this sample's directory and do 

ant run

OR if you don't have ant,

on Windows, use the following command:

java -Dnotification.httpPort=8082 -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-binding-notification-broker.jar  notification.broker.TrafficAdvisoryServer

on *nix, use the following command:

java -Dnotification.httpPort=8082 -cp ../../lib/tuscany-sca-manifest.jar:target/sample-binding-notification-broker.jar notification.broker.TrafficAdvisoryServer

this should bring up the following prompt:

Send a report value, ^C or 'end' to end

at this point you should be able to type a message to send, for instance:

Traffic congestion

Notice that before you try to receive any message, you should bring up the
consumer sample or another broker sample. When you have finished using this
sample, type 'end' or ^C to end.

Also notice that '-Dnotification.httpPort=8082' is used in the java command.
This indicates the port the sample should use. This also says that this server
is not going to play the role of ntm, given our previous assumption. It is important
that the first one of the producer, consumer or broker sample that is run be the
one that uses '-Dnotification.httpPort=8083', otherwise there is no ntm to talk
to and an exception will be thrown.

Sample directory structure:
---------------------------

binding-notification-broker/
  src/
    main/
      java/
        notification.broker/
          TestCaseProducer.java                    - interface for the producer component
          TrafficAdvisory.java                     - remote interface referred to by the producer component
                                                     and for the consumer component
          TrafficAdvisoryConsumer.java             - implementation for the consumer components
          TrafficAdvisoryProducer.java             - implementation for the producer component
          TrafficAdvisoryServer.java               - server class including main entry point
      resources/
        wsdl/
          TrafficAdvisory.wsdl                     - remote interface for the notification component
        TrafficAdvisoryNotification.componentType  - the component type referred to by
                                                     <implementation.notification/>
        TrafficAdvisoryNotification.composite      - the main composite including producer, consumer and
                                                     notification components, and composite service and reference
  binding-notification-broker.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 as 
follows

cd binding-notification-broker
ant compile
ant run

You should see the following output from the run target.

run:
     [java] Sep 14, 2007 11:14:24 AM org.apache.tuscany.sca.http.jetty.JettyServer addServletMapping
     [java] INFO: Added Servlet mapping: http://localhost:8082/consumer/trafficAdvisory
     [java] Sep 14, 2007 11:14:24 AM org.apache.tuscany.sca.http.jetty.JettyServer addServletMapping
     [java] INFO: Added Servlet mapping: http://localhost:8082/producer/trafficAdvisory
     
Building And Running The Sample Using Maven 
-------------------------------------------

With either the binary or source distributions the sample can be built and run 
using Maven as follows. 

cd binding-notification-broker
mvn
