关于JNDI在DNS,文件系统等方面的应用不是很了解。只见过系统中通过JNDI的Context获取在J2EE容器中配置的数据源。操作层面一只都会,但一只无法理解J2EE容器是如何把数据源交给应用系统的。
今天跟了下InitialContext的源码,终于搞清楚其中的来龙去脉了。
第一步,weblogic配置数据源。
第二部,写个简单的web项目,通过JNDI API访问数据源。
代码写在了 index.jsp 中
第三部,在weblogic中部署JndiPro
第四部,访问应用系统
JNDI示例完成,实验成功。
下面我们来跟踪应用系统是如何从weblogic获取数据源的。
1.我们调用的是InitialContext的无参构造函数。
2.进入init(null)方法。
3.进入Hashtable getInitialEnvironment(Hashtable env)
env为null。所以只能通过hlper.getJndiProperties来获得JNDI参数。
4.进入getJndiProperties方法。
到这一步我们可以大致才出来,JNDI的参数是从系统参数中获取的。
5.验证系统参数中是否有JNDI需要的参数,在index.jsp中加入如下代码
打印结果
到这一步我们就知道Context的实现类是WLInitialContextFactory。而数据源就是weblogic的这个实现类传给我们的。