名词: java:comp/env 环境命名上下文(environment naming context(ENC))
WebSphere Application Server v5 的应用中,当lookup数据源时,日志中出现如下信息,但数据源却能够使用,这是怎么回事?
ConnectionFac I J2CA0122I: 无法定位资源引用 jdbc/oradb,因此使用下列缺省值:[Resource-ref settings]
res-auth: 1 (APPLICATION)
res-isolation-level: 0 (TRANSACTION_NONE)
res-sharing-scope: true (SHAREABLE)
res-resolution-control: 999 (undefined)
解答:
WebSphere Application Server v5 中,所有连接器的访问都是通过J2C实现的。数据库访问提供了对 JCA 1.0 规范的完整支持,例如,对连接共享的支持,这是通过支持部署描述符中资源引用(resource-ref)的res-sharing-scope标记来实现的。
当创建数据源时,会指定一个的JNDI名称,它可以被其它组件(例如servlet等)用来查找(lookup)该数据源。
但是,通常情况下,建议使用带有java:comp/env前缀的间接名称。这样可以在连接管理的运行环境中把资源引用(resource- ref)的特定属性与应用结合起来,可以更好地基于设置res-auth、res-isolation-level、res-sharing-scope 和 res-resolution-control来管理资源。
当然,直接使用数据源的JNDI名称也是支持的。这种情况下,会使用默认的资源引用属性。您会在日志文件中看到如下类似信息:
J2CA0122I: 无法定位资源引用 jdbc/testdb,因此使用下列缺省值:[Resource-ref settings]
res-auth: 1 (APPLICATION)
res-isolation-level: 0 (TRANSACTION_NONE)
res-sharing-scope: true (SHAREABLE)
res-resolution-control: 999 (undefined)
也就是说,当上述信息出现时,说明应用中是通过数据源的JNDI名称直接查找(lookup)数据源的,并且使用了上述默认属性。如果不想使用默认属性或不想输出上述提示信息,则需要在部署描述符(web.xml)中定义该数据源的资源引用
例:
jdbc/oradb
javax.sql.DataSource
Application
Shareable
在Websphere中双击打开web.xml文件,选中“引用”选项卡,再选”资源“选项卡,接着“添加”上述信息即可,代码则自动生成。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
入口告诉 servlet 容器,部署人员要在组件命名上下文(component naming context) 中设置一个叫做 jdbc/mydatasource 的资源。组件命名上下文由前缀 java:comp/env/ 表示,所以完全限定的本地资源名称是:java:comp/env/jdbc/mydatasource.
这只定义了到外部资源的本地引用,还没有创建引用指向的实际资源。(在 Java 语言中,类似的情况可能是: 声明了一个引用,比如 Object foo,但是没有把 foo 设置成实际引用任何 Object。)
部署人员的工作就是创建 DataSource(或者是创建一个 Object 对象,让 foo 指向它,在我们的 Java 语言示例中就是这样)。
每个容器都有自己设置数据源的机制。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相应的,应用中需要使用间接的JNDI查找,即在java: comp/env上下文中查找。
例:
DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/oradb");
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69355/viewspace-112693/
,如需转载,请注明出处,否则将追究法律责任。