JNDI是什么?

0 篇文章 0 订阅

JNDI

用在数据库连接JDBC这块,首先说一下,不适用JNDI,单单使用JDBC连接数据库的代码如下:

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并进行SQL操作 */
    ...... 
    conn.close(); 
}catch(Exception e) { 
    e.printStackTrace(); 
}  
finally { 
  if(conn!=null) { 
  try { 
      conn.close(); 
  }catch(SQLException e) {} 
 }

那么这种情况出现的问题是,如果数据库连接出现修改数据源的一些参数,例如数据库服务器名称MyDBServer、用户名和口令都可能需要改变,导致JDBC的URL需要修改。或者数据库改用产品等。只能去源代码中进行修改,可是最好的方式是,程序员只是修改这些参数就好,但不能是去源代码中去修改,这样也没有保证系统的安全性。
所以提出JNDI。
用了JNDI之后:
首先,在J2EE容器中配置JNDI参数,定义一个数据源,也是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。
具体操作:
1.配置数据源
在一个.xml文件中设置数据源的相关参数

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <datasources>
 3 <local-tx-datasource>
 4     <jndi-name>MySqlDS</jndi-name>
 5     <connection-url>jdbc:mysql://localhost:3306/lw</connection-url>
 6     <driver-class>com.mysql.jdbc.Driver</driver-class>
 7     <user-name>root</user-name>
 8     <password>rootpassword</password>
 9 <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
10     <metadata>
11        <type-mapping>mySQL</type-mapping>
12     </metadata>
13 </local-tx-datasource>
14 </datasources>

定义一个MySqlDS的数据源,其参数包括JDBC的URL,驱动类名,用户名及密码等。
2.在程序中引用数据源:

Connection conn=null;
try {
  Context ctx=new InitialContext();
  Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用数据源
  DataSource ds=(Datasource)datasourceRef;
  conn=ds.getConnection();
  /* 使用conn进行数据库SQL操作 */
  ......
  c.close();
}
catch(Exception e) {
  e.printStackTrace();
}
finally {
  if(conn!=null) {
    try {
      conn.close();
    } catch(SQLException e) { }
  }
}

总结:

使用JNDI,在系统部署后,如果数据库的相关参数变更,只要需要重新配置.xml文件的参数,只要保证数据源的名称不变,那么程序源代码就无需修改。
由此可见,JNDI避免了程序与数据库之间的额紧耦合,使应用更加易于配置,易于部署。

详细请点击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值