OK,又到了喜闻乐见的Java基础知识环节
What’s JNDI
JNDI,即Java Naming and Directory Interface
,直译为 Java命名与目录接口
Java
表明了这个玩意儿大概率只在Java中存在
Interface
表明了这个玩意儿是一个 Interface(接口),Interface 的作用是什么?模拟一种规范
Naming and Directory
这个的直译其实有些不对,Naming
确实是命名,但是英文中的Directory
其实更偏向于电话簿,地址簿类似的东西
JNDI
这里最重要的概念是Naming and Directory
,最重要的定位是Interface
可能很啰嗦,但是这就是他最原始,也是最本质的定义,如果你想知道他是什么,就是
Interface
,用来干什么,就是Naming and Directory
How to use JNDI
网上会有很多栗子,来解释,或者带人来感受JNDI的使用
这里也贴出来,读者可以感受感受
Non-JNDI
本栗子通俗的讲就是:使用JDBC来连接数据库和执行SQL语句,它最大的特点是通过java
程序去找数据库驱动,然后来连接数据库。
是java亲自去连数据库。
代码如下
|
|
这是传统派的做法,也是以前非Java程序员(如Delphi、VB等)常见的做法。这种做法一般在小规模的开发过程中不会产生问题,只要程序员熟悉Java语言、了解JDBC技术和MySQL,可以很快开发出相应的应用程序。
没有JNDI的做法存在的问题:
1、数据库服务器名称MyDBServer 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;
2、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;
3、随着实际使用终端的增加,原配置的连接池参数可能需要调整;
4、……
程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。
With-JNDI
用了JNDI之后的做法:
首先,在在J2EE容器中配置JNDI参数,定义一个资源源(在这里是数据源)给这个数据源设置一个名称(记住,后面要考)
然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。
具体操作如下,以JBoss为例(也可以Tomcat
,配置到Tomcat
的context.xml
)
在JBoss
的 D:/jboss420GA/docs/examples/jca
文件夹下面,有很多不同数据库引用的数据源定义模板。将其中的 mysql-ds.xml
文件Copy到你使用的服务器下,如 D:/jboss420GA/server/default/deploy
。
修改 mysql-ds.xml
文件的内容,使JBOSS能根据配置通过JDBC正确访问你的MySQL数据库
没错,这一步应该是JBOSS来连接而非java程序
为什么是应该,笔者咩有实验嘞,根据众多文章的理解是这样
|
|
Benefits of With-JNDI
直接使用JDBC或者通过JNDI引用数据源的编程代码量相差无几,但是现在的程序可以不用关心具体JDBC参数了。
在系统部署后,如果数据库的相关参数变更,只需要重新配置
mysql-ds.xml
修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。由此可见,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。
Re-understand the JNDI
核心点是:把资源取个名字,再根据名字来找资源
-
如何给资源取名字?通过配置文件,通过RMI,Whatever.
-
重点是什么?是给当前应用服务器所管理的所有资源一个唯一的标识,资源可以包括包括数据库,网页,文件,连接池等等。
JNDI提供了一种统一的方式,可以用在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,同时返回相关服务所必须的信息。
JNDI
主要有两部分组成:应用程序编程接口和服务供应商接口。
- 应用程序编程接口提供了Java应用程序访问各种命名和目录服务的功能
- 服务供应商接口提供了任意一种服务的供应商使用的功能。
!!!!
JNDI(Java Name Directory Interface)是为应用服务器管理资源所设置的目录样式的唯一标识(就像是电话簿一样),数据库、网页、文档等
!!!!
Ref
https://blog.csdn.net/belongtocode/article/details/106327415
https://blog.csdn.net/wn084/article/details/80729230
https://blog.csdn.net/ibigboy/article/details/84309064
https://blog.csdn.net/ibigboy/article/details/84308580
https://www.cnblogs.com/dion-90/articles/9029581.html
—TODO—
JNDI Tomcat 或者 JBOSS 配置后,跟踪程序流,查看是否是由Tomcat/JBOSS进行数据库连接