在上一篇配置Tomcat数据源时遗留一个问题,就是在web.xml中的<resource-ref>配置可有可无,但是为什么?在网上搜索了许久,正面直接了当回答问题的没有几个,无奈读取英文文档,在”JNDI Resources How-To“一章节有所提及,下面将我的理解记录如下。 使用JNDI配置数据源,可以在web.xml里进行定义,例如<resource-ref>,也可以在Context下进行定义,例如<Resource/>,如下配置。 <resource-ref> <res-ref-name> jdbc/EmployeeDB </res-ref-name> <res-type> javax.sql.DataSource </res-type> <res-auth> Container </res-auth> </resource-ref>
OK,说到这儿,我的用词是可以,也可以。就是按照文档说明,这两个是二选一的。那么应该有人立马就反驳了,在Context下配置<Resource />,不在web.xml里加<resource-ref>可以,反之则不可行的,应该会出现”Cannot create JDBC driver of class for connect URL null“吧! 没错!确实会报错。可是,Why?先来看一段文档中的说明。讲的大概意思是,如果没有更进一步的设置需要,那么Tomcat会使用web.xml中的配置信息来创建资源啦!我们上面提到的报错,恰恰不巧,在配置数据源时需要指定driverClassName吧,需要指定最大等待时间吧,等等!那么web.xml里的配置项已经无法满足配置数据源的需求了,所以,正如下面的描述,一些特别的选项不能在web.xml配置,“转战”Context。在Context里配置<Resource/>才是有效的!
那么我之前一直有个疑惑,既然Context配置数据源就可以工作了,为什么Tomcat的文档里的示例还指导我们在web.xml加段配置呢?不累吗?我想文档里有句话应该可以给我一个合理交代了吧!“to document”->用文件说明,我个人认为在web.xml里的<resource-ref>配置,仅仅起到说明作用,说明这个Web应用引用了哪些资源!
|
|