我正在研究Eclipse中的Java Web應用程序並將其部署到由Eclipse運行的Tomcat實例。我試圖讓這個應用程序通過JNDI Resource
元素與另一個主機上的數據庫進行通信。Eclipse:覆蓋Tomcat中的JNDI資源
context.xml文件包含在應用程序試圖連接到MySQL服務器上的本地主機上運行,就像這樣:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="log4j.configuration"
value="/path/to/installed/log4j.properties"
type="java.lang.String" />
<Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbname" maxActive="8"
validationQuery="SELECT 1" testOnBorrow="true" />
<Environment name="mykey" value="installed" type="java.lang.String" />
</Context>
這種配置,當我實際的主機上安裝它的工作原理。也就是說,它正確讀取環境值並連接到數據庫。
我也可以在單獨的主機上安裝此和編輯/etc/tomcat6/conf/Catalina/localhost/myaplication.xml
更改JDBC URL,就像這樣:
...
<Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://otherhost:3306/dbname" maxActive="8"
validationQuery="SELECT 1" testOnBorrow="true" />
...
此配置也有效。換句話說,我非常確信我的應用程序正確地使用了JNDI。
所以,現在我想在Eclipse的桌面上將它部署到Tomcat。我已經將項目以標準方式添加到了Tomcat中,並且我編輯了服務器的context.xml文件(即Eclipse在「服務器」項目中的Tomcat服務器下顯示的文件),如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Environment name="log4j.configuration"
value=C:\workspace\myapplication\src\main\resources\conf\log_to_tomcat_console_log4j.properties"
type="java.lang.String" />
<Resource name="jdbc/configDB" auth="Container" type="javax.sql.DataSource"
username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://otherhost:3306/dbname" maxActive="8"
validationQuery="SELECT 1" testOnBorrow="true" />
<Environment name="mykey" value="desktop" type="java.lang.String" />
</Context>
當我在Eclipse中重新啓動Tomcat時,日誌顯示正在正確讀取Log4J文件的路徑(因爲它開始記錄到Tomcat控制檯),我甚至發現它吐出了正確的「mykey」值。但是,初始化嘗試從configDB
讀取時失敗。起初,我認爲這是一個連接問題,但在判定出來後,我在調試器中重新啓動了Tomcat並檢查了從JNDI中讀取的DataSource;它的URL指向localhost,這意味着它使用應用程序的context.xml文件中的一個,而不是Tomcat的!
我已經嘗試了幾種方法來使這個工作,包括把這些信息放在Tomcat的server.xml文件中,但似乎沒有任何工作。或者更準確地說,它是一種類型的作品,因爲它正在讀取環境值而不是資源。
我在這裏做錯了什麼?如何讓Eclipse的Tomcat服務器覆蓋此資源?
這是一個非常漂亮的第一個問題。 –
謝謝!長時間的聽衆,第一次來電。 – jpappe
您使用Eclipse的Tomcat版本是什麼?特別是6.0.x或7.0.x?兩者在這個領域的行爲是不同的。 –