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

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

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

    Java, Only Java!

    統(tǒng)計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    Apusic V4.0.3應(yīng)用服務(wù)器中JNDI配置JDBC

    1. JDBC的介紹。
        JDBC是Java的開發(fā)者——Sun公司制定的Java數(shù)據(jù)庫連接(Java Data Base Connectivity)技術(shù)的簡稱,是為各種常用數(shù)據(jù)庫提供無縫聯(lián)接的技術(shù)。在Web和Internet應(yīng)用程序中的作用和ODBC在Windows系列平臺應(yīng)用程序中的作用類似。同時JDBC和ODBC也可以稱之為數(shù)據(jù)連接中間件,現(xiàn)在JDBC被融合在J2EE的框架中,簡化了J2EE框架下應(yīng)用開發(fā)過程中對數(shù)據(jù)庫的調(diào)用和移植。JDBC對于現(xiàn)在主流的數(shù)據(jù)庫都可以支持,例如:MySQL、PostgreSQL(兩個開源產(chǎn)品)和DB2、Oracle、SQL Server、Sybase(商業(yè)化產(chǎn)品)等。 
        使用JDBC來完成對數(shù)據(jù)庫的訪問包括以下四個主要組件:Java或J2EE的應(yīng)用程序、JDBC驅(qū)動管理器、JDBC驅(qū)動程序(以jar為后綴的Java類庫)和數(shù)據(jù)源。SUN公司在設(shè)計JDBC時只定義了統(tǒng)一標(biāo)準(zhǔn)的SQL數(shù)據(jù)存取接口。程序員開發(fā)應(yīng)用時,只需要按照標(biāo)準(zhǔn)的接口訪問數(shù)據(jù),而不需要關(guān)心后臺的數(shù)據(jù)庫由誰提供,從而屏蔽了數(shù)據(jù)庫的差異性,減少了應(yīng)用與數(shù)據(jù)庫的藕合,增強了應(yīng)用本身的可擴展性和可移植性。提供這種可移植性的正是JDBC的驅(qū)動程序,這個部分一般由DBMS廠商提供,應(yīng)用軟件只需要將提供的JAR包加載到系統(tǒng)中就可以實現(xiàn)對該數(shù)據(jù)庫訪問的支持。
        Apusic V4.0.3不僅提供了JDBC的支持,還提供了對最新規(guī)范JDBC 3.0的支持,從而為JDBC開發(fā)中數(shù)據(jù)庫連接提供了連接池管理。只需要在JNDI中配置JDBC連接,就可以自動享受連接池管理帶來的好處,避免在應(yīng)用中通過JDBC直接訪問時因為創(chuàng)建和關(guān)閉連接帶來的資源消耗。同時,還為數(shù)據(jù)庫連接提供了自動檢測與失效恢復(fù)技術(shù),當(dāng)程序代碼中使用連接后沒有返回給連接池,系統(tǒng)會檢測到這樣的失誤并自動完成連接回收工作,從而避免了軟件開發(fā)中的失誤,增強了應(yīng)用的健壯性。
    2. JDBC的使用。
        JDBC的使用主要有三種:直接通過JDBC與數(shù)據(jù)庫連接;客戶端遠程通過iiop協(xié)議由Apusic應(yīng)用服務(wù)器的JNDI->JDBC與數(shù)據(jù)庫連接;Apusic應(yīng)用服務(wù)器端直接通過JNDI->JDBC與數(shù)據(jù)庫連接。
        2.1. 直接通過JDBC與數(shù)據(jù)庫連接。
            這種連接方式無論是在客戶端還是服務(wù)器端撰寫的方式都一樣,我這里興個連接Oracle數(shù)據(jù)庫的例子:
            Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle的加載JDBC驅(qū)動程序的方法
            Connection con=DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL",ID,Pwd);
            //  與Oracle數(shù)據(jù)庫建立連接的方法。使用的是Oracle在JDBC中的連接串。
            //  前面兩行代碼仍然與數(shù)據(jù)庫有綁定關(guān)系,不同數(shù)據(jù)庫的加載類不同,數(shù)據(jù)庫連接串也會不同。
            //  如果大家需要了解其他數(shù)據(jù)庫的情況,可以在網(wǎng)上搜索“JDBC使用過程”或者“常用數(shù)據(jù)庫JDBC連接寫法”可得。
            Connection.createStatement();
            // 創(chuàng)建一個Statement對象。Statement對象執(zhí)行一個查詢并從DBMS返回一個包含響應(yīng)結(jié)果的ResultSet對象。
            // 除了Statement對象外,還有其他對象這里不再介紹,大家可以搜索“使用JDBC訪問數(shù)據(jù)庫”或者“JDBC優(yōu)化”可得。
            con.close(); // 關(guān)閉數(shù)據(jù)庫連接!這個必須要做,否則數(shù)據(jù)庫連接資源會在一次次打開中耗盡。
           
        2.2. 客戶端通過iiop協(xié)議由JNDI->JDBC與數(shù)據(jù)庫連接。
            這種方式程序就會享受到使用數(shù)據(jù)庫連接池的好處,程序會減少創(chuàng)建和關(guān)閉數(shù)據(jù)庫連接時消耗的時間。但是,我只覺得應(yīng)該是客戶端程序中才這樣使用,因為服務(wù)器端會有更加簡單的使用方式,而且代碼中還存在與應(yīng)用服務(wù)器綁定的問題,如何綁定的我將在Apusic中使用的例子說明:
     Hashtable env=new Hashtable();
     Context initCtx=null;
     DataSource datasource=null;
     try{
      env.put(Context.INITIAL_CONTEXT_FACTORY,"com.apusic.naming.jndi.CNContextFactory");
            //  JNDI的上下文工廠類,不同的應(yīng)用服務(wù)器這里不同。
            //  WEBLOGIC是weblogic.jndi.WLInitialContextFactory可以通過查看那些產(chǎn)品的相關(guān)類可知。
      env.put(Context.PROVIDER_URL,"iiop://APUSIC_ADDRESS:6888");
            //  連接所用的協(xié)議與端口,也與應(yīng)用服務(wù)器有關(guān),WEBLOGIC就是T3.
            // 以上與服務(wù)器相關(guān)的信息包括下面的部分最好都采用XML定義的方式,以便未來容易配置。
      //插入相關(guān)驗證信息
      env.put(Context.SECURITY_CREDENTIALS,"your_username" ) ;
      env.put(Context.SECURITY_PRINCIPAL,"your_password");
      initCtx=new InitialContext(env);
      //通過RMI 取得數(shù)據(jù)庫連接
      datasource=(DataSource)initCtx.lookup("jdbc/sample")
      Connection conn=datasource.getConnection();
     }catch(Exception e){
      e.printStackTrace();
     }
        這樣的連接在部署時還需注意為相應(yīng)的連接設(shè)置用戶認證標(biāo)記,在APUSIC_HOME/config/datasources.xml 中添加<remote-acl>標(biāo)記及其元素。范例如下:
    <remote-acl>
        <user>username</user>
    </remote-acl>

    <remote-acl>
        <group>groupname</group>
    </remote-acl>

        2.3. 服務(wù)器端直接通過資源管理器(數(shù)據(jù)庫連接池)->JNDI->JDBC與數(shù)據(jù)庫連接。
        這種方式是JDBC 3.0規(guī)范中要求的,因此所有的應(yīng)用服務(wù)器都遵守同樣的標(biāo)準(zhǔn),代碼中不會存在與服務(wù)器綁定的信息。系統(tǒng)移植時最主要是修改配置信息,這個我在后面會具體介紹,下面是使用的例子:
     try{
     //取得InitialContext 對象
     Context ctx=new InitialContext();
     //通過JNDI 取得數(shù)據(jù)源
     DataSource datasource=(DataSource)
     ctx.lookup("java:comp/env/jdbc/oracle");
     //通過數(shù)據(jù)源取得數(shù)據(jù)庫連接
     Connection conn=datasource.getConnection();
     ...
     }
        這段代碼不做任何修改就可以在任何標(biāo)準(zhǔn)的應(yīng)用服務(wù)器上運行,大家肯定注意到了代碼中有個JNDI連接串,但沒有建議采用XML文件配置,如果兩個應(yīng)用編寫了同樣的JNDI串是否會發(fā)生沖突?不會,原因是將會在后面的配置中通過名稱映射來解決沖突。
        如果采用這種技術(shù)訪問JDBC,除了需要通過JNDI注冊JDBC信息外,還需要在應(yīng)用的apusic-application.xml 和web.xml 文件中對“資源引用”進行定義。對于移植的應(yīng)用最好的定義方法是用Apusic部署工具打開編寫的應(yīng)用,然后展開使用這個JDBC連接的WEB或者EJB模塊,選中“資源引用”就可以添加。其中“資源引用名稱”就是在代碼中使用的名稱“jdbc/oracle”,JNDI名稱就是在應(yīng)用服務(wù)器上為JDBC連接配置的JNDI名稱。通過這樣的映射就完成了代碼與應(yīng)用服務(wù)器的JNDI名稱的關(guān)聯(lián),也避免了應(yīng)用中重復(fù)使用JNDI名稱而造成的沖突,影響到的配置參數(shù)主要是<res-ref-name>相關(guān)的部分。

    3. 如何配置JDBC。
        Apusic應(yīng)用服務(wù)器的JDBC配置有兩種方式。一種是通過http://localhost:6888/admin進入管理界面,然后對數(shù)據(jù)源直接進行配置;另一種就是用編輯器打開datasources.xml文件手工配置。配置之前先準(zhǔn)備好數(shù)據(jù)庫連接串,數(shù)據(jù)庫驅(qū)動類,用戶名/密碼和數(shù)據(jù)庫驅(qū)動程序(JAR包)。JAR包有兩種載入方式,一種是拷入到APUSIC_HOME/lib目錄下,在系統(tǒng)啟動時一起載入;另一種是配置過程中將驅(qū)動程序載入,采用何種方式可以由系統(tǒng)管理員決定,但是這個都與系統(tǒng)的ClassLoader有關(guān),感興趣的朋友可以去網(wǎng)上搜索一下。

    posted on 2007-08-01 00:23 zYx.Tom 閱讀(1838) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一本色道久久88—综合亚洲精品 | 亚洲一区二区三区播放在线| a毛片久久免费观看| 国产亚洲精品激情都市| 粉色视频在线观看www免费| 国产又粗又长又硬免费视频| 久久久久亚洲国产AV麻豆| 日本免费一二区在线电影| 亚洲日韩在线中文字幕综合| 免费国产成人高清在线观看麻豆| 亚洲av无一区二区三区| 免费在线观看的黄色网址| 春意影院午夜爽爽爽免费| 中文字幕亚洲第一| 成在人线av无码免费高潮喷水 | 国内少妇偷人精品视频免费| 亚洲国语精品自产拍在线观看| 99久久国产免费中文无字幕| 亚洲人成网站18禁止久久影院| 成人毛片免费视频| 日韩在线视频播放免费视频完整版| 久久亚洲色一区二区三区| 无码免费一区二区三区免费播放 | 亚洲精品国产av成拍色拍| 亚洲av无码天堂一区二区三区| 一本大道一卡二大卡三卡免费| 久久精品7亚洲午夜a| 在线观看特色大片免费视频 | 特级做A爰片毛片免费69 | 亚洲小说图片视频| 国产一级理论免费版| 三年在线观看免费观看完整版中文| 久久精品国产亚洲精品2020| 最近免费中文字幕大全视频| 国产国产人免费人成成免视频 | 亚洲成人激情在线| 日韩在线天堂免费观看| 国产猛男猛女超爽免费视频| 色老板亚洲视频免在线观| 狠狠亚洲狠狠欧洲2019| 毛片在线看免费版|