/home/projects

Ubik

Overview

Ubik aims to provide a set of distributed computing APIs that complement Java's current "official" offerings - such as EJB and Jini. The main API of the Ubik project is a RMI-like framework that allows to easily and transparently perform method invocations over the wire. The whole process is simplified by (not exclusively): generating stubs dynamically; not enforcing the declaration of remote exceptions.

In a more general fashion, Ubik tries to offer an alternative to the complexity of Jini, and to the overkill and limitations of EJB. In the long run, the Ubik project's aim is to make the distribution of objects as transparent as possible, without compromises on scalability, robustness and performance.

In addition, Ubik supports plugging in different transport mechanisms; proof of this is its HTTP transport layer: Ubik can even be embedded in a servlet!

Ubik RMI is not an implementation of Java's RMI specification; it is therefore not a drop-in replacement of the JDK's RMI implementation.

Ubik RMI brings you feature-complete, easy remoting, without the burden of an application server.

Features

Ubik currently offers APIs that help build distributed applications. These APIs can be summarized as follows:

Ubik RMI

Ubik RMI is similar to the JDK's RMI. Yet it differs from it in many ways. The following features illustrate how:

  • Dynamically generated stubs (no stub compilation);
  • no need to throw RemoteExceptions;
  • no need to extend UnicastRemoteObject;
  • supports colocated method calls (no invocation via network if client and server are in the same VM;
  • automatic fail-over for stubs that are bound into Ubik JNDI - see next section;
  • sticky stubs and stateless stubs (that perform round-robin over the different servers);
  • supports client-side and server-side interceptors;
  • client-side discovery (naming service is automatically discovered, stateless stubs automatically discover new servers and add them to their round-robin list);
  • supports callbacks - very important for scalability;
  • isolated transport layer - potentially allowing for RMI over HTTP, UDP, etc.;
  • HTTP transport layer provided: you can even embed Ubik in a servlet;
  • inherently secure: Ubik does not support dynamic code download (therefore, no "foreign code" can enter a Ubik server). This greatly reduces configuration and security-related hassles (setting setting up a remote distributed codebase, managing security managers and permissions, etc.);
  • clean shutdown - incoming request threads are given time to complete;
  • performant .

Ubik JNDI

Ubik offers a complete JNDI implementation allowing to publish Ubik RMI servers in a reliable fashion, using the JNDI's programming model. Multiple Ubik JNDI servers can interoperate in a domain to provide reliable access to published services. Ubik JNDI has the following features:
  • Domain-wide replication of the JNDI tree;
  • Ubik RMI stubs that are bound into a Ubik JNDI server are automatically made "naming aware": they will automatically handle fail-over and/or round-robin (depending on the type of stub) provided that connection to their server of origin fails;
  • allows to bind multiple servers under the same name - essential for scalability;
  • client-side discovery of JNDI servers.
  • supports attributes (offers same possibilities as Jini templates).