JNDI学习小结
学习J2EE的时候,学到了JNDI,这是我第一次学习所以要总结一下,要不然就会像手中的沙子,不知不觉地流走了
概念
JNDI是Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI),是Java的一个目录服务应用程序界面(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。我们在使用过程中可以直接用一个对象名点(.)出方法来就是因为这个服务
JNDI是一种查找服务,用于查找以下内容:
- Web应用环境变量
- EJBs和他们的环境变量
- 通过DAtaSources的数据库连接池
- JMS目标和连接工厂
注意
– 不要把JDNI当做数据库使用
–JNDI 和JDBC非常不同:
<1>jdbc是数据库中间代理商为了是java连接数据库而定的一个协议 或者说是方法
通过JDBC-ODBC的方法进行数据库连接,是连接一次创建一次的做法
<2> JNDI 是一种命名树的方式,把需要的类都列成目录的样式,需要哪个只要根据命名直接去 调用,
当你要操作数据库的时候用JDBC
而操作命名服务用JNDI 的Java Database Connectivity ,它由一组类和接口组成,
Java应用程序开发人员使用它来访问数据库和执行SQL语句 JNDI(Java Name Directory Interface)
PS:上述区别来自——沧海一刀博客
作用
解耦
解耦怎么理解呢?举个例子,之前我们用不用JNDI的话,用JDBC URL连接数据库,假设连接的是MySQL数据的话,我们要这么写
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver",
true, Thread.currentThread().getContextClassLoader());
conn=DriverManager.
getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");
......
conn.close();
} catch(Exception e) {
e.printStackTrace();
} finally {
if(conn!=null) {
try {
conn.close();
} catch(SQLException e) {}
}
}
对MySQL JDBC驱动程序进行编码,通过URL连接对应的数据库。这样没有问题,但是如果我们换了数据库呢?也要引入别的数据库的驱动程序类,如果数据库服务器的名称,密码变了呢?毫无疑问,JDBC URL也要改,如此这般,甚是麻烦!
所以为了方便,也为了更深的解耦,在JBoss 的 D:\jboss420GA\docs\examples\jca 文件夹下面,有很多不同数据库引用的数据源定义模板。将其中的 mysql-ds.xml 文件Copy到你使用的服务器下,如 D:\jboss420GA\server\default\deploy。
修改 mysql-ds.xml 文件的内容,使之能通过JDBC正确访问你的MySQL数据库,定义了一个名为MySqlDS的数据源,其参数包括JDBC的URL,驱动类名,用户名及密码等。
之后在程序中引用数据源就可以实现解耦了。
小结
对于JNDI我是初次理解,需要借助别人的博客,百度百科,维基百科等等才能触及皮毛,不过随着我用java越来越多,学的内容也越来越深,一定会更加理解和清楚的!