Notification Producer Binding Sample | |
==================================== | |
This sample illustrates the use of <binding.notification/> with a | |
remote producer. | |
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 producer that is located in a | |
separate (and remote) composite with respect to any consumers. As such, this sample | |
is run in conjunction with the binding-notification-consumer sample, the | |
binding-notification-broker sample, or both. Take a look at the composite file | |
or the .svg file which shows the composite file in pictorial form. The composite | |
reference, referred to by the notification component, has 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 and broker samples. When these are 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=8081 -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-binding-notification-producer.jar notification.producer.TrafficAdvisoryServer | |
on *nix, use the following command: | |
java -Dnotification.httpPort=8081 -cp ../../lib/tuscany-sca-manifest.jar:target/sample-binding-notification-producer.jar notification.producer.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 send any message, you should bring up the | |
consumer sample or the broker sample. When you have finished using this | |
sample, type 'end' or ^C to end. | |
Also notice that '-Dnotification.httpPort=8081' 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-producer/ | |
src/ | |
main/ | |
java/ | |
notification.producer/ | |
TestCaseProducer.java - interface for the producer component | |
TrafficAdvisory.java - remote interface referred to by the producer component | |
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 and | |
notification components, and composite reference | |
test/ | |
java/ | |
notification.producer/ | |
TrafficAdvisoryTestCase.java - JUnit test case | |
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 and | |
notification components, and composite reference | |
binding-notification-producer.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-producer | |
ant compile | |
ant run | |
You should see the following output from the run target. | |
run: | |
[java] Sep 14, 2007 10:31:45 AM org.apache.tuscany.sca.http.jetty.JettyServer addServletMapping | |
[java] INFO: Added Servlet mapping: http://localhost:8081/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-producer | |
mvn | |
You should see the following output from the test phase. | |
------------------------------------------------------- | |
T E S T S | |
------------------------------------------------------- | |
Running notification.producer.TrafficAdvisoryTestCase | |
Only instantiating and closing domain ... | |
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.252 sec | |
Results : | |
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 | |
This shows that the Junit test cases have run successfully. |