隨筆-17  評論-64  文章-79  trackbacks-1

          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("");
          ??? out.println("");
          ??? out.println("

          ");
          ??? try {
          ????? Context context=new? InitialContext();
          ????? Object objref = context.lookup("testsqlBean");// EJB中那個SessionBean的名字
          ???? testsqlHome home = (testsqlHome)javax.rmi.PortableRemoteObject.narrow(objref,testsqlHome.class);
          ????? testsql servletsql=home.create();
          ????? TestString myTStr=servletsql.getMyConn(sql);
          ????? String myStr=myTStr.returnStr();
          ????? out.println(" ");
          ??? out.println("
          This is=="+myStr+"
          ");
          ??? out.println("

          The servlet has received a GET. This is the reply.

          ");
          ??? out.println("");
          ??? } catch (Exception e) {
          ??????? out.println("A problem has occurred with the servlet.");
          ??? }
          ? }

          ? file://Clean up resources
          ? public void destroy() {
          ? }
          }
          ?????
          ?.完成后 Web Run Use "testpoolServlet"?
          ?
          ?或者·手工啟動Weblogic 輸入http://localhost:7001/testpoolservlet
          ?
          ?最后結果應該顯示為????????????
          ??????????????? This is==okok
          ??????????????? The servlet has received a GET. This is the reply
          ???????????????
          ?一般錯誤發生為:剛才Oracle插入數據時,沒有Commit,所以查詢不到。
          ??????????????? 為這個問題,曾迷惑我半天,失敗啊,哈哈
          ??
          ?? JB7還是不錯的,可以運行時單步調試EJB
          ?? 還可以為Bean中建一個testsqlBeanTestClient1,不用Servlet也很簡單,作為測試用,不再贅述?

          posted on 2007-03-26 13:56 飛鳥 閱讀(439) 評論(0)  編輯  收藏 所屬分類: 數據庫
          主站蜘蛛池模板: 章丘市| 平度市| 林甸县| 宿迁市| 合水县| 鄂托克前旗| 来安县| 井冈山市| 遵化市| 武邑县| 睢宁县| 池州市| 通辽市| 延边| 兖州市| 宿迁市| 昭苏县| 花莲市| 册亨县| 枣阳市| 达拉特旗| 张掖市| 临武县| 晋中市| 申扎县| 通榆县| 西吉县| 东阳市| 中山市| 尼勒克县| 江西省| 巴中市| 衡水市| 栾川县| 中山市| 剑阁县| 南通市| 长海县| 乌拉特前旗| 珠海市| 巴东县|