什么是web.xml中的resource-ref用于?

时间:2010-05-22 11:54:52

标签: java web.xml resource-ref

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

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

资源引用定义对我来说似乎有点多余,我无法想到什么时候它可能有用。例如:

<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>

1 个答案:

答案 0 :(得分:147)

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

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

所以这里发生了什么:假设您要查找java:comp/env/jdbc/primaryDB名称。容器发现 web.xml 具有<resource-ref>的{​​{1}}元素,因此它将查看特定于容器的配置,其中包含类似于以下内容的内容:

jdbc/primaryDB

最后,它返回以<resource-ref> <res-ref-name>jdbc/primaryDB</res-ref-name> <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name> </resource-ref>

名称注册的对象

想法是指定 web.xml 中的资源具有将开发人员角色与部署者<分开的优势/ strong>角色。换句话说,作为开发人员,您不必知道在生产中实际调用了所需的资源,并且作为部署应用程序的人员,您将拥有一个很好的名称列表以映射到实际资源。