Page 3 of 5

Figure 1. Screen shots of the server console after running the ADDSerialize example
Instead of storing the entire serialized state of an object, you can store a reference to that object instead. JNDI's javax.naming.Reference class records address information about objects not directly bound to the directory service. The reference to an object contains
the following information:
javax.naming.RefAddr objects that represents the addresses
The javax.naming.RefAddr abstract class, seen in Figure 2 below, contains information indicating the ways in which you can contact the object (e.g.,
via a location in memory, a lookup on another machine, etc.) or recreate it with the same state. The class defines an association
between content and type. The content (an object) stores information required to rebuild the object and the type (a string)
identifies the purpose of the content.

Figure 2. The relation between a Reference, RefAddr, Type, and Content
RefAddr also overrides the java.lang.Object.equals(Object obj) and java.lang.Object.hashcode() methods to ensure that two references are equal if the content and type are equal. RefAddr has two concrete subclasses: javax.naming.StringRefAddr, which stores strings, and javax.naming.BinaryRefAddr, which stores an array of bytes. For example, a string reference address could be an IP, URL, hostname, or something similar.
Consider the example of a referenceable Apartment class. The ADDReference.java example creates a few instances of Apartment and stores them in the server. What happens internally? Since the object is referenceable, a reference is stored and not
the serialized object. When the example tries to look up an apartment belonging to styagi, it gets a reference from the server that contains information about the factory class needed, the apartment size, and its
location. It then requests that the factory create an Apartment object with the right size and location and return that object. All this happens transparently to the user.
Context ctx = new InitialContext(env);
ctx.bind("apartment=styagi,ou=JavaObjects,o=myserver.com",new Apartment("studio","Mill Complex"));
ctx.bind("apartment=mojoe,ou=JavaObjects,o=myserver.com", new Apartment("2 room","Farm House Apartments"));
ctx.bind("apartment=janedoe,ou=JavaObjects,o=myserver.com",new Apartment("1 room","Pond Side"));
ctx.bind("apartment=rogerp,ou=JavaObjects,o=myserver.com", new Apartment("3 room","Mill Complex"));
ctx.bind("apartment=jamesm,ou=JavaObjects,o=myserver.com", new Apartment("studio","Fox Hill Apartments"));
ctx.bind("apartment=paulh,ou=JavaObjects,o=myserver.com", new Apartment("duplex","Woodbridge"));
ctx.bind("apartment=vkevink,ou=JavaObjects,o=myserver.com",new Apartment("1 room","Woodgate Apartments"));
Apartment apt = (Apartment)ctx.lookup("apartment=styagi,ou= JavaObjects,o=myserver.com");
System.out.println(apt);
The Apartment class would look something like:
binding issueBy Anonymous on November 3, 2009, 3:02 pmDoes anyone know how you can bind to the directory using JNDI, but without knowing the credentials needed for authentication? In other words, I can't assume that...
Reply | Read entire comment
Nice ArticleBy Anonymous on October 11, 2009, 12:35 pmSplendid work..Thanks.. :D
Reply | Read entire comment
great job, this article has been very helpful.By Anonymous on October 6, 2009, 2:53 pmgreat job, this article has been very helpful.
Reply | Read entire comment
Good oneBy Anonymous on August 18, 2009, 10:34 amGood job.
Reply | Read entire comment
Well written articleBy Anonymous on June 23, 2009, 11:22 amThanks a lot!
Reply | Read entire comment
View all comments