站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题关于JNDI联系J2EE原理的问题,问题内详

关于JNDI联系J2EE原理的问题,问题内详

摘要: 关于JNDI联系J2EE原理的问题,问题内详


我参考了很多网上的帖子,明白JNDI需要使用一个Provider来提供相对应的目录命名服务功能,比如文件FS命名包和DNS包,但是对于Tomcat这类的容器如何使用JNDI取出WEB.XML中的节点,如何在XXXXX.XML获得全局数据库的配置,它是如何知道要在这些XML中取出数据,我可以自己设置JNDI指向的XXXX.XML的内容吗?
望高手解答,谢谢!!


使用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的实现,那么他自己当然知道怎么访问其自己先前在内存中存储的资源了。

大概流程是这样子的,当然可能有些细节不是很准确或有误(有些也是猜的:)),但是应该不影响理解。


还有你的“我可以自己设置JNDI指向的XXXX.XML的内容吗”这个问题,正如上面所说,从哪个文件读取数据是tomcat实现jndi规范时自己处理的,你要想改变这个文件名,除非是tomcat实现jndi接口时提供了这个功能,反正jndi规范是不提供的


可以参考http://java.sun.com/products/jndi/tutorial/TOC.html


也就是说具体的实现还是用指定的工厂类的接口,而若我们要实际制定一种JNDI服务,或者说读取我们自己规定的xxxx.XML,必须自己建立一个特别的工厂类.谢谢了:)


↑返回目录
前一篇: 请高手帮我看下数据库哪里出了问题,在线等 ... ...
后一篇: 刚看完java2入门经典,jsp方面看什么书入门较好?