Siena Software

links
Siena (Scalable Internet Event Notification Architecture) is a research project aimed at designing and constructing a generic scalable event notification service. For full details on the Siena project follow this link. This page contains source and binary packages as well as user documentation for the implementation of Siena. Other Siena software is available from the Siena contrib page.

News

9 July 2008
Released version 1.5.5 of the Java language API and server.
This is a bugfix release. Please, see the change log for details. Binary, source, and documentation packages are available for download here.
22 November 2002
Released version 0.3.2 of the (old) C++ API and Server.
This release has been ported to gcc 3.2.

If you are a Siena user, or even if you are just evaluating or studying Siena, please consider registering with us by submitting a Siena User Registration Form.

License and Credits

Copyright © 1998-2004 University of Colorado.

Siena is free software. you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Siena is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Authors

Siena is primarily the work of Antonio Carzaniga and Alexander L. Wolf.

Significant contributions to the implementation and improvement of Siena are also due to Mauro Caporuscio, Jing Deng, and John Giacomoni.

Feedback

If you are using Siena, you may want to submit a Siena User Registration Form. Any sort of feedback is much appreciated. Bug reports and/or technical questions should be directed to Antonio Carzaniga (firstname.lastname@usi.ch).

Acknowledgments

This work was supported in part by the Air Force Materiel Command, Rome Laboratory, and the Defense Advanced Research Projects Agency under Contract Numbers F30602-94-C-0253, F30602-97-2-0021, F30602-98-2-0163, F30602-99-C-0174, F30602-00-2-0608, and N66001-00-8945; by the Air Force Office of Scientific Research, Air Force Materiel Command, USAF, under grant number F49620-98-1-0061; and by the National Science Foundation under Grant Number CCR-9701973. The content of the information does not necessarily reflect the position or the policy of the US Government and no official endorsement should be inferred.

We thank David S. Rosenblum for his foundational contribution to this project. We also thank Dennis Heimbigner, Richard S. Hall, and André van der Hoek of the Software Engineering Research Laboratory, University of Colorado at Boulder, and Gianpaolo Cugola, Elisabetta Di Nitto, and Alfonso Fuggetta of Politecnico di Milano for their contributions to this work.

Overview

This implementation of Siena consists of two classes of components: The current prototype includes two variants of servers and two variants of interfaces. The interfaces are for Java and C++. The Java language interface also works as a server that implements a hierarchical architecture. The other server implements a peer-to-peer architecture and is programmed in C++. Notice that the two server and API implementations are not mutually compatible.

In summary, there are two implementations that, for lack of better terms, I will call Current and Old respectively. These include the following components:

Current Version
a hierarchical server implemented in Java, a Java API, and a C++ API.
Old Version
a peer-to-peer server implemented in C++ and a C++ API.
Unless you intend to experiment with the "Old" implementation, you should download and use the "Current" version.

Installation

To install Siena from a binary distribution, simply unpack the tar file in a convenient directory. If you are installing from sources, please refer to the C++ API installation instructions and server installation instructions.

Basics

First Example

The simplest example consists of one Siena server, one object of interest (a producer of notifications), and an interested party (a consumer of notifications).

Starting up a Siena Server

If you are using the Java language version and you set your CLASSPATH appropriately:

java siena.StartServer -port 2345
Or if you are using a C++ server, assuming the executable siena is in your PATH, you can start up a server with this command:

siena -port 2345

Examples of Siena Clients

Java Clients

You can find an example of a simple interested party programmed in java in InterestedParty.java, and a simple object of interest in ObjectOfInterest.java. In order to compile and run Java clients, you should download the Siena Java language API package into a convenient directory and add it to your CLASSPATH.

C++ Clients

You can find the code of a simple interested party programmed in C++ in interested_party.cc. A simple object of insterest (object_of_interest.cc) is also available. You can compile these programs with the following command:
 c++ interested_party.cc -I/tools/siena/include -L/tools/siena/lib -lsiena -o interested_party
This assumes that you installed Siena in /tools/siena. Notice that, depending on your system, you might need to link additional libraries, for example under Solaris you should add -lsocket -lnsl.

Connecting Servers

Siena servers can be connected to form a distributed event service. A distributed topology of servers is constructed incrementally. In practice, every server can connect to another server at startup. For example:

using the Java hierarchical server:

  1. start the first server: on host foo, execute:
    java siena.StartServer -ka -port 2345
  2. start the second server: on host bar, execute:
    java siena.StartServer -port 2345 -master ka:foo:2345
  3. start the third server: on host xyz, execute:
    java siena.StartServer -port 2345 -master ka:bar:2345
  4. start the fourth server: on host abc, execute:
    java siena.StartServer -port 2345 -master ka:bar:2345
Please, consult the Java API documentation for more details.

Known Problems and Limitations

Packages Download

The following packages are either .tar.gz or .jar archive files. .jar (Java archive) files can be unpacked using jar from your Java language installation. .tar.gz files are tar archives compressed with gzip. .tar.gz files can also be unpacked by common win32 archiving tools such as WinZip and PowerArchiver. Notice that some browsers rename downloaded files in such a way that they can not be automatically recognized by the archiving tool. Make sure that the packages you download have either the .tar.gz or .jar suffix.

Some beta releases are available here.

Current Version

Java API and server
C++ API

"Old" Version

C++ API
C++ server
Obsolete binary packages
this page is maintained by Antonio Carzaniga and was updated on August 18, 2009