亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ConnectionManager適應多數據庫環境

2019-11-18 12:50:47
字體:
來源:轉載
供稿:網友

  今天企業應用環境中一般情況下要面對不止一個或一類數據庫;另一方面不同時期的不同種類的數據庫形成一個個的荒島;在java中,技術潮流傾向于不是直接操作數據庫記錄,而是通過中間層的數據庫對象持久化處理達到OO的目的。無論那一種,都要求比較輕易地面對多個數據庫連接。多個數據庫連接比較為人所熟悉的是微軟的ODBC數據源設置,除了沒有實現中間層持久化外,ODBC其實比JDBC要全面也更輕易處理。ConnectionManager是一個通過 xml設置的,類似于ODBC數據源設置的東西,通過定義dao.Connection對象,程序可以按需要以:
  
  java.sql.Connection conn  =ConnectionManager.getConnection(${connectionname});
  
  得到所需要的連接,從而簡化了在多個數據庫環境下的編輯工作。
  
  現在項目開發者面臨的經常是多個數據庫的應用,歷史的和不同部門的,有CS后臺的也有BS前臺的。各個數據庫的數據必須融匯到同一個業務邏輯中,否則就成為一個個低價值的數據孤島。應對這種需求,目前使用了兩種技術,一是數據對象化技術,實質就是在數據層和應用邏輯層中間插入一個持久對象化層,通過程序或容器使數據對象與數據記錄相一致,而應用邏輯直接訪問數據對象而不是數據庫記錄;二是通過使用全局目錄調動使用多個數據庫供數據對象化治理層使用。無論是 EJB ENTITy,還是Hibernate,抑或是我處已寫的Hanva PRocessor都是這種思路的一種體現。
  
  并不總是需要采用EJB才能治理多個數據源,何況大部分項目中采用EJB帶的是更高的成本和性能的更低效,開發工作更復雜化,甚至只是碰運氣地填代碼再發布不行再填代碼再碰運氣,(我本人很討厭這種開發感覺,所以搞了一個Hanva的小項目,除非客戶指定EJB了)。不過EJB容器中治理多個數據源的方式還是很值得學習的。大部分情況下,它是通過初始化后的數據源對象,象連接池,注冊進JNDI SPI;然后通過java.naming.Context.lookup()這個全局名稱(在JVM范圍內)。我的做法是由寫一個 ConnectionManager,它由一個xml文件定義多個數據庫連接相關的參數,在ConnectionManager初始化時讀入內存。使用時然后通過調用ConnectionManager的靜態方法getConnection (String connectionname),就可以得到指定數據庫連接。由于實際上操作數據庫連接的都是Processor和Lister兩個類,這樣,要保證連接資源的釋放也是很有把握的。依靠這個方法,就可以在輕型的應用中都可以搞妥多數據庫,使用數據對象化方式進行開發了。
  
  connections.xml定義:
  
  connection-set供ConnectionManager使用,可以按需要取用不定的多個連接定義,代碼完全不變。從而適應多數據庫的使用環境;
  ]]>
  
  uri="jdbc:Oracle:thin:@127.0.0.1:1521:dkt0" username="dcon" passWord="girlfriend" />
  
  uri="jdbc:oracle:thin:@127.0.0.1:1521:dkt0" username="erso" password="abc" />
  
  uri="jdbc:oracle:thin:@127.0.0.1:1521:dkt0" username="eef" password="qwewer" />
  
  uri="jdbc:oracle:thin:@127.0.0.1:1521:dkt0" username="system" password="manager" />
  
  ConnectionManager方法:
  
  public class ConnectionManager{
  
  private static LOGGER logger =(LOGGER)Loger.getLogger(Constants.LOGGER_DAIFU_KEY);
  
  public static synchronized java.sql.Connection getConnection() throws java.sql.SQLException{
  
  String name =Repository.getInstance().getConn();
  
  return getConnection(name);
  
  }
  
  public static synchronized java.sql.Connection getConnection(String name) throws java.sql.SQLException{
  
  if(Repository.getInstance()==null){
  
  logger.error("the repository for dao Operation has not been initialized");
  
  return null;
  
  }
  
  dao.Connection conn =Repository.getInstance().getConnection(name);
  
  String dri =conn.getDriver();
  
  java.sql.Connection cn =null;
  
  try{
  
  if(dri.equalsIgnoreCase("datasource")){
  
  javax.naming.Context initCtx = new javax.naming.InitialContext();
  
  javax.sql.DataSource ds = (javax.sql.DataSource)initCtx.lookup(conn.getUri());
  
  cn    = ds.getConnection();
  
  }
  
  else{
  
  Class.forName(dri);//no newInstance();only get class
  
  cn = java.sql.DriverManager.getConnection(conn.getUri(),conn.getUsername(),conn.getPassWord());
  
  }
  
  }catch(Exception ex){
  
  String msg ="ConnectionManager.class,conname:="+name+";dri:="+dri+";cn:="+cn+";msg:="+ex.getMessage();
  
  logger.error(msg,ConnectionManager.class);
  
  throw new java.sql.SQLException(msg);
  
  }
  
  return cn;
  
  }
  
  public static synchronized java.sql.Connection getConnection(dao.Connection conn) throws java.sql.SQLException{
  
  if(conn==null){
  
  System.out.println("the dao.Connection to getConnection is null;");
  
  return null;
  
  }
  
  String dri =conn.getDriver();
  
  java.sql.Connection cn =null;
  
  try{
  
  if(dri.equalsIgnoreCase("datasource")){
  
  javax.naming.Context initCtx = new javax.naming.InitialContext();
  
  javax.sql.DataSource ds = (javax.sql.DataSource)initCtx.lookup(conn.getUri());
  
  cn    = ds.getConnection();
  
  }
  
  else{
  
  Class.forName(dri);//no newInstance();only get class
  
  cn = java.sql.DriverManager.getConnection(conn.getUri(),conn.getUsername(),conn.getPassword());
  
  }
  
  }catch(Exception ex){
  
  String msg ="dri:="+dri+";cn:="+cn+";msg:="+ex.getMessage();
  
  logger.error(msg,ConnectionManager.class);
  
  throw new java.sql.SQLException(msg);
  
  }
  
  return cn;
  
  }
  
  public static void main(String[] args) throws Exception{
  
  if(args==null args.length<2){
  
  System.out.println(" Please input the xml and conn''s name");
  
  return;
  
  }
  
  Repository.parse(args[0]);
  
  java.sql.Connection conn =getConnection(args[1]);
  
  System.out.println(conn);
  
  }
  
  }
  
  調用時只需要
  
  java.sql.Connection conn =ConnectionManager.getConnection("connn");
  
  就可以得到指定方式的數據庫連接。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩a**中文字幕| 日韩欧美亚洲国产一区| 91久久国产精品| 欧美色视频日本高清在线观看| 欧美交受高潮1| 欧美精品手机在线| 777午夜精品福利在线观看| 欧美综合激情网| 狠狠操狠狠色综合网| 成人黄色影片在线| 精品亚洲一区二区三区| 亚洲一区二区黄| 国产97在线亚洲| 疯狂欧美牲乱大交777| 日韩亚洲欧美中文高清在线| 亚洲欧美日韩综合| 欧美高跟鞋交xxxxxhd| 国产精品电影一区| 日本精品久久久久久久| 亚洲韩国欧洲国产日产av| 欧美激情一区二区三区久久久| 国产精品成人国产乱一区| 中日韩午夜理伦电影免费| www.亚洲一二| 日韩精品在线看| 国产精品综合久久久| 国产精品日韩欧美大师| 亚洲福利视频网| 国产精品丝袜白浆摸在线| 日韩在线视频二区| 国产精品自产拍高潮在线观看| 亚洲精品视频在线观看视频| 国产精品久久9| 欧美日韩一区二区免费视频| 91沈先生在线观看| 亚洲三级av在线| 国外成人在线直播| 日韩av在线一区二区| 亚洲午夜久久久影院| 欧美高清无遮挡| 日韩欧美国产骚| 亚洲激情在线视频| 中文字幕亚洲综合| 91av中文字幕| 日韩在线播放av| 美女国内精品自产拍在线播放| 欧美资源在线观看| 中文字幕成人在线| 精品精品国产国产自在线| 国产精品91免费在线| 国产精品自拍小视频| 亚洲最大在线视频| 亚洲国产另类 国产精品国产免费| 欧美影院久久久| 欧美激情影音先锋| 欧美成人在线免费| 久久视频中文字幕| 亚洲女人天堂网| 欧美老女人性视频| 欧美国产高跟鞋裸体秀xxxhd| 综合av色偷偷网| 亚洲国内精品在线| 91国在线精品国内播放| 亚洲精品一区在线观看香蕉| 日韩精品一区二区视频| 国产精品一区二区女厕厕| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲在线视频观看| 国产精品国产自产拍高清av水多| 91香蕉嫩草神马影院在线观看| 国产97在线亚洲| 992tv成人免费影院| 亚洲图片欧美日产| 久久久伊人日本| 亚洲精品在线不卡| 精品国产电影一区| 亚洲3p在线观看| 欧美日韩裸体免费视频| 亚洲精品国产美女| 欧美黑人一区二区三区| 国产精品爱啪在线线免费观看| 日韩精品中文字幕视频在线| 国产91成人在在线播放| 亚洲国产成人爱av在线播放| 日本高清+成人网在线观看| 久久韩剧网电视剧| 九九热在线精品视频| 日韩亚洲精品视频| 欧美性猛交xxxx乱大交蜜桃| 欧美黑人xxxⅹ高潮交| 日本欧美中文字幕| 日韩免费在线视频| 疯狂蹂躏欧美一区二区精品| 日韩av免费在线播放| 日韩女优人人人人射在线视频| 久久久国产精彩视频美女艺术照福利| 国产亚洲欧美另类中文| 日韩动漫免费观看电视剧高清| 国产精品久久久久久久久久久新郎| 欧美综合在线第二页| 久久久亚洲影院| 国产成人精品免高潮在线观看| 久久99热这里只有精品国产| 国产一区欧美二区三区| 久久久久亚洲精品成人网小说| 国产免费久久av| 日韩精品在线免费| 久久97精品久久久久久久不卡| 日韩av快播网址| 中文字幕欧美日韩| 欧美激情乱人伦| 亚洲美女www午夜| 日韩最新在线视频| 97国产真实伦对白精彩视频8| 91精品久久久久久综合乱菊| 日韩欧美在线字幕| 日韩av综合中文字幕| 欧美国产一区二区三区| 国产精品天天狠天天看| 日本久久久久久久久久久| 亚洲欧美在线第一页| 欧美大人香蕉在线| 国产美女91呻吟求| 日韩成人在线免费观看| 久久成人人人人精品欧| 国产一区二区三区在线观看视频| 国模视频一区二区三区| 91成人在线视频| 国产精品久久久久福利| 91国产美女在线观看| 国产精品av在线播放| 国产一区二区av| 亚洲aa在线观看| 黑人巨大精品欧美一区二区| 精品无码久久久久久国产| 日韩成人在线免费观看| 激情亚洲一区二区三区四区| 国产一区视频在线| 成人免费福利视频| 国产精品丝袜久久久久久不卡| 精品偷拍一区二区三区在线看| 亚洲石原莉奈一区二区在线观看| 91av在线看| 精品夜色国产国偷在线| 久久久精品视频成人| 亚洲精品97久久| 国产精品福利无圣光在线一区| 久久天天躁日日躁| 国产精品久久久久久超碰| 国产精品久久久久久久天堂| 国产成人一区二区在线| 欧美激情极品视频| 欧美日韩中文字幕在线视频| 国产欧美日韩亚洲精品| 欧美日韩亚洲系列| 成人亚洲激情网| 久久五月天色综合| 在线播放日韩专区| 欧美一区二区大胆人体摄影专业网站| 国产精品精品视频一区二区三区| 欧美亚洲在线播放| 91高潮精品免费porn| 欧美高清理论片| 97在线观看免费|