JNDI Service Providers


Project overview

Summary

The Java Naming and Directory InterfaceTM (JNDI) is an application programming interface (API) that provides generic and uniform access to multiple naming and directory services (NIS, DNS, LDAP, ...).  JNDI features a pluggable interface meaning implementations for existing, new and future naming services can easily be plugged in.  Such pluggable implementations are called service providers.

In this project two JNDI service providers were developed:

  • A service provider for the Jini lookup service (LUS)
  • A service provider for the HDNS distributed, fault tolerant naming service

These two providers are an addition to the list of existing service providers for NIS, LDAP, DNS, CORBA, ...

JNDI

JNDI provides naming and directory functionality to applications written using the JavaTM programming language. It is defined to be independent of any specific directory service implementation. Thus a variety of directories--new, emerging, and already deployed--can be accessed in a common way.

The JNDI architecture consists of an API and a service provider interface (SPI). Java applications use the JNDI API to access a variety of naming and directory services. The SPI enables a variety of naming and directory services to be plugged in transparently, thereby allowing the Java application using the JNDI API to access their services. See the following figure.

Jndi architecture

Additionally JNDI provides a generic distributed event model and support for federation. Federation is the process of "hooking" together naming systems so that the aggregate system can process composite names--names that span multiple naming systems (eg: ldap://myhost.com/n=jiniServer/jxtaGroup/myJxtaObject).
Many examples of composite names and federation are possible in the computing world, for example, URLs (RFC 1738) and the World Wide Web. One way that the JNDI federation model differs from these models is that it provides a single programmatic interface for accessing federations. Not just one API for one federation, but one API for many different types of federations.

Jini

Jini network technology, which includes JavaSpaces Technology and Jini extensible remote invocation (Jini ERI), is an open architecture that enables developers to create network-centric services -- whether implemented in hardware or software -- that are highly adaptive to change. Jini technology can be used to build adaptive networks that are scalable, evolvable and flexible as typically required in dynamic computing environments.
The key features of Jini are:
  • Code Mobility: Extends the Java programming model to the network; i.e., moves data and executables via a Java object over a network
  • Protocol agnostic: Provides the ultimate in design flexibility
  • Leasing: Enables network self-healing and self-configuration; i.e. improving fault tolerance
  • Resiliency - Networks readily adapt to changes in the computing environment
  • Integration - Allows fast, easy incorporation of legacy, current, and future network components
  • Licensing - Jini network technology is available free of charge with an evergreen license
HDNS

HDNS is a fault-tolerant, distributed naming service initially developed for the Harness project. HDNS uses JGroups for reliable multicast communication. The service consist of a group of nodes which maintain consistent replicas of the registration data. Read requests can thus be handled entirely by any of the nodes, facilitating load balancing and reducing access latencies.  Write requests, in turn, are propagated to the each member of the group, enforcing strong consistency of the replicas. The service can withstand a crash of all but one of the group members. These characteristics make HDNS an adequate choice in situations where read requests are predominant, and high failure resilience is required.

The code available here was developed with the H2O project.  H2O is an open-source research project of Distributed Computing Laboratory, Dept. of Math and Computer Science, Emory University. The research is supported in part by U.S. DoE grant DE-FG02-02ER25537 and NSF grant ACI-0220183.


News

19 Aug 2005

HDNS 2.0 and JNDI common 2.0 have been released.

16 Jun 2005

Jini service provider 1.0_01 and HDNS service provider 1.0_01 have been released. It is a bug-fix release.

7 Jun 2005

First launch of the website.

Highlights

Component Re-use
JNDI service providers can easily be swapped out and used in other projects thus reducing development effort and code duplication.

Ease of use
JNDI has a straightforward, generic interface that is part of the standard Java SDK. Thus it is easy to use and add JNDI in existing projects.

Integration
JNDI enables access homogenity meaning new, existing and future heterogeneous naming services can all be integrated behind one, uniform interface thus reducing complexity and increasing cross-site integration.

Federation
Both providers support federation meaning they can be linked with other JNDI supported naming services to form complex, scalable, hierarchical, distributed federations of grid information services.

URLs
Both providers support URLs meaning the resources can be easily accessed through URLs, even accross different, federated, naming services.  For example jini://myhost/ldap/n=MyLdapObject.

JNDI common overview

This package contains extensions of JNDI DirContext that may optionally be implemented by the service provider to provide extended semantics.

ExtendedDirContext
An extension of DirContext that enables set, get, increment and decrement operations on the integer attribute.

AtomicDirContext
An extension of ExtendedDirContext which enables atomic operations on the integer attribute such as: increment-and-get, decrement-and-get, get-and-increment, get-and-decrement.

ConcurrentDirContext
An extension of AtomicDirContext which enables distributed synchronization (using named locks) on the naming service.

For instance, HDNS service provider efficiently implements ExtendedDirContext and AtomicDirContext.

Jini service provider overview

Extensive JNDI support for Jini
The Jini provider extends previous work which only supported lookup operations to full support for event notification and lookup, bind, rebind, rename & unbind operations. 

Features of this provider:
  • support for attributes (implements DirContext)
  • support for events (implements EventContext)
  • able to bind any serializable Java object
Not supported:
  • advanced search using LDAP filters and Search Controls
  • creating subcontexts
  • schemas
Format of URL:
jini://host:port/object/

HDNS overview

Features of the server:
  • distributed and fault tolerant
  • uses H2O as a runtime environment (HDNS is a pluglet)
  • based on JGroups
Features of the provider:
  • support for attributes (implements DirContext)
  • support for atomic operations on integer attributes (implements AtomicDirContext)
  • able to bind any serializable Java object
Not supported:
  • events notification (should be supported in the next release)
  • advanced search using LDAP filters and Search Controls
  • creating subcontexts
  • schemas
Format of URL:
hdns://host:port[;host:port]/object

Two different distributions:
  • standalone - bundled with H2O distribution
  • plugin - requires operational H2O environment (H2O)

Documentation

Papers [bibtex]

  • Dirk Gorissen, Piotr Wendykier, Dawid Kurzyniec and Vaidy Sunderam. Integrating Grid Information Services with JNDI.  Submitted to Grid 2005 - 6th IEEE/ACM International Workshop on Grid Computing, Seattle, November, April 2005. (PDF, 263504 bytes)
  • Tomasz Tyrakowski, Vaidy Sunderam, and Mauro Migliardi. Distributed name service in Harness. In The 2001 International Conference on Computational Science (ICCS), San Francisco, USA, May 2001. (Gzipped PostScript, 10 pages, 30039 bytes)

Tutorials

API documentation


Download

Each SPI is available as a binary distribution, choose your format:

[Earlier versions | daily builds ]


Source Code

Build-it-yourself development source bundle is available (needs Apache ANT), choose your format:

Additionaly, sources and development history are available via anonymous CVS.

CVSROOT     :pserver:anonymous@dcl.mathcs.emory.edu:/cvsroot
Module software/jndi
Password (empty)

The sources may be also browsed via ViewCVS.


Related links

  • RMIX is a communication library for Java that implements and extends the RMI paradigm. RMIX is a communication substrate of H2O.
  • H2O is a metacomputing framework that uses RMIX as a communication substrate.
  • Utility Classes project contains common, general-purpose utilities that we are using in specialized projects.


Copyright (C) 2003-2005 Distributed Computing Laboratory, Emory University
Last updated: Aug 19, 2005