2013-04-29 40 views
0

我正在一個webapp,我手動創建我的數據源。 (另請參閱我的其他問題爲什麼:How to use Spring to manage connection to multiple databases),因爲我需要連接到其他數據庫(dev,prod,qa,test)。Java數據源,如何處理它

現在我已經解決了它來選擇和切換數據庫之間。但是,如果用戶註銷我的應用程序。他想嘗試連接到其他數據庫。他仍然連接到相同的數據源,因爲在運行時myDs不爲空。如何在用戶註銷時正確處理此數據源?我不希望用戶在每次查詢數據庫時都創建數據源。

private DataSource createDataSource(Environment e) { 
    OracleDataSource ds = null;   
    String url = null; 
    try { 
     if (myDs != null) { 
      logger.info("myDs connection: " + etmetaDs.getConnection().getMetaData().getURL()); 
      url = myDs.getConnection().getMetaData().getURL(); 
     } 
    } catch (SQLException exc) { 
     // TODO Auto-generated catch block 
     exc.printStackTrace(); 
    } 

    if (myDs == null) {    
     try { 
      ds = new OracleDataSource(); 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
     } 

     ds.setDriverType("oracle.jdbc.OracleDriver"); 
     ds.setURL(e.getUrl()); 
     try { 
      Cryptographer c = new Cryptographer(); 
      ds.setUser(c.decrypt(e.getUsername())); 
      ds.setPassword(c.decrypt(e.getPassword())); 
     } catch (CryptographyException ex) { 
      logger.error("Failed to connect to my environment [" + e.getName() + "]"); 
      ex.printStackTrace(); 
      return null; 
     } 
     logger.info("Connecting to my environment [" + e.getName() + "]"); 

     myDs = ds; 
    } else if (url.equals(e.getUrl())) { 

    } else { 

    } 

    return myDs; 
} 
+0

您是否嘗試過使用Singleton作爲數據源? – Crowlix 2013-04-29 08:50:10

回答

1

如果您在閱讀Reza的回答時遇到了其他問題,可以查看如何創建多個DataSource。
我認爲這裏的問題不是數據源,而是你在代碼中存儲信息的方式。我想你的etmetaDs是共享的,但所有的用戶,所以當用戶註銷(=設置爲空)不是好的選擇。

你需要做的是維護每個用戶的連接狀態。當用戶註銷時,您可以重置狀態以便在下次連接時獲得新連接。

更新:有很多方法可以實現這一點。我在這裏舉一個我想象的例子,但你必須適應你的需求。假設你有保存信息的UserData對象:

public class UserData 
{ 
String id; 
String name; 
String database; 
} 

你可能在你的應用程序與數據庫的一個空的第一個項目的名稱(開發,測試,...)下拉。當用戶選擇一個數據庫時,您將獲得與createDataSource()的連接。如果它已經存在,則返回DataSource,否則您創建一個新的。當用戶斷開連接時(或用戶登錄時),將數據庫設置爲「」以強制他在下拉列表中選擇數據庫。沒有必要重置數據源。

+0

我該如何做到這一點?我已經搜索,但還沒有找到任何方法,我可以(重新)設置數據源的狀態 – 8bitboy 2013-04-30 07:16:05

+0

謝謝,將看看這個。 – 8bitboy 2013-04-30 12:14:56