2015-01-21 40 views
0

我有以下代碼:如果JNDI數據源連接爲空,拋出什麼異常?

static Connection getConnection() { 
     String datasourceContext = "jdbc/infy"; 
     Connection connection = null; 
     try { 
      Context initialContext = new InitialContext(); 

      DataSource datasource = (DataSource) initialContext 
        .lookup(datasourceContext); 
      if (datasource != null) { 
       connection = datasource.getConnection(); 
       connection.setAutoCommit(false); 
      } else { 
       System.out.println("Failed to lookup datasource"); 
      } 
     } catch (NamingException e) { 
      System.out.println("Failed to get context " + e); 
     } catch (SQLException e) { 
      System.out.println("Failed to get connection " + e); 
     } 
     return connection; 
    } 

我試圖讓整潔和可測試的代碼,我的問題是:如何正確處理的情況下,當數據源爲空,或/和連接爲空,不使用條件語句。我認爲最好的辦法是拋出一個異常,但是什麼樣的異常? 謝謝。

+0

你已經在捕捉你應該拋出的異常。只是不要在這裏抓到他們。讓調用者處理它們。 – EJP 2015-01-21 06:43:40

回答

1

如果未找到數據源,JNDI查找將拋出NameNotFoundException。 AFAIK它不應該返回null,所以我沒有看到在空檢查點。

你可以調整你關於NamingException的錯誤信息,因爲它目前是誤導性的,NameNotFoundException也是一個NamingException - 儘管你應該做的只是重新拋出你得到的異常。我只是將其更改爲未經檢查的異常而不是檢查,如

catch (NamingException e) { 
    throw new IllegalStateException("Failed with JNDI lookup of " 
     + datasourceContext, e); 
} 

並以類似的方式與SQLException。

相關問題