Hi guys there's an example of how to bound an object along with its codebase in the sun jndi tutorial
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
/**
* Demonstrates how to bind a Serializable object to a directory
* with a codebase.
* (Use Unbind to remove binding.)
*
* usage: java SerObjWithCodebase <codebase URL>
*/
class SerObjWithCodebase {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("usage: java SerObjWithCodebase <codebase URL>");
System.exit(-1);
}
String codebase = args[0];
// Set up environment for creating initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
try {
// Create the initial context
DirContext ctx = new InitialDirContext(env);
// Create object to be bound
Flower f = new Flower("rose", "pink");
// Perform bind and specify codebase
ctx.bind("cn=Flower", f, new BasicAttributes("javaCodebase", codebase));
// Check that it is bound
Flower f2 = (Flower)ctx.lookup("cn=Flower");
System.out.println(f2);
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
System.out.println("Operation failed: " + e);
}
}
}
So in therory you should be able to retrieve an object in through doing a look up, and then cast it... but in this approach the client that performs the look up shouldn't need to include the class definition of the object that is being retrieved, because it's being included in the code base of the context, but then how do you avoid compilation errors such:
SerObjWithCodebase.java:73: cannot resolve symbol
symbol : class Flower
location: class SerObjWithCodebase
Flower f2 = (Flower)ctx.lookup("cn=Flower");
in the client code that is attepting to perform the look up?... is there a work-around for this problem? please let me know, thanks in advance.
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
/**
* Demonstrates how to bind a Serializable object to a directory
* with a codebase.
* (Use Unbind to remove binding.)
*
* usage: java SerObjWithCodebase <codebase URL>
*/
class SerObjWithCodebase {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("usage: java SerObjWithCodebase <codebase URL>");
System.exit(-1);
}
String codebase = args[0];
// Set up environment for creating initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
try {
// Create the initial context
DirContext ctx = new InitialDirContext(env);
// Create object to be bound
Flower f = new Flower("rose", "pink");
// Perform bind and specify codebase
ctx.bind("cn=Flower", f, new BasicAttributes("javaCodebase", codebase));
// Check that it is bound
Flower f2 = (Flower)ctx.lookup("cn=Flower");
System.out.println(f2);
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
System.out.println("Operation failed: " + e);
}
}
}
So in therory you should be able to retrieve an object in through doing a look up, and then cast it... but in this approach the client that performs the look up shouldn't need to include the class definition of the object that is being retrieved, because it's being included in the code base of the context, but then how do you avoid compilation errors such:
SerObjWithCodebase.java:73: cannot resolve symbol
symbol : class Flower
location: class SerObjWithCodebase
Flower f2 = (Flower)ctx.lookup("cn=Flower");
in the client code that is attepting to perform the look up?... is there a work-around for this problem? please let me know, thanks in advance.