121

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

我原以为它会使用 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>
4

1 回答 1

161

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

<resource-ref>引入了另一层间接:在web.xml中指定要使用的名称,并根据容器在特定于容器的配置文件中提供绑定。

所以这就是发生的事情:假设您要查找java:comp/env/jdbc/primaryDB名称。容器发现web.xml有一个<resource-ref>for 元素jdbc/primaryDB,因此它将查看容器特定的配置,其中包含类似于以下内容的内容:

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

最后,它返回以 . 名称注册的对象jdbc/PrimaryDBInTheContainer

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

于 2010-05-22T13:04:10.173 回答