web.xml中的资源引用用于什么?

问题描述 投票:108回答:1

我只是想知道何时/为什么要在<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>
java web.xml resource-ref
1个回答
149
投票

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

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

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

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

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

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.