明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

使用JDBC RowSet讓EJB返回?cái)?shù)據(jù)集(手記)

[摘要]利用JDBC RowSet讓EJB返回?cái)?shù)據(jù)集(手記)**************************************************************************前言: 前幾日在Weblogic6.1上試驗(yàn)使用數(shù)據(jù)集OK(EJB和客戶端都在Weblogic上)...
利用JDBC RowSet讓EJB返回?cái)?shù)據(jù)集(手記)

**************************************************************************
前言:

 前幾日在Weblogic6.1上試驗(yàn)使用數(shù)據(jù)集OK(EJB和客戶端都在Weblogic上),后來(lái)將
客戶端部署到另外一臺(tái)服務(wù)器上(運(yùn)行Resin),想由Resin上的JSP客戶端調(diào)用來(lái)獲得
Weblogic上的EJB返回的數(shù)據(jù)集,發(fā)現(xiàn)行不通.
 經(jīng)過(guò)日夜搜索,終于發(fā)現(xiàn)一偏關(guān)于JDBC RowSet的文章(JDBC 2.0 Optional Package API),
正是我想要的.
 馬上行動(dòng)!

**************************************************************************

注意:安以下步驟部署你必須熟悉Weblogic6.1的EJB部署,數(shù)據(jù)源部署.

1.到http://developer.java.sun.com/developer/earlyAccess/下載rowset.jar

//JDBC RowSet The three JDBC RowSet implementations in this release demonstrate some of the many possibilities for implementing the javax.sql.RowSet interface, which is part of the JDBC 2.0 Optional Package API. (June 30, 2000)


2.將rowset.jar放到你的CLASSPATH中.(我使用的是Weblogic6.1)

3.寫你的EJB,如下列:
************************************************************************
CoffeesEJB.java
************************************************************************
import java.sql.*;
import javax.sql.*;
import sun.jdbc.rowset.*;//倒入rowset.jar類
import javax.naming.*;
import javax.ejb.*;

public class CoffeesEJB implements SessionBean {

private SessionContext sc = null;
private Context ctx = null;
private DataSource ds = null;

public CoffeesEJB () {}

public void ejbCreate() throws CreateException {

try {
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("bbb.OracleThintxds"); //數(shù)據(jù)源
}
catch (Exception e) {
System.out.println(e.getMessage());
throw new CreateException();
}
}

public RowSet getCoffees() throws SQLException {

Connection con = null;
ResultSet rs;
CachedRowSet crs;

try {
con = ds.getConnection("system", "command1"); //EJB Server的用戶和密碼,我用的是Weblogic6.1
Statement stmt = con.createStatement();
rs =stmt.executeQuery("select * from coffees");

crs = new CachedRowSet();
crs.populate(rs);
// the writer needs this because JDBC drivers
// don't provide this meta-data.
crs.setTableName("coffees");

rs.close();
stmt.close();
} finally {
if (con != null)
con.close();
}
return crs;
}


 
//
// Methods inherited from SessionBean
//

public void setSessionContext(SessionContext sc) {
this.sc = sc;
}

public void ejbRemove() {}
public void ejbPassivate() {}
public void ejbActivate() {}


}
************************************************************************

4.發(fā)布CoffeesEJB到你的EJB Server上.
ok!EJB在EJB Server上的部署完成!下面是客戶端的部署.

5.同樣將rowset.jar放到你的客戶端服務(wù)器的CLASSPATH中.(我使用的是Resin2.0)

6.寫你的客戶端jsp代碼,如下列:
************************************************************************
CoffeesClient.jsp
************************************************************************
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="sun.jdbc.rowset.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="weblogic.jndi.T3InitialContextFactory" %>
<% // 來(lái)自weblogic.jar%>
<%@ page import="java.io.*"%>
<%@ page import="javax.rmi.*"%>

<%@ page import="Coffees"%>
<%@ page import="CoffeesHome"%>
<%@ page contentType="text/html;charset=big5" %>


<%
Properties p = new Properties() ;
p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.T3InitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://192.1.1.23:7001");//Weblogic服務(wù)器的地址和端口

String info="";
try{
Context initial = new InitialContext(p);

Object objref = initial.lookup("statelessSession.Coffees");

CoffeesHome home =(CoffeesHome)PortableRemoteObject.narrow(objref,CoffeesHome.class);
Coffees currencymyString = home.create();

CachedRowSet rset = (CachedRowSet)currencymyString.getCoffees();


String coffeeName="";
while (rset.next()) {

 coffeeName = rset.getString("COF_NAME");
 out.println(coffeeName + "<BR><HR size=1>" );
}

out.println("<br>********************<br>");

currencymyString.remove();

}catch(javax.naming.NamingException ne){
 info = "錯(cuò)誤:EJB服務(wù)器找不到!無(wú)法使用遠(yuǎn)程方法.<br>" + ne.toString();
}catch(java.rmi.RemoteException re){
 info = re.toString();
}catch(javax.ejb.CreateException ce){
 info = ce.toString();
}catch(javax.ejb.RemoveException re){
 info = re.toString();
}
 

out.println("<hr>"+info+"<hr>");
out.println("<hr>Test By Jun_bai@sohu.com<hr>");
%>

************************************************************************

7.運(yùn)行客戶CoffeesClient.jsp

如果報(bào)錯(cuò)肯定是你的CLASSPATH問(wèn)題,仔細(xì)看看一定成功!



全文完

=======================================================
火火火 于2002/3/8虎門 jun_bai@sohu.com
=======================================================