Java, Only Java!

          統計

          留言簿(20)

          積分與排名

          好友空間

          文檔技巧

          閱讀排行榜

          評論排行榜

          Apusic V4.0.3應用服務器中JNDI配置JDBC

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

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

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

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

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


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


          網站導航:
           
          主站蜘蛛池模板: 淅川县| 哈尔滨市| 北宁市| 上蔡县| 宜良县| 碌曲县| 安宁市| 庆阳市| 莲花县| 云霄县| 永兴县| 贵溪市| 菏泽市| 延吉市| 冀州市| 甘孜| 茌平县| 乐陵市| 广灵县| 泌阳县| 肃北| 锦屏县| 元氏县| 伊川县| 大名县| 张家港市| 乌苏市| 文安县| 三门峡市| 安龙县| 横山县| 滦南县| 临海市| 大田县| 韶山市| 高唐县| 连城县| 抚松县| 香港 | 灵台县| 石泉县|