public class NonSerializableFactory
extends java.lang.Object
implements javax.naming.spi.ObjectFactory
// The non-Serializable object to bind
Object nonserializable = ...;
// An arbitrary key to use in the StringRefAddr. The best key is the jndi
// name that the object will be bound under.
String key = ...;
// This places nonserializable into the NonSerializableFactory hashmap under key
NonSerializableFactory.rebind(key, nonserializable);
Context ctx = new InitialContext();
// Bind a reference to nonserializable using NonSerializableFactory as the ObjectFactory
String className = nonserializable.getClass().getName();
String factory = NonSerializableFactory.class.getName();
StringRefAddr addr = new StringRefAddr("nns", key);
Reference memoryRef = new Reference(className, addr, factory, null);
ctx.rebind(key, memoryRef);
Or you can use the rebind(Context, String, Object) convenience
method to simplify the number of steps to:
Context ctx = new InitialContext();
// The non-Serializable object to bind
Object nonserializable = ...;
// The jndiName that the object will be bound into ctx with
String jndiName = ...;
// This places nonserializable into the NonSerializableFactory hashmap under key
NonSerializableFactory.rebind(ctx, jndiName, nonserializable);
To unbind the object, use the following code snippet:
new InitialContext().unbind(key);
NonSerializableFactory.unbind(key);
ObjectFactory,
rebind(Context, String, Object)| Modifier and Type | Field and Description |
|---|---|
private static java.util.Map |
wrapperMap |
| Constructor and Description |
|---|
NonSerializableFactory() |
| Modifier and Type | Method and Description |
|---|---|
static void |
bind(java.lang.String key,
java.lang.Object target)
Place an object into the NonSerializableFactory namespace for subsequent
access by getObject.
|
java.lang.Object |
getObjectInstance(java.lang.Object obj,
javax.naming.Name name,
javax.naming.Context nameCtx,
java.util.Hashtable env)
Transform the obj Reference bound into the JNDI namespace into the
actual non-Serializable object.
|
static java.lang.Object |
lookup(javax.naming.Name name)
Lookup a value from the NonSerializableFactory map.
|
static java.lang.Object |
lookup(java.lang.String key)
Lookup a value from the NonSerializableFactory map.
|
static void |
rebind(javax.naming.Context ctx,
java.lang.String key,
java.lang.Object target)
A convenience method that simplifies the process of rebinding a
non-serializable object into a JNDI context.
|
static void |
rebind(javax.naming.Context ctx,
java.lang.String key,
java.lang.Object target,
boolean createSubcontexts)
A convenience method that simplifies the process of rebinding a
non-serializable object into a JNDI context.
|
static void |
rebind(javax.naming.Name name,
java.lang.Object target)
A convenience method that simplifies the process of rebinding a
non-serializable object into a JNDI context.
|
static void |
rebind(javax.naming.Name name,
java.lang.Object target,
boolean createSubcontexts)
A convenience method that simplifies the process of rebinding a
non-serializable object into a JNDI context.
|
static void |
rebind(java.lang.String key,
java.lang.Object target)
Place or replace an object in the NonSerializableFactory namespce
for subsequent access by getObject.
|
static void |
unbind(javax.naming.Name name)
Remove a binding from the NonSerializableFactory map.
|
static void |
unbind(java.lang.String key)
Remove a binding from the NonSerializableFactory map.
|
public static void bind(java.lang.String key,
java.lang.Object target)
throws javax.naming.NameAlreadyBoundException
key - the name to bind target under. This should typically be the
name that will be used to bind target in the JNDI namespace, but it does
not have to be.target - the non-Serializable object to bind.javax.naming.NameAlreadyBoundException - thrown if key already exists in the
NonSerializableFactory mappublic static void rebind(java.lang.String key,
java.lang.Object target)
key - the name to bind target under. This should typically be the
name that will be used to bind target in the JNDI namespace, but it does
not have to be.target - the non-Serializable object to bind.public static void unbind(java.lang.String key)
throws javax.naming.NameNotFoundException
key - the key into the NonSerializableFactory map to remove.javax.naming.NameNotFoundException - thrown if key does not exist in the
NonSerializableFactory mappublic static void unbind(javax.naming.Name name)
throws javax.naming.NameNotFoundException
name - the name for the key into NonSerializableFactory map to remove.
The key is obtained as name.toString().javax.naming.NameNotFoundException - thrown if key does not exist in the
NonSerializableFactory mappublic static java.lang.Object lookup(java.lang.String key)
key - public static java.lang.Object lookup(javax.naming.Name name)
name - public static void rebind(javax.naming.Context ctx,
java.lang.String key,
java.lang.Object target)
throws javax.naming.NamingException
ctx - the JNDI context to rebind to.key - the key to use in both the NonSerializableFactory map and JNDI. It
must be a valid name for use in ctx.bind().target - the non-Serializable object to bind.javax.naming.NamingException - thrown on failure to rebind key into ctx.public static void rebind(javax.naming.Name name,
java.lang.Object target)
throws javax.naming.NamingException
name - the name to use as JNDI path name. The key into the
NonSerializableFactory map is obtained from the toString() value of name.
The name parameter cannot be a 0 length name.
Any subcontexts between the root and the name must exist.target - the non-Serializable object to bind.javax.naming.NamingException - thrown on failure to rebind key into ctx.public static void rebind(javax.naming.Context ctx,
java.lang.String key,
java.lang.Object target,
boolean createSubcontexts)
throws javax.naming.NamingException
ctx - the JNDI context to rebind to.key - the key to use in both the NonSerializableFactory map and JNDI. It
must be a valid name for use in ctx.bind().target - the non-Serializable object to bind.createSubcontexts - a flag indicating if subcontexts of name should
be created if they do not already exist.javax.naming.NamingException - thrown on failure to rebind key into ctx.public static void rebind(javax.naming.Name name,
java.lang.Object target,
boolean createSubcontexts)
throws javax.naming.NamingException
name - the name to use as JNDI path name. The key into the
NonSerializableFactory map is obtained from the toString() value of name.
The name parameter cannot be a 0 length name.target - the non-Serializable object to bind.createSubcontexts - a flag indicating if subcontexts of name should
be created if they do not already exist.javax.naming.NamingException - thrown on failure to rebind key into ctx.public java.lang.Object getObjectInstance(java.lang.Object obj,
javax.naming.Name name,
javax.naming.Context nameCtx,
java.util.Hashtable env)
throws java.lang.Exception
getObjectInstance in interface javax.naming.spi.ObjectFactoryobj - the object bound in the JNDI namespace. This must be an implementation
of javax.naming.Reference with a javax.naming.RefAddr of type "nns" whose
content is the String key used to location the non-Serializable object in the
NonSerializableFactory map.name - ignored.nameCtx - ignored.env - ignored.java.lang.Exception