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

我只是想知道什么时候/为什么要在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> 

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

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

所以发生了什么 :假设你想查找java:comp/env/jdbc/primaryDB名字。 容器发现web.xml有一个用于jdbc/primaryDB<resource-ref>元素,因此它将查看特定于容器的configuration,其中包含类似于以下内容的内容:

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

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

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

Interesting Posts