[英]Using JDBC datasources from context.xml in TomEE
TomEE 是一個很棒的項目,它結合了 Tomcat 的輕量級體驗和 Java EE 的特性。 我在 context.xml 中聲明了許多 JDBC 數據源,但是當我想通過 JNDI 使用該數據源時,我得到一個異常。 那么我如何才能在 TomEE 的 context.xml 中聲明一個 JDBC 數據源
我在 context.xml 中聲明的數據源
<Resource auth="Container"
name="local_jdbc_db"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
username="user"
password="pass" />
從 JNDI 獲取數據源的代碼
Context contextoInicial = new InitialContext();
Context contexto = (Context) contextoInicial.lookup("java:comp/env");
DataSource ds= (DataSource) contexto.lookup("local_jdbc_db");
更新 致所有在使用 TomEE 時遇到這種罕見問題的人:我嘗試在 context.xml 中創建數據源並在 TomEE JAX-RS 1.5.0 版中部署,但沒有成功,它總是向我拋出空指針異常並且找不到數據源名稱。 最近我在 TomEE JAX-RS 1.6.0 版中嘗試了同樣的方法:我在 context.xml 中創建了我的數據源並使用此代碼創建了一個簡單的 servlet
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource dataSource = (DataSource) envContext.lookup("jdbc_northwind");
try (Connection conn = dataSource.getConnection();
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("select * from customers")) {
while (rs.next()) {
out.print(rs.getString("CompanyName"));
out.print("<br>");
}
}
...啟動服務器和萬歲!!!! 它顯示了我的結果!,但我有點失望,因為當我重新部署應用程序時,它向我顯示了舊的異常(未找到數據源,空指針異常)所以我嘗試了最后一件事:在 web.xml 中注冊數據源
<resource-ref>
<res-ref-name>jdbc_northwind</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
並重新啟動服務器和...它工作,重新部署應用程序並且工作得很好!,但這種行為很奇怪:在Tomcat中,我從未在web.xml中聲明我的數據源,並且數據源沒有問題。 也許是一個錯誤?
更新:已確認是一個錯誤,似乎將在 TomEE 1.6.1 中解決 更新 2:已在 TomEE 1.7.0 中解決
你看過文檔嗎? http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html此外,您能否提供您收到的異常?
因為我在這個問題上花了很多時間,我終於在閱讀該主題的手冊 (RTFM) 的 15 分鍾內找到了答案: http : //tomee.apache.org/configuring-datasources.html
tomee.xml 中數據庫資源的正確 JNDI 命名空間是:“java:openejb/Resource/...”
只是留在這里以防萬一其他人來尋找這個問題。
當我可以閱讀手冊時,我無法強調我浪費了多少時間。 哦,好吧:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.