Tomcat中的JNDI资源

时间:2011-06-28 13:35:33

标签: tomcat configuration glassfish jndi

在Tomcat中,看起来我必须在context.xmlweb.xml中指定任何JNDI资源。它是否正确?有没有办法解决?我认为context.xml中的一个配置就足够了。以下是相关文档from the Tomcat User Guide

  

请注意资源名称(此处,   bean / MyBeanFactory必须匹配   Web应用程序中指定的值   部署描述符。

Glassfish不需要以这种方式配置。在Glassfish中,您在服务器上配置JNDI资源(如JDBC连接池),应用程序代码通过JNDI查找获得对资源的引用。 web.xml文件中不需要额外的条目。

我关注的是:如果Glassfish拒绝这个重复的JNDI配置,但Tomcat需要它,那么我突然需要支持两个web.xml文件,具体取决于应用程序将部署到的环境。它似乎比它需要的更加复杂和繁琐。

2 个答案:

答案 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,您可以使用其中任何一个将初始化参数传递给您的网络应用:

    {li> <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中重复。我不明白这个建议。

那么为什么有两种方式呢?

  • 标准方式很有用,因为它是标准的。您可以将Tomcat替换为another Servlet container,而无需更改web.xml文件。
  • 特定于Tomcat的方法很有用,因为它允许您以标准方式执行更多操作。例如,这句话来自Tomcat 8.0.35 JNDI Resources HOW-TO
  

Tomcat为JNDI资源提供了许多无法在web.xml中指定的特定于Tomcat的选项。这些包括closeMethod,它可以在Web应用程序停止时更快地清理JNDI资源,以及控制是否为每个JNDI查找创建新资源实例的单例。要使用这些配置选项,必须在Web应用程序的元素或$ CATALINA_BASE / conf / server.xml的元素中指定资源。