Ubik is a performant, scalable, feature-rich distributed objects framework. It offers a RMI-like framework that allows easily and transparently performing method invocations over the wire, and packs features that guarantee across the board scalability.
Ubik currently offers APIs that help build distributed applications. These APIs can be summarized as follows:
Ubik RMI is similar to the JDK's RMI. Yet it differs from it in many ways. The following features illustrate how:
- NIO-based transport: extremely performant and scalabale;
- fast serialization based upon the JBoss Serialization library;
- 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);
- client-side discovery (naming service is automatically discovered, stateless stubs automatically discover new servers and add them to their round-robin list);
- different discovery mechanisms (IP Multicast, TCP-based broadcast relying on Avis);
- support for callbacks;
- 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;
- supports client-side and server-side interceptors;
- a @Remote annotation, which can be used instead of implementing the JDK's Remote interface;
- customizable: extend Ubik for generating your own stubs.
- 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.);
Ubik JNDIUbik 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 binding multiple servers under the same name - essential for scalability;
- client-side discovery of JNDI servers.