<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    談笑有鴻儒,往來無白丁

    在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽
    前言
    在銀行、電信、金融等行業的大型計算機應用系統中,中間件的使用日益普及,中間件已與操作系統、數據庫并列為三大基礎軟件。BEA Tuxedo作為最優秀的中間件產品,在我國的很多行業中廣泛使用,本文通過一個簡單的例子介紹如何在TUXEDO中訪問ORACLE數據庫。
    在兩層的C/S結構中,客戶端直接訪問數據庫,當采用TUXEDO中間件后,形成三層結構。這時,客戶端不直接訪問數據庫,而是改為調用中間件TUXEDO服務端上的服務,由TUXEDO服務端訪問數據庫,并把結果返回給客戶端。TUXEDO服務端可以和ORACLE在同一臺服務器上,也可以在不同的機器上,如果在不同的機器上,在TUXEDO的服務端所在的機器要安裝一個ORACLE的客戶端。
    TUXEDO服務端與ORACLE數據庫連接有兩種方式:
    1、不通過XA接口直接互連。適用于整個系統只有一個數據庫的情況。
    2、通過XA接口互連,對整個系統有一個數據庫或多個數據庫都適用,建議采用,本文介紹這種互連的配置方法。
    系統說明
    TUXEDO版本:7.1 安裝目錄 d:\tuxedo71
    ORACLE版本:8.1.5 安裝目錄 d:\ora81
    操作系統: win2000
    配置的步驟
    一、ORACLE的的配置
    1.用internal用戶(缺省的口令是oracle)進入SQLPLUS
    C:\>sqlplus internal/oracle
    2.運行ORACLE的安裝路徑下的/rdbms/admin/xaview.sql
    SQL> @d:\ora81\rdbms\admin\xaview.sql
    3.授權
    SQL>grant select on v$xatrans$ to public with grant option;
    SQL>grant select on v$pending_xatrans$ to public with grant option;
    4. 用system用戶(缺省的口令是manager)連接并授權
    SQL>connect system/manager
    SQL>grant select any table to public;
    二、TUXEDO的配置
    1.修改TUXEDO安裝路徑的udataobj目錄下的RM文件,把以Oracle_XA:xaosw:開頭的一行用#注釋掉,并加入一行:
    Oracle_XA;xaosw;d:\ora81\rdbms\xa\oraxa8.lib d:\ora81\precomp\lib\msvc\orasql8.lib
    如果是在UNIX環境下,則為:
    Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lclntsh
    2. 在TUXEDO用戶下創建TMS文件:TMS_ORA8i,TUXEDO通過TMS_ORA8i與ORACLE數據庫采用XA協議進行通訊
    buildtms -o d:\tuxedo71\bin\TMS_ORA8i -r Oracle_XA
    ?
    注意:如果TUXEDO 服務端與ORACLE數據庫不在同一臺服務器上,可能會提示找不到 庫文件oraxa8.lib和orasql8.lib,可到ORACLE數據庫的服務端相應目錄下把這兩個文件拷到當前機器ORACLE的客戶端下的對應目錄下。
    3. 配置 UBBCONFIG
    (1)在*MACHINES節中增加:
    TLOGDEVICE = "/home/oracle/temp/simpdb/TLOG"
    TLOGNAME=TLOG
    TLOGSIZE=200
    (2)改*GROUPS節的配置為:(scott/tiger為本數據庫所采用的用戶及口令,可根據需要更改)
    *GROUPS
    GROUP1 LMID=simple GRPNO=1
    OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."
    TMSNAME="TMS_ORA8i" TMSCOUNT=2
    修改后的配置文件ubb內容如下,用tmloadcf -y ubb重新生成tuxconfig
    IPCKEY 123456
    DOMAINID simpapp
    MASTER simple
    MAXACCESSERS 100
    MAXSERVERS 50
    MAXSERVICES 100
    MODEL SHM
    LDBAL N
    ?
    *MACHINES
    server LMID=simple
    APPDIR="d:\test"
    TUXCONFIG="d:\test\tuxconfig"
    TUXDIR="d:\tux71"
    TLOGDEVICE = "d:\test\TLOG"
    TLOGNAME=TLOG
    TLOGSIZE=100
    *GROUPS
    GROUP1 LMID=simple GRPNO=1
    OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."
    TMSNAME="TMS_ORA8i" TMSCOUNT=2
    *SERVERS
    DEFAULT:
    CLOPT="-A"
    test SRVGRP=GROUP1 SRVID=1
    *SERVICES
    ?
    4.重命名下列文件,因為下列文件名與ORACLE帶的文件名有沖突,所以要改名。
    (1)TUXEDO安裝路徑include目錄下的下面文件
    把sqlca.h 改名為 sqlca.h.bbb
    把sqlcode.h 改名為 sqlcode.h.bbb
    把sqlda.h 改名為 sqlda.h.bbb
    (2)重命名TUXEDO安裝路徑lib目錄下的下面文件
    把libsql.lib 改名為 libsql.lib.bbb
    5.用TMADMIN創建TLOG文件,TUXEDO用一個文件TLOG記錄對數據庫操作的日志。用于協調分布式數據庫的提交與回滾。
    D:\>tmadmin
    >crdl -b 500 -z d:\test\TLOG
    >crlog -m simple
    >q
    ?
    三、服務端的程序:test.pc
    功能:根據客戶端傳的EMPNO到表EMP中取ENAME的值,并把它返回給客戶端
    #include <stdio.h>
    #include <atmi.h>
    #include <userlog.h>
    ?
    EXEC SQL INCLUDE sqlca;
    ?
    EXEC SQL BEGIN DECLARE SECTION;
    long al_empno=0;
    char ac_ename[11]="";
    ?
    EXEC SQL VAR ac_ename IS STRING(11);?
    EXEC SQL END DECLARE SECTION;
    ?
    ?
    TEST(TPSVCINFO *rqst)
    {
    ?
    /*接收客戶端來的數據*/
    al_empno = (FBFR32 *)rqst->data;
    ?
    EXEC SQL select ename into :ac_ename from EMP where empno=:al_empno;
    if(sqlca.sqlcode!=0)
    {?
    userlog("select from EMP failure,sqlcode=%ld, sqlerr=%s\n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
    strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);
    tpreturn( TPFAIL, 0, rqst->data, 0, 0 );
    }
    /*把取出的結果返回給客戶端*/
    strcpy(rqst->data,ac_ename);
    tpreturn( TPSUCCESS, 0, rqst->data, 0, 0 );
    }
    四、編寫客戶端程序: testcli.c
    功能:調用TUXEDO服務端的服務TEST,取EMPNO=1000所對應的ENAME的值,并顯示出來
    #include <stdio.h>
    #include "atmi.h"?
    ?
    main(argc, argv)
    {
    long reqlen=1024;
    char *reqbuf;
    ?
    /* 與TUXEDO服務端建立連接 */
    if (tpinit((TPINIT *) NULL) == -1)
    {
    (void) fprintf(stderr, "Tpinit failed\n");
    exit(1);
    }
    /* 分配發送緩沖區*/
    reqbuf = (char *)tpalloc("STRING",NULL,reqlen);
    if ( reqbuf == (char *)NULL)
    {
    printf("tpalloc failed\n");
    tpterm();
    }
    strcpy(reqbuf,"1000");
    /*調用TUXEDO的服務TEST*/
    if (tpcall("TEST", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0< 0 )
    {
    printf("tpcall failed,tperrno=%ld,tperrtext=%s\n",tperrno,tpstrerror(tperrno));
    tpfree(reqbuf);
    tpterm();
    exit(1);
    }
    printf("name=%s\n",reqbuf);
    tpfree(reqbuf);
    tpterm();
    return(0);
    }
    五、編譯服務端程序
    1.用ORACLE的PROC把test.pc 文件預編譯成test.c文件
    d:\test> proc test.pc include=%TUXDIR%/include
    2.用buildserver把test.c編譯成可執行文件,注意-r 后帶的Oracle_XA 與RM文件中的一致。
    d:\test> buildserver -o simpserv -f simpserver.c -r Oracle_XA -s TEST
    六、編譯客戶端程序
    d:\test> buildclient -o testcli -f testcli.c
    七、用 tmboot -y 啟動TUXEDO
    應能看到所有的SERVER都啟動成功。這時,我們的服務端程序test 會自動與ORACLE數據庫建立連接,并一直保持這個連接,直到TUXEDO系統或ORACLE數據庫關閉。所以在我們的程序test.pc中看不到與數據庫連接的語句,因為現在與數據庫的連接由TUXEDO自動管理。如果TMS_ORA8i啟動失敗會在當前目錄生成一個*.trc文件,記錄失敗的原因,同時TUXEDO的ULOG文件中也會有一些錯誤信息。可參考這些錯誤信息進行錯誤分析。
    d:\test> tmboot -y
    exec TMS_ORA8i-A :
    process id=1072 ... Started.
    exec TMS_ORA8i-A :
    process id=528 ... Started.
    exec test -A :
    process id=876 ... Started.
    八、運行客戶端程序
    運行后應能看到服務端返回的結果。
    d:\test> testcli
    name=bill
    到此,整個配置過程就大功告成了。ORACLE的其他版本的配置及在其他操作系統上的配置基本與本文所述差不多,差別主要在RM文件中所連的庫文件可能會不樣。


    忘記從哪里搞來的,不過也是中間件的使用,看看吧留著以后用
    posted on 2006-09-15 15:02 壞男孩 閱讀(911) 評論(0)  編輯  收藏 所屬分類: 資源整合
    主站蜘蛛池模板: 亚洲国产理论片在线播放| 亚洲国产综合精品中文第一| 桃子视频在线观看高清免费视频| 亚洲欧洲高清有无| 国产一精品一aⅴ一免费| 99re6在线视频精品免费| 亚洲人精品亚洲人成在线| 亚洲综合最新无码专区| 无码国产精品一区二区免费 | 亚洲精品美女久久久久9999| 看全色黄大色大片免费久久| 天堂在线免费观看| 亚洲精品国产国语| 亚洲成色www久久网站夜月| 好男人www免费高清视频在线| 国产精品美女久久久免费| 亚洲日日做天天做日日谢| 亚洲精品无码av人在线观看 | 亚洲男女一区二区三区| 免费jjzz在线播放国产| 国产精彩免费视频| 国产精品免费一区二区三区 | 香蕉视频免费在线| 亚洲制服丝袜在线播放| 亚洲人成伊人成综合网久久久| 97无码免费人妻超级碰碰碰碰| 最近免费中文字幕MV在线视频3 | 99热免费在线观看| 一级毛片人与动免费观看| 亚洲综合色7777情网站777| 日韩亚洲一区二区三区| 波多野结衣免费视频观看| 久久精品无码一区二区三区免费 | 免费国产成人18在线观看| 精品一区二区三区免费毛片| 亚洲午夜精品一区二区公牛电影院 | 99视频全部免费精品全部四虎| 老司机精品免费视频| 极品美女一级毛片免费| 亚洲日本成本人观看| 亚洲一级毛片免观看|