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:
- Siena servers, and
- client-level interfaces (or API).
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:
- start the first server: on host foo, execute:
java siena.StartServer -ka -port 2345
- start the second server: on host bar, execute:
java siena.StartServer -port 2345 -master ka:foo:2345
- start the third server: on host xyz, execute:
java siena.StartServer -port 2345 -master ka:bar:2345
- 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
- the C++ implementation of the server is obsolete, and not
compatible with the current Java implementation.
HierarchicalDispatcher.shutdown() and
ThinClient.shutdown() might not work correctly on
some JVM implementations. In particular we know they won't work
on either Sun's and IBM's jvm1.3-linux-i386. We successfully
tested it on Sun's jvm1.2.2-linux-i386, jvm1.3-win32-i386,
jvm-1.3-solaris-sparc, and jvm-1.3-solaris-i386.
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
-