熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

檢測你數據庫連接的物理狀態

2013-11-23 18:49:25  來源: Java核心技術 

  檢測你數據庫連接的物理狀態
  
  ZDNet China
  
  //
  
  URL:
  
  創建連接
  
  
  
  Java JDBC API各種類的一個基石是javasqlConnection類很多問題都同其復用共用和驗證相關對連接的驗證在實時的應用程序中尤其重要因為它們必須無故障運行或者將故障率降至最低
  
  
  
  事實上在很多情況下都可能產生連接的丟失(例如由於數據庫的崩潰或者由於某些網絡問題的存在)不幸的是標准的Java API並沒有提供任何方法來檢測連接的物理狀態所以在每種特定的情況下都需要一種解決方法現在讓我們來看看解決這個問題的兩種方法第一種方法是使用軟件制造商專用的API第二種方法是使用一種檢測失敗查詢(testfail query)的方法
  
  
  
  
  
  
  
  創建連接
  
  
  
  在使用任何SQL陳述式之前應用程序必須要先連接到數據庫建立連接的一種方法是使用javasql工具包裡的連接工廠(connection factory)——DriverManagergetConnection()但是建立連接的首選方式是使用javaxsqlDataSourcegetConnection()你應該在對象每次請求進行連接的時候才使用這個工廠方法而不是在創建了連接之後將這個連接保存在對象裡下面是這個方法的一個例子
  
  
  
  void foo(){
  
  //
  
  Connection conn = myDataSourcegetConnection();
  
  PreparedStatement ps = connprepareStatement();
  
  //
  
  }
  
  
  
  此外一個實現DataSource接口的類能夠使用命名服務來注冊並使用JNDI API來訪問DriverManager連接工廠和DataSource的巨大不同之處在於DataSource能夠允許你控制連接的建立和使用
  
  
  
  
  
  
  
  連接錯誤的問題
  
  
  
  當你的應用程序嘗試使用一個已經同數據庫斷開的連接時你會碰到一個像下面這樣的異常
  
  
  
  javasqlSQLException: Io exception: The Network Adapter could not establish the connection(lo異常網絡適配器無法建立連接)
  
  
  
  其結果是你的SQL查詢會執行失敗由於沒有哪個API能夠確定一個到數據庫的連接是否失效因此你就只有在碰到SQL異常的時候才知道這個連接已經失效了如果一個異常是同一個已斷開的連接相對應的那麼你就必須要調整這個應用程序這樣它才能夠嘗試重新建立連接並重新執行查詢任務很顯然這種處理數據庫連接的混亂商務邏輯使得代碼更容易出錯而且難以管理
  
  
  
  
  
  
  
  信賴軟件制造商的API
  
  
  
  
  
  信賴軟件制造商的API
  
  
  
  處理連接斷開的一種方法是使用驅動程序專用的API你可以使用這個API來建立到數據庫的連接現在讓我們來看看Oracle的JDBC APIOracleConnectionCacheImpl這個類會實現javaxDataSource接口並在你每次請求的時候驗證一下連接此外它還能夠通過緩沖隨後請求的連接來重復使用這個連接換句話說如果你關閉了數據庫然後嘗試使用一個連接你就會得到一個明確闡明了原因的SQL異常看看Listing A裡面有數據源用法的一個例子
  
  
  
  驗證連接
  
  另一個解決方案是你自己進行連接驗證你可以編寫一個連接工廠讓其將連接返回給請求者之前檢測連接的情況將驗證機制從連接工廠裡抽象出來是一個很好的代碼編寫慣例要實現這一目的你就要應用GoF策略模式它會引入一個負責進行連接驗證的接口
  類圖表
  
  
  
  Listing B裡的AbstractDataSource類提供了DataSource接口的基礎實現這樣就為設置和訪問連接的屬性包括JDBC驅動程序類URL用戶名和密碼提供了便利的方法
  
  
  
  這個類的確切實現有JdbcDataSource(Listing C)和ValidDataSource(Listing D)Listing C裡的類為每個請求都創建了一個Connection對象Listing E裡的類通過使用ConnectionValidator從而提供了連接驗證的能力
  
  
  
  Listing F裡的SqlConnectionValidator是這個接口的簡單實現在這個接口裡一個快速的SQL查詢會被執行以驗證你認為需要進行驗證的連接你的這一目的是通過調用validateConnection(Connection conn)方法來實現的它會在碰到任何連接問題的時候給出一個SQL異常
  
  
  
  
  
  
  
  驗證的好處
  
  
  
  無論你選擇使用哪種方法建立一個有效的數據庫連接都是極其重要的尤其是在處理關鍵的實時應用程序的時候雖然定制連接驗證這種方式能夠為你提供更好的靈活性和API的獨立性但是同使用軟件制造商所提供的API相比而言它會降低整體的性能你必須決定增強可控制性所帶來的好處同相應所增加的復雜性和代價相比是否值得
  

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25802.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.