
The Atomic Services project aims at designing and implementing a concurrency control mechanism analogous to distributed database transactions for controlling access to services in distributed computing. A transaction in this context is a piece of code that executes a series of requests and replies to remote services. The services themselves, possibly located on other machines, can access other services that are part of the same transaction. These requests and replies logically occur at a single instant in time; intermediate states are not visible to other transactions. Transactions have properties of isolation and atomicity. Our goal is to provide a convenient language and runtime support for long-lived transactions with I/O operations.
We currently develop three tools: Atomic RMI, Atomic Locks and Atomic REST.
Atomic RMI is an extension of Java Remote Method Invocation (RMI) with atomic remote method invocations. Our library provides constructs that enable a programmer to declare a series of method calls to remote objects to be executed in isolation. Currently, there is no support of recovery from failures -- remote object calls that failed due to machine crashes raise an exception. This may lead to inconsistency in transactional processing. In the future, we plan to extend the system with tolerance to machine crashes and rollback-recovery.
Atomic Locks is an extension of lock-based synchronization in Java with transactional processing for controlling accesses to shared memory in concurrent computing. A transaction in this context is a piece of code that executes a series of reads and writes to shared memory. However, only those reads and writes that are guarded by a lock construct are executed transactionally. Our library provides two main constructs: 'atomic' and 'retry' for, respectively, defining a transaction and executing transaction rollback. The 'retry' construct enables to restart a transaction if, for example, some condition is not true. Thus, Atomic Locks offers functionality of the Software Transactional Memory (STM) but does not exclude using locks.
We also develop Atomic REST -- a mechanism analogous to Atomic RMI for controlling access to RESTful Web Services. REpresentational State Transfer (REST) is a key design idiom in the web services world that embraces a stateless client-server architecture in which the web services are viewed as resources and can be identified by their URLs. Web service clients that want to use these resources access a particular representation by transferring application content using a small globally defined set of remote methods -- typically of the HTTP protocol -- that describe the action to be performed on the resource. Atomic REST will enable accessing RESTful resources atomically. A transaction in this context is a piece of code that executes a series of HTTP methods on remote resources that represent services.
See a short demo movie explaining the main concepts of Atomic RMI. Here is a demo explaining the main features of Atomic Locks.
A tarball file with source files of Atomic RMI is available here:
|
|
To compile the files you will need the Java SDK ver. at least 1.5.