簡體   English   中英

在 TomEE 中使用來自 context.xml 的 JDBC 數據源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM