2011-06-28 119 views
0

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

注意,资源名称(这里, 豆/ MyBeanFactory必须在Web应用程序 部署描述符中指定的 值相匹配。

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

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

回答

0

Glassfish支持web.xml DTD的所有元素,而resource-env-ref就是其中之一,因此您不必维护多个副本。当您使用Glassfish时,Glassfish会明确抛出错误吗?

+0

不确定 - 仍然有困难实际上是让它在Tomcat中正常工作 - 然后我将重新测试Glassfish。我仍然觉得Tomcat需要这个额外的配置,而Glassfish却不需要。 – Vinnie

+0

额外配置的东西是规范的一部分:我想glassfish选择没有它。 tomcat的默认上下文植根于java:comp/env:并不完全确定你可以在不改变代码的情况下以你想要的风格进行绝对的JNDI查找。 – Femi

0

context.xml文件和web.xml是完成大致相同的事情的两种方式。第一个是Tomcat特有的。第二个是标准的,由Servlet specification和其他Java EE-related specs定义。

例如,described in the doc,您可以使用这些来初始化参数传递到你的Web应用程序:在context.xml文件中web.xml文件

  • <Context> <Parameter>…
  • <context-param> <param-name>…

类似地,两者都可用于定义通过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提供了许多用于不能在web.xml指定JNDI资源Tomcat的特定选项。这些包括closeMethod,可以在Web应用程序停止时加快JNDI资源的清除速度,并且可以控制是否为每个JNDI查找创建资源的新实例。要使用这些配置选项,必须在Web应用程序的元素或$ CATALINA_BASE/conf/server.xml的元素中指定资源。