在编写JDBC数据源的WEB程序时,避免不了要遇到以下几个问题
- 开发,测试和生产环境的不同 ,从而 需要一个新的 JDBC URL ,并且要在开发测试和生产阶段进行独立部署
- 数据库实例的改变,比如从MySql到Oracle。这时不仅是JDBC URL的不同,更重要的是还需要使用不同的驱动程序。
-
当应用服务器采用集群时,应用程序占用的数据库的链接会成倍增加(采用数据库链接池).而数据库所提供链接数是很有限的,所以唯一的选择就是改变应用程序链接池的最大链接数量,在集群数量增长或是应用程序复制到另一个集群时在重复一次这样的工作.
代码和外部资源之间的紧密耦合是潜在的问题.而JNDI在J2EE中的角色是"交换机"----J2EE组件在运行时间接的查找资源,其他组件和服务的通用机制.
清单 2. 使用 JNDI 得到数据源
Connection conn=null;
try {
Context ctx=new InitialContext();
Object datasourceRef=ctx.lookup("java:comp/env/jdbc/mydatasource");
DataSource ds=(Datasource)datasourceRef;
Connection c=ds.getConnection();
/* use the connection */
c.close();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
if(conn!=null) {
try {
conn.close();
} catch(SQLException e) { }
}
}
清单 3. resource-ref 入口
<resource-ref>
<description>Dollys DataSource</description>
<res-ref-name>jdbc/mydatasource</res-ref-name>
<res-ref-type>javax.sql.DataSource</res-ref-type>
<res-auth>Container</res-auth>
</resource-ref>
源文档 <http://www.ibm.com/developerworks/cn/java/j-jndi/index.html>
清单 4. 用特定于供应商的部署描述符将资源绑定到 JDI 名称
<resource-ref>
<res-ref-name>jdbc/mydatasource</res-ref-name>
<jndi-name>java:DefaultDS</jndi-name>
</resource-ref>
源文档 <http://www.ibm.com/developerworks/cn/java/j-jndi/index.html>
有一个古老的计算机科学笑话:每个编程问题都可以仅仅用一个抽象层(或间接的)来解决。在 J2EE 中,JNDI 是把 J2EE 应用程序合在一起的粘合剂,但还没有紧到无法让人很容易地把它们分开并重新装配。JNDI 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序。这是 J2EE 的承诺,而且经过一些计划和预先考虑,这个承诺是完全可以实现的。实际上,它要比许多人想像的容易得多。
源文档 <http://www.ibm.com/developerworks/cn/java/j-jndi/index.html>