【问题标题】:What is resource-ref in web.xml used for?web.xml 中的资源引用是做什么用的?
【发布时间】:2011-02-22 16:44:00
【问题描述】:

我只是想知道您何时/为什么要在您的 web.xml 文件中定义 <resource-ref> 元素?

我原以为它会使用 JNDI 在您的 Web/应用服务器中定义,然后在您的 Java 代码中查找 JNDI 引用?

resource-ref 定义对我来说似乎有点多余,我想不出它什么时候有用。示例:

<resource-ref>
  <description>Primary database</description>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
</resource-ref>

【问题讨论】:

    标签: java web.xml resource-ref


    【解决方案1】:

    您始终可以直接通过容器中配置的 JNDI 名称来引用应用程序中的资源,但如果您这样做,本质上就是将容器特定名称连接到您的代码中。这有一些缺点,例如,如果您以后出于某种原因想要更改名称,则需要更新所有应用程序中的所有引用,然后重新构建和重新部署它们。

    &lt;resource-ref&gt; 引入了另一层间接:在 web.xml 中指定要使用的名称,并根据容器在 container- 中提供绑定具体的配置文件。

    所以会发生什么:假设您要查找java:comp/env/jdbc/primaryDB 名称。容器发现 web.xml 有一个用于 jdbc/primaryDB&lt;resource-ref&gt; 元素,因此它将查看容器特定的配置,其中包含类似于以下内容:

    <resource-ref>
      <res-ref-name>jdbc/primaryDB</res-ref-name>
      <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
    </resource-ref>
    

    最后返回jdbc/PrimaryDBInTheContainer名下注册的对象。

    想法是在 web.xml 中指定资源的优点是将 developer 角色与 deployer 角色。换句话说,作为开发人员,您不必知道在生产环境中实际调用的所需资源是什么,而作为部署应用程序的人,您将有一个很好的名称列表来映射到实际资源。

    【讨论】:

    • 恕我直言,它不仅仅是分离角色。这个想法是,您不能假设在服务器上可以使用 jndi 名称,因此您需要一种方法将应用程序中使用的名称映射到部署者选择的“真实”JNDI 名称。
    • 这一定是基本的,因为我用谷歌找不到它,但是如果我想查找“java:comp/env/jdbc/primaryDB”,那么为什么是 res-ref-名称“jdbc/primaryDB”?
    • 据我所知,“jndi-name”元素不是标准 web.xml 的一部分,而是特定供应商部署描述符的一部分。
    • @RaviParekh,他提到了“特定于容器的配置”,它可能是 jboss-web.xml 或 weblogic.xml 或任何其他供应商特定的部署描述符文件
    • 我们可以把它和 tomcat 联系起来吗?我的意思是在tomcat的context.xml和web.xml中的resource-ref中定义的数据源
    猜你喜欢
    • 1970-01-01
    • 2017-04-30
    • 2011-01-19
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多