思考如下代碼:
在應用服務器端 應用的OPEN事件中:
//設定好SQLCA的各項 屬性
。。。。。
connect usi ng sqlca;
在應用服務器端有一遠程物件,其 中有一段代碼:
datastore dsUser
dsUser = create datastroe
dsUser.datao b j e c t=’dw_us er’
dsUser.SetTransObject (sqlca)
dsUser.Retrieve()
MessageBox(‘資訊’,dsUser.R owCount())
在預覽dw_user資料視窗 時,共有100行資料,那么上述代碼運行結果如何呢?結果顯示, dsUser.RowCount() = 0 !
原來, 每當一個客戶端程式與應用服務器建立一連接時,應用服務器即為此 連接啟動一獨立的會話(SESSION),此會話具有如下特點:
1.會話具有單獨的地址空間。對于會話來說,其它會 話或服務器主會話都是不可見的。
2.會話生命期從服 務器的ConnectionBegin事件開始,到Connec tionEnd事件結束。
3.會話具有單獨的全域對 象的拷貝,就是說每一會話都具有其自已獨立的全域變數。
如上所述,我們就會知道,會話中的SQLCA物件和應用 服務器中的SQLCA變數不同,前面我們所說的代碼是不會成功的 。
我想問一問,能不能建立一個共享事務呢?,讓所有的客戶端共享這個事務SQLCA呢?
uj5u.com熱心網友回復:
所有客戶端共享事物??如何解決資料完整性,資料庫死鎖,幾乎所有和資料庫有關的操作都沒法做了,呵,簡單例子,一個客戶要提交資料,一個要回退資料,咋辦?uj5u.com熱心網友回復:
應用服務器的事務是組件級的而且各會話(執行緒)之間是相互獨立的,多個組件的事務可以相互獨立也可在一個事務內。通過組件的提交或銷毀可以完成事務的提交或回滾。EA組件有Not Supported、Supported Transaction、Requires Transcation等屬性,就是設定組件事務屬性的。
樓上所說的提交就相當于組件的transactionserver.SetComplete(),回滾相當于transactionserver.SetAbort()
uj5u.com熱心網友回復:
已閱,就1分!?再多學習學習吧,1樓的已經給出答案了
uj5u.com熱心網友回復:
lz要干嘛?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/115126.html
標籤:Web 應用
上一篇:關于Jaguar CTS,PowerBuilder和Mapinfo的一些問題
下一篇:PB與SQL的連接問
