Fescar RM Proxy建立過程

2021-09-19 18:34:48 字數 4005 閱讀 1970

這篇文章的主要是目的是解釋清楚datasourceproxy、connectionproxy、statementproxy幾個proxy**各自的實現以及相互之間的聯絡。

希望通過這篇文章,能夠解釋清楚乙個核心問題,就是上述的三個proxy是如何實現**並同時保證和原有的jdbc的資料訪問邏輯保持不變。

當然,我個人覺得只有理清楚了三個**的實現機制以後,才能更好的理解rm的工作原理。

}說明:

說明:

說明:

datasourceproxy原始碼介紹

public abstract class abstractdatasourceproxy implements datasource 

public druiddatasource gettargetdatasource()

@override

public t unwrap(classiface) throws sqlexception

@override

}@override

public printwriter getlogwriter() throws sqlexception

@override

public void setlogwriter(printwriter out) throws sqlexception

@override

public void setlogintimeout(int seconds) throws sqlexception

@override

public int getlogintimeout() throws sqlexception

@override

public logger getparentlogger() throws sqlfeaturenotsupportedexception

}

public class datasourceproxy extends abstractdatasourceproxy implements resource 

public datasourceproxy(druiddatasource targetdatasource, string resourcegroupid)

private void assertmanaged()

}public connection getplainconnection() throws sqlexception

public string getdbtype()

@override

public connectionproxy getconnection() throws sqlexception

@override

public connectionproxy getconnection(string username, string password) throws sqlexception

@override

public string getresourcegroupid()

@override

public string getresourceid()

}

說明:

說明:

connectionproxy原始碼介紹

public abstract class abstractconnectionproxy implements connection 

public datasourceproxy getdatasourceproxy()

public connection gettargetconnection()

public string getdbtype()

@override

public statement createstatement() throws sqlexception

@override

public preparedstatement preparestatement(string sql) throws sqlexception

@override

public callablestatement preparecall(string sql) throws sqlexception

}

public class connectionproxy extends abstractconnectionproxy 

@override

public void commit() throws sqlexception catch (transactionexception e)

try

targetconnection.commit();

} catch (throwable ex) else

}report(true);

context.reset();

} else

}private void register() throws transactionexception

@override

public void rollback() throws sqlexception }

context.reset();}}

說明:

說明:

public abstract class abstractstatementproxyimplements statement 

public abstractstatementproxy(connectionproxy connectionproxy, t targetstatement)

throws sqlexception

public abstractconnectionproxy getconnectionproxy()

public t gettargetstatement()

public string gettargetsql()

}

public class statementproxyextends abstractstatementproxy

throws sqlexception

@override

public connectionproxy getconnectionproxy()

@override

public resultset executequery(string sql) throws sqlexception

}, sql);

}@override

public int executeupdate(string sql) throws sqlexception

}, sql);

}@override

public boolean execute(string sql) throws sqlexception

}

說明:

建立主鍵 建立外來鍵 建立約束

建立主鍵 三種方法 建立學生表 第一種 create table student sno char 5 primary key,學號 可以直接指定主鍵 sname char 20 not null,姓名 s char 3 not null,性別 sage integer not null,年齡 sd...

Oracle建立儲存過程 建立函式 建立包

一 oracle建立儲存過程 1 基本語法 create orreplace procedureupdate emp sal name inout type,name inout type,is begin endupdate emp sal 2 寫乙個簡單的例子修改emp表的ename欄位 cre...

Oracle建立儲存過程 建立函式 建立包

一 oracle建立儲存過程 1 基本語法 create or replace procedure update emp sal name in out type,name in out type,is begin end update emp sal 2 寫乙個簡單的例子修改emp表的ename欄...