2011-11-28 69 views
12

這是我的context.xml 文件如何從tomcat webapp中的context.xml文件獲取資源?

... 
<Resource auth="Container" 
      driverClass="net.sourceforge.jtds.jdbc.Driver" 
      type="com.jolbox.bonecp.BoneCPDataSource" 
      idleMaxAge="240" 
      idleConnectionTestPeriod="60" 
      partitionCount="3" 
      acquireIncrement="1" 
      maxConnectionsPerPartition="10" 
      minConnectionsPerPartition="3" 
      statementsCacheSize="50" 
      releaseHelperThreads="4" 

      name="jdbc/MyDatasource" 
      username="my_username" 
      password="my_password" 
      factory="org.apache.naming.factory.BeanFactory" 
      jdbcUrl="jdbc:jtds:sqlserver://localhost:12345/my_database" 
/> 
... 

我已經使用ServletContext.getResource(java.lang.String)與資源(「JDBC/MyDatasource」)的名稱試過,但Tomcat的抱怨名稱不以開頭'/'。我也嘗試使用「/ jdbc/MyDatasource」,但是這一次它返回null。

我主要需要的JDBCURL執行的連接檢查與數據庫服務器(查看服務器是否處於聯機狀態和運行)。

回答

15

關鍵詞是:JNDI。 context.xml中的資源不是「系統資源」,而是JNDI資源。 試試這個:

InitialContext ic = new InitialContext(); 
// that's everything from the context.xml and from the global configuration 
Context xmlContext = (Context) ic.lookup("java:comp/env"); 
DataSource myDatasource = (DataSource) xmlContext.lookup("jdbc/MyDatasource"); 

// now get a connection to see if everything is fine. 
Connection con = ds.getConnection(); 
// reaching this point means everything is fine. 
con.close(); 
+2

謝謝你的回答。我不知道如何繼續接受答案,因爲你們都非常幫助我......我想我會接受你的回答,鼓勵你(因爲你是一個新的用戶)繼續爲這個社區做出貢獻.. –

+0

@IgorPopov嗯,我有同樣的問題,但只是我想從context.xml中讀取其他參數:如maxTotal,maxIdle等。我怎麼才能真正閱讀那些我可以在控制檯中打印它們?我正在使用相同的方法。是否有任何方法從context.xml中讀取這些參數? –

+0

@HarshvardhanSolanki不是我所知道的。但你應該問問題作爲自己的問題。如果他們不回答你的問題,請務必鏈接到現有的問題,所以答案看你已經試圖自己解決它。 –

10

你應該可以用下面的代碼來訪問數據源:

Context initialContext = new InitialContext(); 
Context envContext = (Context)initialContext.lookup("java:/comp/env"); 
DataSource ds = (DataSource)envContext.lookup("jdbc/MyDatasource"); 
+0

非常感謝您的幫助:)看起來我第一次在錯誤的地方搜索。我在tomcat文檔中找到了一個代碼示例:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html –

+3

在tomcat中,您應該將「java:/ comp/env」更改爲「java:comp/env」 – lmiguelmh