Optional: Configure JNDI caches JNDI
caching can greatly increase performance of JNDI lookup operations. By default,
JNDI caching is enabled. In most situations, this default is the desired behavior.
However, in specific situations, use the other JNDI cache options.
Objects
are cached locally as they are looked up. Subsequent lookups on cached objects
are resolved locally. However, cache contents can become stale. This situation
is not usually a problem, since most objects you look up do not change frequently.
If you need to look up objects which change relatively frequently, change
your JNDI cache options.
JNDI clients can use several properties to
control cache behavior.
You can set properties:
- From the command line by entering the actual string value. For example:
java -Dcom.ibm.websphere.naming.jndicache.maxentrylife=1440
- In a jndi.properties file by creating a file named jndi.properties as
a text file with the desired properties settings. For example:
...
com.ibm.websphere.naming.jndicache.cacheobject=none
...
Include the file as the beginning of the classpath, so that the
class loader loads your copy of jndi.properties before any other
copies.
- Within a Java program by using the PROPS.JNDI_CACHE* Java constants,
defined in the com.ibm.websphere.naming.PROPS file. The constant
definitions follow:
public static final String JNDI_CACHE_OBJECT =
"com.ibm.websphere.naming.jndicache.cacheobject";
public static final String JNDI_CACHE_OBJECT_NONE = "none";
public static final String JNDI_CACHE_OBJECT_POPULATED = "populated";
public static final String JNDI_CACHE_OBJECT_CLEARED = "cleared";
public static final String JNDI_CACHE_OBJECT_DEFAULT =
JNDI_CACHE_OBJECT_POPULATED;
public static final String JNDI_CACHE_NAME =
"com.ibm.websphere.naming.jndicache.cachename";
public static final String JNDI_CACHE_NAME_DEFAULT = "providerURL";
public static final String JNDI_CACHE_MAX_LIFE =
"com.ibm.websphere.naming.jndicache.maxcachelife";
public static final int JNDI_CACHE_MAX_LIFE_DEFAULT = 0;
public static final String JNDI_CACHE_MAX_ENTRY_LIFE =
"com.ibm.websphere.naming.jndicache.maxentrylife";
public static final int JNDI_CACHE_MAX_ENTRY_LIFE_DEFAULT = 0;
To use the previous properties in a Java program, add the property
setting to a hashtable and pass it to the InitialContext constructor as follows:
java.util.Hashtable env = new java.util.Hashtable();
...
// Disable caching
env.put(PROPS.JNDI_CACHE_OBJECT, PROPS.JNDI_CACHE_OBJECT_NONE); ...
javax.naming.Context initialContext = new javax.naming.InitialContext(env);
Optional: Specify the name syntax INS
syntax is designed for JNDI clients that need to interoperate with CORBA
applications. This syntax allows a JNDI client to make the proper mapping
to and from a CORBA name. INS syntax is very similar to the JNDI syntax with
the additional special character, dot (.). Dots are used to delimit the id
and kind fields in a name component. A dot is interpreted literally when it
is escaped. Only one unescaped dot is allowed in a name component. A name
component with a non-empty id field and empty kind field is represented with
only the id field value and must not end with an unescaped dot. An empty name
component (empty id and empty kind field) is represented with a single unescaped
dot. An empty string is not a valid name component representation.
JNDI
name syntax is the default syntax and is suitable for typical JNDI clients.
This syntax includes the following special characters: forward slash (/) and
backslash (\). Components in a name are delimited by a forward slash. The
backslash is used as the escape character. A forward slash is interpreted
literally if it is escaped, that is, preceded by a backslash. Similarly, a
backslash is interpreted literally if it is escaped.
Most WebSphere
applications use JNDI to look up EJB objects and do not need to look up objects
bound by CORBA applications. Therefore, the default name syntax used for JNDI
names is the most convenient. If your application needs to look up objects
bound by CORBA applications, you may need to change your name syntax so that
all CORBA CosNaming names can be represented.
JNDI clients can set the
name syntax by setting a property. The property setting is applied by the
initial context factory when you instantiate a new java.naming.InitialContext
object. Names specified in JNDI operations on the initial context are parsed
according to the specified name syntax.
You can set the property:
- From a command line, enter the actual string value. For example:
java -Dcom.ibm.websphere.naming.name.syntax=ins
- Create a file named jndi.properties as a text file with the desired
properties settings. For example:
...
com.ibm.websphere.naming.name.syntax=ins
...
Include the file at the beginning of the classpath, so that the class
loader loads your copy of jndi.properties before any other copies.
- Use the PROPS.NAME_SYNTAX* Java constants, defined in the com.ibm.websphere.naming.PROPS file,
in a Java program. The constant definitions follow:
public static final String NAME_SYNTAX =
"com.ibm.websphere.naming.name.syntax";
public static final String NAME_SYNTAX_JNDI = "jndi";
public static final String NAME_SYNTAX_INS = "ins";
To use the previous
properties in a Java program, add the property setting to a hashtable and
pass it to the InitialContext constructor as follows:
java.util.Hashtable env = new java.util.Hashtable();
...
env.put(PROPS.NAME_SYNTAX, PROPS.NAME_SYNTAX_INS); // Set name syntax to INS
...
javax.naming.Context initialContext = new javax.naming.InitialContext(env);