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进行数据库连接