2016-06-28 82 views
1

我正在執行部署到TomEE 7的Java EE Web應用程序,我需要從tomee.xml獲取數據源。 tomee.xml位於WEB-INF目錄下,並具有以下內容:如何從TomEE 7中的資源獲取數據源?

<?xml version="1.0" encoding="UTF-8"?> 
<tomee> 
    <Resource id="rss_db_datasource" type="javax.sql.DataSource"> 
     JdbcDriver = org.hsqldb.jdbcDriver 
     JdbcUrl = jdbc:hsqldb:file:/rss_db 
     UserName = sa 
     Password = 
    </Resource> 
</tomee> 

我想使用此代碼注入數據源:

@Resource(name="rss_db_datasource", type = javax.sql.DataSource.class) 
    private DataSource dataSource; 

當我試圖從數據源連接我得到NullPointerException。有人知道如何解決這個問題嗎?

謝謝

+0

你正在嘗試注入數據源的組件(servlet,ejb等)? –

+0

servlet。已經解決了這個問題。謝謝 – VadOs

回答

1

META-INF - > context.xml的

<?xml version='1.0' encoding='utf-8'?> 
<Context> 
    <Resource name="rss_db_datasource" type="javax.sql.DataSource" 
       username="sa" password="" 
       driverClassName="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:file:D:/rss_db" 
      /> 
</Context> 

,然後讓數據源對象

 Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
     dataSource = (DataSource) envCtx.lookup("rss_db_datasource"); 
1

設置JTAManaged爲true。

<?xml version="1.0" encoding="UTF-8"?> 
<tomee> 
    <Resource id="rss_db_datasource" type="javax.sql.DataSource"> 
     JdbcDriver = org.hsqldb.jdbcDriver 
     JdbcUrl = jdbc:hsqldb:file:/rss_db 
     UserName = sa 
     Password = 
     JtaManaged true 
    </Resource> 
</tomee> 

,並且確保在persistence.xml中的jta-data-source設置正確。

+0

感謝您的答案,但我使用的jdbc,我想tomee.xml中配置,甚至在resources.xml中更好,並獲取DataSource對象 – VadOs

+0

看起來像我做的一切正確。通過@Resource註解獲取DataSource對象時發生該問題 – VadOs

1

推薦的方式來配置資源tomee使用

  1. tomee.xml但這一個需要在tomee_base/conf /或
  2. 您可以在WEB-INF中使用resources.xml(只需將根標記更改爲「resources」而不是「tomee」)。

錯誤可能是文件的本地化。

旁註:

你不需要在注入點來設置type = javax.sql.DataSource.class,因爲它是字段類型。