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("