Hi Guys,
I setup a tomcat 7.0.67 web server and add two JNDIs resources into
conf/server.xml which are dependent that one should been loaded first before
another.
Seems it doesn't work if I change their appearance order in server.xml. After
checking the source code and I found that the loading order of JNDI resource
are decided by the "HashCode" of resource name.
In org.apache.catalina.deploy.NamingResources.java
/** * The resource references for this web
application, keyed by name. */ private HashMap<String, ContextResource>
resources = new HashMap<String, ContextResource>();
==> new LinkedHashMap<String, ContextResource>();
And in org.apache.naming.NamingContext.java
public NamingContext(Hashtable<String,Object> env, String name)
throws NamingException { this.bindings = new
HashMap<String,NamingEntry>(); ==> this.bindings = new
LinkedHashMap<String,NamingEntry>(); ... }
/** * Builds a naming context using the given environment. */
public NamingContext(Hashtable<String,Object> env, String name,
HashMap<String,NamingEntry> bindings) throws NamingException {
this(env, name); this.bindings = bindings;
==> if (bindings != null) this.bindings.putAll(bindings); }
After codes changed as above, the JNDI resources could be loaded as desired by
their insertion order.
I wonder whether such modifications could be put into formal release, that It
could be convenient for the user like me who have the several dependent JNDI
objects.
Thank you very much,
Jessie