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("
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也很簡單,作為測試用,不再贅述?