在Tomcat中,看起来我必须在context.xml
和web.xml
中指定任何JNDI资源。它是否正确?有没有办法解决?我认为context.xml
中的一个配置就足够了。以下是相关文档from the Tomcat User Guide。
请注意资源名称(此处, bean / MyBeanFactory必须匹配 Web应用程序中指定的值 部署描述符。
Glassfish不需要以这种方式配置。在Glassfish中,您在服务器上配置JNDI资源(如JDBC连接池),应用程序代码通过JNDI查找获得对资源的引用。 web.xml文件中不需要额外的条目。
我关注的是:如果Glassfish拒绝这个重复的JNDI配置,但Tomcat需要它,那么我突然需要支持两个web.xml文件,具体取决于应用程序将部署到的环境。它似乎比它需要的更加复杂和繁琐。
答案 0 :(得分:0)
Glassfish支持web.xml DTD的所有元素,而resource-env-ref
就是其中之一,因此您不必维护多个副本。 Glassfish在您使用它时是否明确抛出错误?
答案 1 :(得分:0)
context.xml
文件和web.xml
是两种完全相同的方法。第一个特定于Tomcat的。第二个是标准的,由Servlet specification和其他Java EE-related specs定义。
例如,作为described in the doc,您可以使用其中任何一个将初始化参数传递给您的网络应用:
<Context> <Parameter>…
在context.xml
文件中
{li> <context-param> <param-name>…
在web.xml
文件中
同样,两者都可用于定义通过JNDI提供的资源。两者都可用于定义生命周期事件的侦听器。
有关详细信息,请参阅此问题:context.xml vs web.xml in web application
您不需要同时使用两者。但是,Tomcat documentation建议如果使用context.xml,则还要在web.xml中重复。我不明白这个建议。
那么为什么有两种方式呢?
web.xml
文件。 Tomcat为JNDI资源提供了许多无法在web.xml中指定的特定于Tomcat的选项。这些包括closeMethod,它可以在Web应用程序停止时更快地清理JNDI资源,以及控制是否为每个JNDI查找创建新资源实例的单例。要使用这些配置选项,必须在Web应用程序的元素或$ CATALINA_BASE / conf / server.xml的元素中指定资源。