学习JNDI时的一点感受。
关于JNDI,较为学术向的解释:
1 | J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。 |
在IBM DeveloperWork我看到了这样一个例子:
https://www.ibm.com/developerworks/cn/java/j-jndi/index.html
大致的内容就是,Dolly在编写JDBC程序时,将数据库驱动、连接池的数量等写死在程序中。
实际部署时,情况发生了变化,但是程序却很难修改。
文章中还提到,J2EE 规范把职责委托给多个开发角色:编写程序的人,打包为程序包的人,部署人员和运维人员。
(实际开发中,1、2的活经常一个人干,3、4则另一个人干, 就是我们熟悉的程序员和运维。)
J2EE中定义了JNDI规范,它的一个最简单的实例,上述例子中也有给出:
1 | <resource-ref> |
这是一段写在web.xml中的代码,它的作用是构建一个数据源:
1 | java:comp/env/jdbc/mydatasource |
以便在稍后的编码中使用它。
在查找参考资料时,我见到过一些早期的加载Spring框架的applicationcontext.xml的办法,就是在web.xml中用类似手段定义好一个资源,初始化Spring时,把它作为参数传入进去。
在培训班学习时,我一度认为J2EE是简陋的、原生的、被淘汰的技术。
在我的了解中,现在没有人直接用JSP、Servlet、JDBC开发Web应用,取而代之的是SpringMVC,分层开发,开源框架。
web.xml的作用仅仅是配置拦截器,以及初始化Spring容器,而JDBC和JPA早已不见踪影,EJB也仅仅存在于各种数年前的文档中。
在看完这篇文章后,我发现之前的认识过于浅薄。
J2EE并不是只有Servlet和JSP,EJB实际上是一套类似Spring的IOC/DI容器,它甚至也有AOP的功能。
JNDI接口就是一个用于解耦的规范,将部署人员和运维人员才需要配置的东西独立出去。上文中1和2只需要在程序内定义JNDI格式的数据源,而3和4根据文档配置这个数据源就能使用了。
那么问题来了,为什么Java会有同人逼死官方的现象出现呢……
学习JNDI时的一点感受。