2011-06-28 154 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的元素中指定資源。