學習模式的實現_第1頁
學習模式的實現_第2頁
學習模式的實現_第3頁
學習模式的實現_第4頁
學習模式的實現_第5頁
免費預覽已結束,剩余6頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

三層架構Delphi+Java+Oracle模式的實現一、架構簡介Delphi作為客戶端,Java作為應用服務端,Oracle作為數據庫。其中Delphi三層架構Delphi+Java+Oracle模式的實現一、架構簡介Delphi作為客戶端,Java作為應用服務端,Oracle作為數據庫。其中Delphi客戶TClientDataSet實現的;Delphi客戶端選擇基于阻塞模式的Indy通信套件作為通信工具;以tcp/ip作為通信協議且直接以流的的形式與Java應用服務端進行交互;架構主要解決以下問題:TClientDataSet可以xml格式;修改-TClientDataSetJava保存到數據庫中;要解決這個問題就屬性;Oracle的大對象字段類型(clobblob);Delphi端如何調用Java端定義的對應的業務邏輯供;◆在多用戶高并發大數據量的情況下的處理效率問題;(包括打包解包,壓縮解壓,加密等問題)架構的擴展功能::客戶端可以緩存大量的客戶端數據,并提供了一定程度的離線操作功能;這樣在提高戶交互效率的同時,減少網絡數據通訊量;還能降低服務器的負載。◆客戶端自動更新機制:便于客戶端的部署和版本更新◆權限管理:包括功能權限和數據權限;◆客戶端采用模塊化(DLL)設計保證系統的可擴展性;◆運行時自定義報表;;二、架構的通信過程請求開始->打包壓縮請求數據->發送請求數據->Delphi端開始阻塞等待->Java端響應請求->解壓解包數據->處理請求->打包壓縮結果->發送處理結果->Delphi端停止阻塞接收處理結果->解壓解包處理結果->顯示結果二、架構的通信過程請求開始->打包壓縮請求數據->發送請求數據->Delphi端開始阻塞等待->Java端響應請求->解壓解包數據->處理請求->打包壓縮結果->發送處理結果->Delphi端停止阻塞接收處理結果->解壓解包處理結果->顯示結果三、關于TClientDataSet的DataPackage格式ADOoracle的數據集;三、關于TClientDataSet的DataPackage格式ADOoracle的數據集;的過程,其詳細procedureSaveToFile(constFileName:string='';Format:TDataPacketFormat=dfBinary);是個枚舉類型,全部的枚舉值如下:TDataPacketFormat=(dfBinary,dfXML,dfXMLUTF8);dfXML格式保存文件。◆例 如下Oracle表結構定義:createtableD_PORTPORT_IDOP_STATEB_POLPORT_COUNTPORT_AIRCODECREATE_DATEB_BASICEDI_CODE(NUMBER(12)notnull,NUMBER(*,1),INTEGER,FLOAT,CHAR,CHAR(2),DATE,VARCHAR2(55),NUMBER);xml結構:<?xmlversion="1.0"standalone="yes"?><METADATA><FIELDS><FIELDattrname="PORT_ID"fieldtype="fixed"WIDTH="12"/><FIELDattrname="OP_STATE"fieldtype="fixed"DECIMALS="1"WIDTH="38"/><FIELDattrname="B_POL"fieldtype="fixed"WIDTH="38"/><FIELDattrname="PORT_COUNT"fieldtype="r8"<FIELDattrname="PORT_COUNT"fieldtype="r8"/><FIELDattrname="PORT_AIRCODE"fieldtype="string"SUBTYPE="FixedChar"WIDTH="1"/><FIELDattrname="PORT_SEACODE"fieldtype="string"SUBTYPE="FixedChar"WIDTH="2"/><FIELDattrname="CREATE_DATE"fieldtype="dateTime"/><FIELDattrname="B_BASIC"fieldtype="string"WIDTH="55"/><FIELDattrname="EDI_CODE"fieldtype="fixed"WIDTH="38"/></FIELDS><PARAMS/></METADATA>B_POL="3"/>B_POL="3"/></ROWDATA></DATAPACKET>整個L定義了一個ATCTMDA和A。。FIELD節點的定義,主要包括以下信息:attrname為字段名稱;fieldtype為字段類型;WIDTH為需要指定寬度的字段類型的寬度或數字的有效位數;DECIMALS為小數點右邊的位數;SUBTYPE用來幫助決定字段類型;TClientDataSetDelta屬性Delta屬性存放了當前數據集的修改信息;myCDS.Data:=OrS.Delta的UpdateStatus屬性反映當前 的更新狀態;根據更新數據的情況其可能的值分別為:◆新增一條 時,在Delta中會有一條 ◆修改中對于同一條會產生且僅產生兩條:第一條為原始,標usUnmodifiedusModified◆刪除 TClientDataSetDelta屬性Delta屬性存放了當前數據集的修改信息;myCDS.Data:=OrS.Delta的UpdateStatus屬性反映當前 的更新狀態;根據更新數據的情況其可能的值分別為:◆新增一條 時,在Delta中會有一條 ◆修改中對于同一條會產生且僅產生兩條:第一條為原始,標usUnmodifiedusModified◆刪除 中會產生一條usDeleted;SQL語句;五、數據包的格式定義◆數據包采用變長字符串的方式組織,一般由數據節點和分隔符組成。具體結構如下圖:◆數據節點一般由數據長度和數據值組成。999時兩個數據節點的組成如下圖:999◆數據包格式定義的說明:1>數據長度為數據值長度的長度字符串;2>數據長度的長度為數據值長度的長度字符串的長度字符串;3>999003數據長度的長度分隔符數據長度數據值分隔符數據長度數據值分隔符數據長度數據值分隔符數據節點分隔符數據節點分隔符數據節點分隔符六、JAVA應用服務器應用服務器最重要的就是穩定,高效;支持多用戶高并發大數據量;且應用服務器應該是無狀六、JAVA應用服務器應用服務器最重要的就是穩定,高效;支持多用戶高并發大數據量;且應用服務器應該是無狀ServerSocketDelphi客戶端發送請求令;◆針對每個Delphi客戶端發送的請求開啟線程處理多用戶高并發大數據量的情況。commandDelphi端請求的相應的業務邏輯對象進行處理;JDBCOracle數據庫交互;:weblogic,websphere,jboss等等作為應用服務器,而盡想其提供的豐富的管理功能;七、架構的接口規劃函數編號002函數功能同時查詢多個數據集函數function mands(ACDS:ArrayofTClientDataSet;Communication;參數名稱參數名稱ACDSTClientDataSet列表ASelectText要發送的多條查詢語句列表函數說明);失敗返回[false]用例varsSql:string;七、架構的接口規劃函數編號002函數功能同時查詢多個數據集函數function mands(ACDS:ArrayofTClientDataSet;Communication;參數名稱參數名稱ACDSTClientDataSet列表ASelectText要發送的多條查詢語句列表函數說明);失敗返回[false]用例varsSql:string;begintry函數編號001函數功能查詢單個數據集函數function mand(ACDS:TClientDataSet;constCommunication;參數名稱參數名稱ACDSTClientDataSetASelectText要發送的單條查詢語句函數說明);失敗返回[false]用例mand(cdsTemp,'SELECT*FROM;表示發送一個查詢語句到JAVA應用服務器,如果sList:=TStringList.Create;trysSql:='SELECT*FROMTable1';sList.Add(sSql);sSql:='SELECT*FROMTable2';sList.Add(sSql);sSql:='SELECT*FROMTable3';sList.Add(sSql);mands([cdsTemp1,cdsTemp2,cdsTemp3],sList);finallyFreeAndNil(cdsTemp1);FreeAndNil(cdsTemp2);FreeAndNil(cdsTemp3);ifAssigned(sList)thenFreeAndNil(sList);end;end;end;函數編號005函數功能SQL語句函數functionCreateUpdates(constATableNames:arrayofstring;Boolean;stdcall;externalCommunication;參數名稱參數名稱ATableNames要進行事務處理的SQL單條語句ACDS修改過的數據集列表函數編號004函數功能函數編號005函數功能SQL語句函數functionCreateUpdates(constATableNames:arrayofstring;Boolean;stdcall;externalCommunication;參數名稱參數名稱ATableNames要進行事務處理的SQL單條語句ACDS修改過的數據集列表函數編號004函數功能ordeleteSQL語句到應用服務器進行事務處理函數function TStringList):integer;stdcall;externalCommunication;參數名稱參數名稱AExecuteText要進行事務處理的SQL單條語句函數說明[0];事務處理失敗返回[0]用例函數編號003函數功能updateorinsertordeleteSQL語句到應用服務器進行事務處理函數function TStringList):integer;stdcall;externalCommunication;參數名稱參數名稱AExecuteText要進行事務處理的SQL語句集函數說明[0];事務處理失敗返回[0]用例函數編號006函數功能自動更新多個數據集的修改信息函數functionApplyUpdates(constATableNames:arrayofstring;ACDS:arrayofTClientDataSet):函數編號006函數功能自動更新多個數據集的修改信息函數functionApplyUpdates(constATableNames:arrayofstring;ACDS:arrayofTClientDataSet):Boolean;stdcall;externalCommunication;參數名稱參數名稱ATableNames要進行事務處理的SQL單條語句ACDS修改過的數據集列表函數說明[false];◆表名列表與數據集列表應該一一對應◆本函數根據數據集中的修改信息自動生成InserUpdateDelete,語句一起發送到JAVA端進行事務處理.用例Result:=ApplyUpdates([cds1,cds2,cds3]);AListSQL語句函數說明[false];InserUpdateDelete等類型的多條SQL語句,這樣就完成了操作界面到SQL語句之間的直接映射.用例[cds1,cds2,cds3],sSqlList);CreateUpdates(['TableName1'],[cds1],sSqlList);函數編號008函數功能(clobblob)函數externalCommunication;參數名稱參數名稱AID

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論