3.4. THỰC HIỆN HỆ THỐNG MÔ PHỎNG.
Hệ thống phần mềm trung tâm được viết bằng ngôn ngữ C, pro C trên nền Bea Tuxedo. Mỗi nghiệp vụ của hệ thống IBPC sẽ được module hoá thành các server ứng dụng riêng. Mỗi server ứng dụng sẽ bao gồm nhiều service đáp ứng các submodule của server và có thể sử dụng lại được bởi các server khác trong cùng hệ thống như server HVS, SAPS, SAS, OCS, IIS,….
Chương trình phần mềm giao diện đầu cuối CI-TAD được viết trên nền MS .Net VB. Phần mềm này có sử dụng các hàm API chuẩn của Bea Tuxedo để kết nối, truyền nhận thông điệp giao dịch với phần mềm trung tâm IBPC.
3.4.1. Phần mềm trung tâm tại IBPC.
3.4.1.1. Cơ sở dữ liệu vật lí.
Cơ sở dữ liệu vật lí được cài đặt trên hệ quản trị cơ sở dữ liệu Oracle. Oracle là một hệ quản trị dữ liệu mạnh, hỗ trợ giao thức Two-phase commit theo chuẩn XA/open và hỗ trợ cho việc viết mã các chương trình ứng dụng xử lí dữ liệu bằng ngôn ngữ Pro C trước khi biên dịch thành file chương trình C để có thể chạy được trên Tuxedo. Ta có lược đồ vật lí của cơ sở dữ liệu mô phỏng tại IBPC được cài đặt trên Oracle như sau:
create table HE_THONG_NH(MAHT VARCHAR2(10) not null, TENHT VARCHAR2(50) not null );
alter table HE_THONG_NH
add constraint HE_THONG_NH_PK primary key (MAHT) using index
create table TO_CHUC_TIN_DUNG(MAHT VARCHAR2(10) not null, MATC
VARCHAR2(10) not null, TENTC VARCHAR2(50), TINHTRANG VARCHAR2(2) not null );
create table GIAO_DICH_HV(MAHT VARCHAR2(10) not null, MATC
VARCHAR2(10) not null,MAHV VARCHAR2(10) not null,NGAYGD DATE not null,LOAIGD VARCHAR2(2) not null,SOTIEN NUMBER(22,0) not null);
alter table GIAO_DICH_HV
add constraint GIAO_DICH_HV_PK primary key (MAHT, MATC,MAHV,NGAYGD ) using index
tablespace USERS
3.4.1.2. Cấu hình cài đặt phần mềm trung tâm IBPC.
Thông tin File cấu hình hệ thống IBPC.
*RESOURCES IPCKEY 10000 MAXACCESSERS 300 MAXSERVERS 20 MAXSERVICES 100 MASTER IBPC1 MAXGTT 500 MODEL SHM LDBAL Y CMTRET COMPLETE SECURITY USER_AUTH AUTHSVC AUTHSVC *MACHINES NVLUAN LMID=IBPC1 TUXDIR="C:\bea\tuxedo8.1" APPDIR="C:\IBPC\HVS\bin" ULOGPFX="C:\IBPC\HVS\log\ulog\ULOG" TLOGDEVICE="C:\IBPC\HVS\log\tlog\TLOG_DEV" TLOGNAME=TLOG TLOGSIZE=512 TUXCONFIG="C:\IBPC\HVS\cfg\tuxconfig" MAXWSCLIENTS=100 *GROUPS GHVS LMID=IBPC1 GRPNO=1 GSAPS LMID=IBPC1 GRPNO=2 GOCS LMID=IBPC1 GRPNO=3 GIIS LMID=IBPC1 GRPNO=4 GWDM LMID=IBPC1 GRPNO=5 XAGRP1 LMID=IBPC1 GRPNO=100
TMSNAME=TMS_ORA TMSCOUNT=2
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/IBPC1/IBPC1+SqlNet=nvldb01+SesTm=30+LogDir=C:\IBPC\HVS\log\xalog" *SERVERS
DEFAULT: RESTART=N MAXGEN=25 CLOPT="-A -r" HVS SRVID=1 SRVGRP=GHVS
SAPS SRVID=2 SRVGRP=GSAPS OCS SRVID=3 SRVGRP=GOCS IIS SRVID=4 SRVGRP=GWDM
IBPC SRVGRP=XAGRP1 SRVID=100 RQADDR=SND_Q REPLYQ=Y MIN=1 MAX=10 AUTHSVR SRVID=100 RESTART=Y CLOPT=”-A”
WSL SRVID=1 SRVGRP=GWDM CLOPT="-A -- -n//135.1.2.27:8100 -m1 -x10" *SERVICES CHECK_USER CHECK_HV CHECK_AMOUNT SETLMENT_AMOUNT
3.4.1.3. Mã nguồn hệ thống IBPC. 3.4.1.3.1. Mã nguồn dịch vụ CHECK_HV.. #include <stdio.h> #include <string.h> #include <atmi.h> #include <fml32.h> #include <userlog.h> #include <macro32.h>
#include "c:\IBPC1\HVS\include\ibpc.flds.h" /* Application FML32 field data define */ EXEC SQL BEGIN DECLARE SECTION; varchar MaHV[10]; varchar MaHT[8]; varchar TenKH[50]; varchar MaTC[8]; varchar NgayGD[8]; float SoTien; varchar TrangThai[2]; varchar LoaiGD[2]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca.h; CHECK_HV(TPSVCINFO *hv) { FBFR32 *transf; long len,flag,count; int i; transf = (FBFR32 *)hv->data; userlog("Start get value!"); GETVAR (FMaHV, 0, MaHV); GETVAR (FMaHT, 0, MaHT); GETVAR (FTenKH, 0, TenKH); GETVAR (FMaTC, 0, MaTC); GETVAR (FNgayGD, 0, NgayGD); GETVAR (FSoTien, 0, SoTien); GETVAR (FTrangThai, 0, TrangThai); GETVAR (FLoaiGD, 0, LoaiGD); userlog("KIEM TRA GIAO DICH GIA TRI CAO!"); EXEC SQL WHENEVER SQLERROR GOTO sqlerr; EXEC SQL SELECT COUNT(*) INTO count FROM GIAO_DICH_HV H WHERE H.MaHV= MaHV AND H.MaHT = MaHT AND TenKH = TenKH AND H.MaTC= MaTC; if (count == null) { userlog(">> Gia tri cao khong hop le", hv->name); tpreturn(TPFAIL,0,(char *)transf,0,0); }
tpreturn(TPSUCCESS,SQLCODE,(char *)transf,0,0); sqlerr :
userlog(">> Service[%s] ERROR sqlcode=%d", hv->name, SQLCODE); EXEC SQL WHENEVER SQLERROR CONTINUE;
tpreturn(TPFAIL,0,(char *)transf,0,0); }
3.4.1.3.2. Mã nguồn dịch vụ hạch toán tài khoản SAPS. #include <stdio.h> #include <string.h> #include <atmi.h> #include <fml32.h> #include <userlog.h> #include <macro32.h>
#include "c:\IBPC1\HVS\include\ibpc.flds.h" /* Application FML32 field data define */ EXEC SQL BEGIN DECLARE SECTION;
varchar MaHV[10]; varchar MaHT[8]; varchar TenKH[50]; varchar MaTC[8]; varchar NgayGD[8]; float SoTien; varchar TrangThai[2]; varchar LoaiGD[2];
EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca.h;
SETLMENT_AMOUNT (TPSVCINFO *hv) { FBFR32 *transf; long len,flag,count; int i; transf = (FBFR32 *)hv->data; userlog("Start get value!"); GETVAR (FMaHV, 0, MaHV); GETVAR (FMaHT, 0, MaHT); GETVAR (FTenKH, 0, TenKH); GETVAR (FMaTC, 0, MaTC); GETVAR (FNgayGD, 0, NgayGD); GETVAR (FSoTien, 0, SoTien); GETVAR (FTrangThai, 0, TrangThai); GETVAR (FLoaiGD, 0, LoaiGD);
userlog("CAP NHAT SO DU TAI KHOAN CHO NH:", MaHT); EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL UPDATE SO_DU_TK TK SET TK.SoTien = SoTien WHERE H.MaHV= MaHV AND H.MaHT = MaHT
AND TenKH = TenKH AND H.MaTC= MaTC; tpreturn(TPSUCCESS,SQLCODE,(char *)transf,0,0);
sqlerr :
userlog(">> Service[%s] ERROR sqlcode=%d", hv->name, SQLCODE); EXEC SQL WHENEVER SQLERROR CONTINUE;
tpreturn(TPFAIL,0,(char *)transf,0,0); }
3.4.2. Chương trình máy trạm CI-TAD.