Methods Summary |
---|
public java.lang.Object | getObjectInstance(java.lang.Object obj, javax.naming.Name name, javax.naming.Context nameCtx, java.util.Hashtable environment)create the object instance from the factory
// name to lookup in the external factory
String jndiLookupName = "";
String jndiFactoryClass = null;
String bindName = null;
// get the target initial naming context and the lookup name
Reference ref = (Reference) obj;
Enumeration addrs = ref.getAll();
while (addrs.hasMoreElements()) {
RefAddr addr = (RefAddr) addrs.nextElement();
String prop = addr.getType();
if (prop.equals("jndiName")) {
bindName = (String)addr.getContent();
}
else if (prop.equals("jndiLookupName")) {
jndiLookupName = (String) addr.getContent();
}
else if (prop.equals("jndiFactoryClass")) {
jndiFactoryClass = (String) addr.getContent();
}
}
if (bindName == null) {
throw new NamingException("JndiProxyObjectFactory: no bindName context info");
}
ProxyRefAddr contextAddr = (ProxyRefAddr)ref.get(bindName);
Hashtable env = null;
if (contextAddr == null ||
jndiFactoryClass == null ||
(env = (Hashtable)(contextAddr.getContent())) == null) {
throw new NamingException("JndiProxyObjectFactory: no info in the reference about the target context; contextAddr = " + contextAddr + " env = " + env + " factoryClass = " + jndiFactoryClass);
}
// Context of the external naming factory
Context context = (Context)contextMap.get(bindName);
if (context == null) {
synchronized (contextMap) {
context = (Context)contextMap.get(bindName);
if (context == null) {
context = loadInitialContext(jndiFactoryClass, env);
contextMap.put(bindName, context);
}
}
}
if (context == null)
throw new NamingException("JndiProxyObjectFactory no InitialContext" + jndiFactoryClass);
// use the name to lookup in the external JNDI naming context
try {
return context.lookup(jndiLookupName);
} catch (NameNotFoundException e) {
throw new ExternalNameNotFoundException(e);
}
|
private javax.naming.Context | loadInitialContext(java.lang.String factoryClass, java.util.Hashtable env)load the context factory
Object factory = ResourceInstaller.loadObject(factoryClass);
if (factory == null) {
System.err.println("Cannot load external-jndi-resource " +
"factory-class '" + factoryClass + "'");
return null;
} else if (! (factory instanceof
javax.naming.spi.InitialContextFactory)) {
System.err.println("external-jndi-resource factory-class '"
+ factoryClass + "' must be of type "
+ "javax.naming.spi.InitialContextFactory");
return null;
}
Context context = null;
try {
context = ((InitialContextFactory)factory).getInitialContext(env);
} catch (NamingException ne) {
System.err.println("Exception thrown creating initial context " +
"for external JNDI factory '" +
factoryClass + "' " + ne.getMessage());
}
return context;
|
protected static javax.naming.Context | removeInitialContext(java.lang.String jndiName)
return (Context) contextMap.remove(jndiName);
|