我在本地PC上設置了Postgres 9.0.1 SQL Server和Tomcat 5.5.28。兩者都運行良好。但是我還沒有能夠配置Tomcat來通過JNDI提供DataSource。我想我已經遵循了從Tomcat頁面到這封信的JNDI HOW-TO(以及從其他頁面嘗試了其他一些如何操作)。但每次Tomcat啓動時,他會顯示錯誤消息:Tomcat 5.5在啓動時無法識別DataSource(空組件Catalina:type = DataSource)
SEVERE: Null component Catalina:type=DataSource,path=/MyApp,host=localhost,class=javax.sql.DataSource,name="jdbc/postgres"
的Tomcat仍然沒有開始,但我的數據庫的代碼將無法正常工作,因爲我InitialContext.lookup什麼也沒有結束。
Postgres的驅動程序 「PostgreSQL相關8.4-701.jdbc4.jar」 被複制到以下文件夾:
I:\ Apache軟件基金會\ Tomcat的5.5 \ common \ lib文件
I:\阿帕奇軟件基金會\ Tomcat的5.5 \的webapps \ MyApp的\ WEB-INF \ lib中
這裏是我的MyApp的/ META-INF/context.xml中:
<Context path="/MyApp" docBase="MyApp" crossContext="true" reloadable="true" debug="1">
<Resource name="jdbc/postgres"
auth="Container"
type="javax.sql.DataSource"
username="postgres"
password="xxx"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost/MyDatabase"
maxWait="1000"
maxActive="20"
maxIdle="10">
</Resource>
</Context>
這裏是我的MyApp的/ WEB-INF的摘錄/web.xml:
<web-app>
…
<resource-ref>
<description>
Postgres resource reference to a factory
</description>
<res-ref-name>
jdbc/postgres
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
</web-app>
我的項目被Eclipse部署爲WAR,Tomcat在啓動時將WAR作爲文件夾進行爆炸。現在奇怪的是:如果我不是手動啓動Tomcat,而是通過Eclipse啓動,一切正常! Tomcat沒有拿出上面的錯誤信息。 我發現Eclipse在啓動Tomcat本身時使用自己的server.xml,context.xml等,但即使將這些文件與Tomcat的常規配置文件進行比較,我發現的唯一區別是Eclipse服務器中的以下附加行.XML閉幕的「主機」標籤之前:
<Context docBase="MyApp" path="/MyApp" reloadable="true" source="org.eclipse.jst.j2ee.server:MyApp"/>
但即使是在這條線複製到Tomcat的server.xml中自己(不帶「源」 -attribute),它不不使用Eclipse工作。因此,Eclipse必須做一些「額外的事情」,這使得找到DataSource成爲可能,而「普通」的Tomcat配置卻失敗了。由於我必須將WAR部署到不同的服務器上(沒有Eclipse),因此我需要幫助才能在不使用Eclipse的情況下運行。我認爲我的代碼是可以的,因爲它可以在Eclipse的Tomcat上正常工作,但是我的Tomcat 5.5的配置必須有問題。有任何想法嗎?
只需一個附加說明:「不能創建JDBC驅動程序」錯誤不會發生在Tomcat 7上。今天,我放置了允許Tomcat 5.5的WAR文件。在Tomcat 7安裝上產生這個錯誤。在Tomcat 7中,我不需要定義全局資源的解決方法 - 看起來只是Tomcat 5.5在定義特定於應用程序的數據源時遇到了問題。 – Ray 2010-11-24 20:01:09
在您的'MyApp/META-INF/context.xml'中,'Context'元素不應該設置'path'或'docBase'集合,因爲它們是在Web應用程序級定義的。參考[Tomcat 5.5的上下文](http://tomcat.apache.org/tomcat-5.5-doc/config/context.html) – 2010-12-06 03:57:54