ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用环境命名上下文来解决log中“无法定位资源引用 jdbc/oradb”的info

用环境命名上下文来解决log中“无法定位资源引用 jdbc/oradb”的info

原创 Linux操作系统 作者:echo_huang 时间:2019-04-05 17:42:07 0 删除 编辑
名词:  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博客 ” ,链接:http://blog.itpub.net/69355/viewspace-112693/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2004-02-02

  • 博文量
    300
  • 访问量
    230221