“Weblogic 連接池 + Oracle + Servlet” 的無狀態SessionBean 全攻略
2024-08-29 13:39:03
供稿:網友
 
             
  jbuilder7 + welogic6.1+ Oracle8i          一個無狀態的Session bean     連接weblogic 數據庫連接池     取 Oracle一個表的一個字段值     返回給客戶端 (servlet)          就這些,now整理成筆記。                                                                                                      1. 確認安裝好Oralce 和 Webligc 6.1 .Jbuilder7        都是默認安裝     2. 開始配置Jbuilder7 和Weblogic 的連接        我參考了一篇Jbuilder6的配置 ,大同小異        進入JB7        a.打開Tools-->Configue Servers--> 選擇weblogic6.x+                      Enable Server 打勾           選擇正確的Weblgic 安裝路徑         注重 顯示器分辨率為1024*768 才能看到下面的OK 按鈕         在General頁 的Home Dircetory 和 Work Directory一樣 如:         D:/bea/wlserver6.1         在Custome頁中填入weblogic 啟動密碼         其他默認       b.打開Tools--> Enterprise Setup -->CORBA                     new 一個 起名為Weblogic的項目                    在Path for ORB tools下加入Weblogic 的目錄                    在Library for project 下加入 weblogic 6.x delopy 庫                    在compiler command 填上 idcj.exe                     在Command ... for oupput Dircetory 填上一個你自己的輸出路徑       c 最后確認 Projects--> Default Projects Properties-->Server                   選的Application Server 是Weblogic 6.x file://應該已經是了,再看看       d 最后到我的電腦點右鍵去修改系統變量                   Temp 和Tmp                   因為默認得目錄名有空格,JB7過敏這個,改為一個沒空格的目錄                    如C:/temp 當然你得先建立這個目錄                         3.下來在Weblogic中建立Oracle的連接池       . 在Weblogic 控制臺            Services -->JDBC -->Connection Pools--> Configure a new JDBC Connection Pool            在General屬性頁                   Name :連接池名 file://我取名為testPool ,注重名字區分大小寫                 URL: JDBC 連接字符串 file://Oracle的 為: jdbc:oracle:thin:@xiw:1521:sdb                                             xiw為服務器名 也可為ip地址                                             sdb為數據庫名                 Driver Classname: 填入 oracle.jdbc.driver.OracleDriver                 PRoperties(key=value): 填入 user=system  file://即Oracle的用戶名,也可以在這里填入密碼                 PassWord 先不填                 點擊Apply // Weblogic 假如有圖標閃動,表示需要重啟動Webligoc設置才能生效 后面不在說明                 然后點擊Password 輸入數據庫密碼              在Connection 頁                   Initial Capacity : 1 file://初始連接數                  Maximum Capacity :10 file://最大連接數                  Capacity Increment :1 // 初始不夠時,每次增加連接數                  Refresh Period: 5 file://防止網絡意外中斷時,每5分鐘刷新一次連接,斷了就自動恢復                  其他默認            在testing 頁                   Test Table Name:tab // Oracle 已經有了這個表 ,用其他Oracle系統表也行
                                            下面兩項選中 打勾 表示啟用意外端開時,自動刷新恢復連接            圖標閃動,表示需要重啟動Webligoc             重啟后:               在: Serviers -->JDBC -->Connection Pools-->testPool頁                      target頁 將myserver移到chosen 中 點Apply file://表示那個服務器啟用這個池                     假如有錯誤,一般就是前面的URL錯 或沒有testing指定的那個表,我在這絆了很久                可能需要重啟               然后到Services-->JDBC-->Data Source                     Configure a new JDBC Data Source                    Name:自己起吧                        JNDI Name: 起名為MyJNDI file://這個后面編程要用,區分大小寫                        Pool Name:testPool file://前面建的那個池的名字                        然后點擊Apply                  在target頁,和前面一樣,將myserver移到chosen Apply                  此時若有錯誤,一般為連接池名大小寫問題                重啟動Weblogic 完成     4 開始編程       ·在JB7中新建一個空項目       ·在New 的Enterprise 頁Ejb2.0 bean designer       ·在可視化設計窗口,右鍵,New session bean ,起名字為testsqlBean  type為stateless        ·啟動Oralce        ·添加一個表table3 字段名 A1 再加一條數據 'OKOK' file://最后在Servlet中返回OKOK就算成功       ·在該項目中New一個Class ,作為返回結果用,該類進行了序列化        該類取名為TestString  代碼如下,較為粗糙,沒有優化,其實可以直接返回值的,湊合看吧。     package testpool;     import javax.ejb.*;     import java.sql.*;     import javax.sql.*;     public class TestString implements java.io.Serializable{             private String returnS;             public TestString(String ss){                     returnS=ss;             }                  public String returnStr(){               return returnS;             }             public String getA1(DataSource  ds, String sql)             {String temp="nono"; file://默認為no  Servlet要是返回這個就是失敗了             try{              Connection  conn=ds.getConnection();              Statement stmt=conn.createStatement();              stmt.executeQuery(sql);              ResultSet rs=stmt.getResultSet();              int i=rs.getRow(); file://沒顯示改值,調試時看了看              if(rs.next())                {temp=rs.getString(1);                 }              rs.close();              conn.close();            }             catch(Exception e)             {               e.printStackTrace();             }             return temp;             }     }       ·以下修改testsqlbean.java       需要添加一些類       import java.sql.*;       import javax.sql.*;       其他Home接口或Remote接口用到諸如ResultSet ,DataSource 得自己加入就行,不再復述       添加幾個屬性       String returnString;       DataSource  ds;              ·同時需要修改testsqlbean的ejbCreate代碼為:       public void ejbCreate() throws CreateException {         try{         Context  ctx=new  InitialContext();         ds=(DataSource)ctx.lookup("MyJNDI"); // MyJNDI為前面配置的Weblogic的JDBC的JNDI名
                                  }         catch(Exception e)        { }        }       ·然后。在可視化設計窗口 testsqlBean上右鍵 add method 取名為getMyConn 返回類型為前面自建的TestString        參數為String sql        最后修改該函數代碼如下:        public TestString getMyConn(String sql) {        TestString t1=new TestString(sql);        String returnString=t1.getA1(ds,sql);        return new TestString(returnString);        }            .完成后 Make Project 一次編譯通過后       ·在項目文件列表上,點擊web run       此時不要人工啟動Weblogic 讓JB7去啟動它       假如沒有錯誤,則EJB被自動部署到weblogic上,              · 編一個Servlet作為客戶端         用JB7的New 一個Servlet 起名為testpoolServlet       全部代碼如下       package testpool;          import javax.servlet.*;     import javax.servlet.http.*;     import java.io.*;     import java.sql.*;     import java.util.*;     import javax.naming.*;     import javax.ejb.*;     import java.rmi.RemoteException;     import java.rmi.Remote;     import testpool.testsql;     import testpool.testsqlHome;          public class testpoolServlet extends HttpServlet {       static final private String CONTENT_TYPE = "text/Html; charset=GBK";       TestVector myStr;            file://Initialize global variables       public void init() throws ServletException {       }       file://Process the HTTP Get request       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         response.setContentType(CONTENT_TYPE);         String sql="select * from table3"; file://客戶端給EJB的sql語句         PrintWriter out = response.getWriter();         out.println("");         out.println("testpoolServlet");         out.println("");         out.println("