blob: 1ac31fd9dd15ec54506b5ca45720af7a87b9c5b8 [file] [log] [blame]
Apache Savan/C
What is it?
-----------
Savan/C is a C implementation of WS-Eventing specification. Savan/C is built on top of Axis2/C. Therefore by using Savan/C
you can add WS-Eventing capability to Web services hosted using Axis2/C. Savan/C was designed as a general
publisher/subscriber tool. The architecture was designed to abstract the general publisher/subscriber features so that
people could support more than one publisher/subscriber mechanisms within the same infrastructure.
The Latest Version
------------------
0.90.
Documentation
-------------
The documentation not available yet.
Acknowledgments
----------------
Apache Savan/C relies heavily on the use of autoconf and libtool to
provide a build environment.
Installation
------------
Please see the INSTALL file.
Licensing
---------
Please see the LICENSE file.
How To Run.
----------
Install savan module into <axis2 deploy folder>/modules folder. Add the Savan Phase
information into axis2.xml as following. Search for 'SavanPhase' in the
following xml block to identify the Savan specific entries.
<!-- ================================================= -->
<!-- Phases -->
<!-- ================================================= -->
<phaseOrder type="inflow">
<!-- System pre defined phases -->
<phase name="Transport"/>
<phase name="PreDispatch"/>
<phase name="Dispatch"/>
<phase name="PostDispatch"/>
<!-- End system pre defined phases -->
<!-- After PostDispatch phase, module or service author can add any phase as required -->
<!-- User defined phases could be added here -->
<!--phase name="userphase1"/-->
<!--phase name="RMPhase"/-->
<phase name="SavanPhase"/>
</phaseOrder>
<phaseOrder type="outflow">
<!-- User defined phases could be added here -->
<!--phase name="RMPhase"/-->
<phase name="SavanPhase"/>
<!--phase name="userphase1"/-->
<!--system predefined phase-->
<phase name="MessageOut"/>
<!--phase name="Security"/-->
</phaseOrder>
<phaseOrder type="INfaultflow">
<!-- User defined phases could be added here -->
<!--phase name="userphase1"/-->
<!--phase name="RMPhase"/-->
<phase name="SavanPhase"/>
</phaseOrder>
<phaseOrder type="Outfaultflow">
<!-- User defined phases could be added here -->
<!--phase name="RMPhase"/-->
<phase name="SavanPhase"/>
<!--phase name="userphase1"/-->
<phase name="MessageOut"/>
</phaseOrder>
In the services xml file for the service which require Savan enabled
add the entry
<module ref="savan"/>
If you need all services in the engine Savan enabled add the above entry into
axis2.xml.
In the module.xml file for the savan module give a valid path for database storage
<parameter name="savan_db" locked="false">/axis2c/deploy/savan_db</parameter>
You can use the sample in the samples folder for testing.
This sample consists of two services called listener and publisher and a subscriber client.
Install these samples by running the build.sh script in the smaples folder and you will find
publisher and listener services added to the $AXIS2C_HOME/services folder.
Here is the publisher's serivces.xml file
<service name="publisher">
<parameter name="ServiceClass" locked="xsd:false">publisher</parameter>
<parameter name="loadServiceAtStartup" locked="xsd:false">true</parameter>
<description>
This is a sample eventing data source which loads as the axis2 engine startup and
start publishing to its subscribers.
</description>
<module ref="savan"/>
<parameter name="TopicURL" locked="xsd:false">http://localhost:9090/axis2/services/publisher</parameter>
<operation name="start">
<parameter name="wsamapping" >http://ws.apache.org/axis2/c/savan/samples/pubilsher/start</parameter>
</operation>
</service>
TopicURL parameter is the url the data source(publisher) is listening for subscriber requests.
loadServiceAtStartup parameter tells to the axis2c engine that this service should be loaded at engine startup time.
Now to test the sample edit the client sample in samples/client/subscriber/subscriber.c.
You may need to edit the following line to point to the listener to which the publisher publish when subscriber subscribes.
axutil_hash_set(savan_options, SAVAN_OP_KEY_NOTIFY_EPR, AXIS2_HASH_KEY_STRING,
"http://localhost:9090/axis2/services/listener");
Now compile, install and execute the subscriber sample $AXIS2C_HOME/bin/samples/savan/subscriber.
This will send a subscription request to the publisher data source and receive a subscription id if subscription is
successful. The pubisher data source then starts publishing test data to the listener data sink provided by subscriber.
Using the subscription the subscriber request for renew subscription request and also a subscription status request message.
Finally it unsubscribe indicating that it has no further interest in receiving data source events.
Please keep in mind the following when using Savan/C with Axis2/C.
1. If Axis2 C engine is running as an Apache module make sure that Apache execute user has the full access to the
database path you included in the module.xml