使用 JNDI 得到数据源
来源:互联网 发布:linux 反向映射 编辑:程序博客网 时间:2024/05/22 02:25
现在我们重新来看一下 Dolly 的情况。在其简单的 Web 应用程序中,她直接从应用程序代码中使用了一个 JDBC 连接。参见清单 1,我们可以看出,Dolly 显式地把 JDBC 驱动程序、数据库 URL 以及她的用户名和口令编码到了 servlet 中:
典型(但是不好)的 JDBC 用法
Connection conn=null;try { Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader()); conn=DriverManager.getConnection("jdbc:mysql://dbserver?user=dolly&password=dagger"); /* use the connection here */ c.close();} catch(Exception e) { e.printStackTrace();} finally { if(conn!=null) { try { conn.close(); } catch(SQLException e) {} }}
如果不用这种方式指定配置信息,Dolly(以及她的同伴们)使用 JNDI 来查找 JDBC DataSource
会更好一些,如清单 2 所示:
清单 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) { } }}
为了能够得到 JDBC 连接,首先要执行一些小的部署配置,这样我们才可以在本地组件的 JNDI 下文中查找 DataSource
。这可能有点烦琐,但是很容易学。不幸的是,这意味着即使是为了测试组件,开发人员也必须涉足部署人员的领地,并且还要准备配置应用服务器。
配置 JNDI 引用
为了让 JNDI 解析 java:comp/env/jdbc/mydatasource
引用,部署人员必须把 <resource-ref>
标签插入 web.xml 文件(Web 应用程序的部署描述符)。<resource-ref>
标签的意思就是“这个组件依赖于外部资源”。清单 3 显示了一个示例:
<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>
<resource-ref>
入口告诉 servlet 容器,部署人员要在 组件命名上下文(component naming context) 中设置一个叫做jdbc/mydatasource
的资源。组件命名上下文由前缀 java:comp/env/
表示,所以完全限定的本地资源名称是:java:comp/env/jdbc/mydatasource
.
这只定义了到外部资源的本地引用,还没有创建引用指向的实际资源。(在 Java 语言中,类似的情况可能是: <resource-ref>
声明了一个引用,比如Object foo
,但是没有把 foo
设置成实际引用任何 Object
。)
部署人员的工作就是创建 DataSource
(或者是创建一个 Object
对象,让 foo
指向它,在我们的 Java 语言示例中就是这样)。每个容器都有自己设置数据源的机制。例如,在 JBoss 中,是利用服务来定义数据源(请参阅 $JBOSS/server/default/deploy/hsqldb-ds.xml,把它作为示例),它指定自己是DataSource
的全局 JNDI 名称(默认情况下是 DefaultDS
)。在创建资源之后,第三步仍然很关键:把资源连接或者绑定到应用程序组件使用的本地名称。在使用 Web 应用程序的情况下,是使用特定于供应商的部署描述符扩展来指定这个绑定,清单 4 中显示了一个这样的例子。(JBoss 用称为jboss-Web.xml
的文件作为特定于供应商的 Web 应用程序部署描述符。)
<resource-ref> <res-ref-name>jdbc/mydatasource</res-ref-name> <jndi-name>java:DefaultDS</jndi-name></resource-ref>
这表明应该将本地资源引用名称(
jdbc/mydatasource
)映射到名为 java:DefaultDS
的全局资源。如果全局资源名称出于某种原因发生了变化,而应用程序的代码无需变化,那么只需修改这个映射即可。在这里,有两个级别的间接寻址:一个定义并命名资源(java:DefaultDS
),另一个把特定于本地组件的名称( jdbc/mydatasource
)绑定到命名的资源。(实际上,当您在 EAR 级别上映射资源时,可能还存在第三级别的间接寻址。)- 使用 JNDI 得到数据源
- hibernate使用jndi数据源
- hibernate使用jndi数据源
- 使用JNDI配置数据源
- java 使用JNDI数据源
- tomcat配置jndi+spring使用jndi数据源
- tomcat配置jndi+spring使用jndi数据源
- Spring 使用JNDI获取数据源
- 使用spring配置jndi数据源
- birt使用JNDI配置数据源
- Tomcat使用数据源(JNDI/直接使用)
- 什么是jndi,什么时候使用jndi,tomcat配置jndi,spring使用jndi数据源
- jndi数据源
- jndi 数据源
- JNDI数据源
- 数据源-JNDI
- Tomcat5.5中使用JNDI数据源
- tomcat中通过JNDI数据源配置使用
- 别不把自己当有钱人——让白领族成为百万富翁族的六大理财秘籍
- 生活英语
- Eclipse 代码注释模版设置( Code Templates)
- 敏捷开发用户故事系列之十一:CSDN博客用户故事分析
- http://blog.csdn.net/linyajun/article/details/3729121
- 使用 JNDI 得到数据源
- C语言课程设计——学生学籍管理系统
- poj 3020 Antenna Placement(二分图匹配)
- 努力吧,现在也不晚
- Android应用程序Zipalign化 -- 如何让Android应用程序更有效率的执行
- 在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色
- android 自定义日历控件(有图有真相)
- poj 1924 The Treasure (bfs+地图预处理)
- ArcEngine中动态移动点的效果