使用JNDI时不是需要设定一个叫Context.INITIAL_CONTEXT_FACTORY的参数吗。而这个参数正好上jndi的实现入口。在j2ee规范中有很多地方使用的抽象工厂来得到具体的实现如:jndi,jdbc,jaxp等等。而抽象工厂需要一个得到“一组”实现的一个入口,而在jndi中,你设定INITIAL_CONTEXT_FACTORY的值就是这个入口类的全名,其必须实现InitialContextFactory接口,该接口有个方法Context getInitialContext(Hashtable<?,?> environment),jndi实现必须实现该方法以得到其上下文的“根”,而Context则代表的是“树”上的一个“节点”。现在回到你的问题"它是如何知道要在这些XML中取出数据",那么既然tomcat要引入jndi,则必须按照jndi规范实现jndi,所以tomcat按照自己的规则读取了你上面所说的xxx.xml里面的数据,存储在内存中,并且可以通过tomcat提供的途径访问这些数据,那么怎么访问这些数据呢,使用tomcat按照jnci规范实现的类,于是你便可以使用标准的jndi接口访问这些数据呢,那么怎样才能得到tomcat的实现呢,就是通过设定INITIAL_CONTEXT_FACTORY参数,将INITIAL_CONTEXT_FACTORY参数设定为tomcat的实现类,那么通过jndi标准接口得到的就是tomcat的实现了,既然使用的是tomcat的实现,那么他自己当然知道怎么访问其自己先前在内存中存储的资源了。大概流程是这样子的,当然可能有些细节不是很准确或有误(有些也是猜的:)),但是应该不影响理解。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货