Xml 中的 resource-ref 用于什么?

我只是想知道什么时候/为什么你会在你的 web.xml文件中定义一个 <resource-ref>元素?

我本以为它会在 Web/app 服务器中使用 JNDI 进行定义,然后在 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>
123873 次浏览

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

<resource-ref> introduces another layer of indirection: you specify the name you want to use in the Xml, and, depending on the container, provide a binding in a 特定容器 configuration file.

那么 事情是这样的: 假设您想查找 java:comp/env/jdbc/primaryDB名称。容器发现 Xml有一个用于 jdbc/primaryDB<resource-ref>元素,因此它将查看特定于容器的配置,其中包含类似于下面的内容:

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

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

的思想是,在 Xml中指定资源具有将 开发商角色与 部署器角色分离的优势。换句话说,作为一个开发人员,您不必知道您所需要的资源在生产环境中实际被调用,而作为部署应用程序的人员,您将有一个很好的名称列表来映射到实际的资源。