java会话bean.docx
- 文档编号:9516629
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:29
- 大小:36.95KB
java会话bean.docx
《java会话bean.docx》由会员分享,可在线阅读,更多相关《java会话bean.docx(29页珍藏版)》请在冰豆网上搜索。
java会话bean
第十五章Java会话Bean
下面是一个无状态会话Bean的Homeinterface编程实例:
importjava.rmi.RemoteException;
importjavax.ejb.*;
publicinterfaceBookDealerHomeextendsEJBHome
{
//无状态的会话Bean的Homeinterface
//只能有一个没参数的create()函数,且必须返回Bean的Remoteinterface
publicBookDealercreate()
throwsCreateException,RemoteException;
}
下面是无状态会话Bean的Remoteinterface的编程实例:
importjava.util.Collection;
importjava.rmi.RemoteException;
importjavax.ejb.*;
//用户自定义的包
importbookstore.ejb.NoSuchBookException;
publicinterfaceBookDealerextendsEJBObject
{
//根据业务需要定义的各种business函数
//这些函数将在EJB的Beanclass中具体实现
publicbooleanbuyBook(Stringbooksn)
throwsRemoteException,NoSuchBookException;
publicCollectiongetAvailableBooksInPriceRange(Stringbooktype,
floatmaxprice)
throwsRemoteException;
}
以下,是一个无状态会话Bean的编程实例:
//引入需要的包
importjava.util.*;
importjava.sql.*;
importjavax.ejb.*;
importjavax.sql.*;
importjavax.naming.*;
//引入用户自定义的包
importbookstore.ejb.*;
publicclassBookDealerBeanimplementsSessionBean
{
SessionContextctx;
//程序运行中所连接的数据源的参考
privatejavax.sql.DataSourceds;
//setSessionContext函数用于取得一些运行中使用的资源
publicvoidsetSessionContext(SessionContextctx)
{
//保留SessionContext对象的参考,以备运行中其他函数使用
this.ctx=ctx;
……
//取得数据源的参考,以备运行中其他函数需要数据库操作时使用
……
}
//没作用的callback函数但因为implements了SessinBean接口,
//所以仍需定义
publicvoidejbCreate(){}
publicvoidejbRemove(){}
publicvoidejbPassivate(){}
publicvoidejbActivate(){}
//实现Remoteinterface中定义的business函数
publicCollectiongetAvailableBooksInPriceRange(Stringbooktype,floatmaxPrice)
{
……
}
publicbooleanbuyBook(Stringbooksn)
throwsNoSuchBookException
{
……
}
}
例如,下面的实例将ExampleEJB中名为getContext()的函数的事务管理属性指定为Required。
下面的代码实例说明了如何使用JTA实现Bean的事务管理:
UserTransactiontx=ctx.getUserTransaction();
try{
tx.begin();
……
business_Method()
……
mit();
}
catch(Exceptione)
{
try{
tx.rollback();
}
catch(SystemExceptionsysex)
{
thrownewEJBException(
"Rollbackfailure:
"+sysex.toString());
}
thrownewEJBException("Rollbackfailure:
"+e.toString());
}
本实例选用Oracle8作为后台数据库。
//实例文件:
bookstore.sql:
建立数据表,并插入一些演示数据
DROPTABLEbook;
CREATETABLEbook(
booksnvarchar(8),
booknamevarchar(30),
authorvarchar(30),
booktypevarchar(20),
pricenumber(5,2)
);
INSERTINTObookVALUES('0001','ThinkinginJava','BruceEckel','Java',60.00);
INSERTINTObookVALUES('0002','JavaandXML','McLaughlin','Java',69.00);
INSERTINTObookVALUES('0003','ThinkinginC++','BruceEckel','C++',39.00);
INSERTINTObookVALUES('0004','JavaCookbook','Darwin','Java','89.00');
15.2.3编写代码
1、图书信息对象:
BookValueObject.java
这个实例程序要求有一个表示图书种类,价格等信息的对象BookValueObject。
BookDealer访问数据库,并用查询的结果填充这个对象,最后把这个对象返回给客户机。
客户机程序从BookValueObject中提取各种图书的信息。
因为这个对象是通过远程接口传递的,所以必须实现java.io.Serializable接口。
//图书信息对象:
BookValueObject.java
//将本接口定义在包bookstore.ejb
packagebookstore.ejb;
importjava.io.*;
publicfinalclassBookValueObjectimplementsSerializable{
//换行符
privatestaticStringEOL=System.getProperty("line.separator");
//图书的各种基本信息
privateStringbooksn;
privateStringbookname;
privateStringauthor;
privateStringbooktype;
privatefloatbookprice;
//无参数构造函数
publicBookValueObject(){}
/*
*构造函数
*参数:
各种图书的基本信息
*/
publicBookValueObject(Stringbsn,Stringbname,Stringau,
Stringbtype,floatbprice)
{
setBooksn(bsn);
setBookname(bname);
setAuthor(au);
setBooktype(btype);
setBookprice(bprice);
}
//重载java.lang.Object的toStrng()函数
publicStringtoString(){
StringBuffersb=newStringBuffer();
sb.append(EOL);
sb.append("编号:
"+getBooksn());
sb.append("书名:
"+getBookname());
sb.append("作者:
"+getAuthor());
sb.append("类别:
"+getBooktype());
sb.append("价格:
"+getBookprice());
sb.append(EOL);
returnsb.toString();
}
publicStringgetBooksn(){returnthis.booksn;}
publicvoidsetBooksn(Stringbsn){this.booksn=bsn;}
publicStringgetBookname(){returnthis.bookname;}
publicvoidsetBookname(Stringbname){this.bookname=bname;}
publicStringgetAuthor(){returnthis.author;}
publicvoidsetAuthor(Stringau){this.author=au;}
publicStringgetBooktype(){returnthis.booktype;}
publicvoidsetBooktype(Stringbtype){this.booktype=btype;}
publicfloatgetBookprice(){returnthis.bookprice;}
publicvoidsetBookprice(floatbprice){this.bookprice=bprice;}
}
2、自定义的异常类:
NoSuchBookException.java
本实例还需要一个用户自定义的异常类NoSuchBookException,以当用户欲购买一本不存在的图书时,报告异常。
//自定义的异常类:
NoSuchBookException.java
packagebookstore.ejb;
publicclassNoSuchBookExceptionextendsException
{
publicNoSuchBookException(){}
publicNoSuchBookException(Stringmsg){super(msg);}
}
3、有状态会话Bean:
BookBuyer
//Remoteinterface:
BookBuyer.java
//将本接口定义在bookstore.buyer.ejb下,结构分明,便于管理
packagebookstore.ejb.buyer;
//有状态Bean-BookBuyer的Remoteinterface
importjava.util.Collection;
importjava.rmi.RemoteException;
importjavax.ejb.EJBObject;
importbookstore.ejb.*;
publicinterfaceBookBuyerextendsEJBObject
{
/*
*业务逻辑函数:
查询符合客户要求的书籍
*参数:
无
*返回:
java.util.Collection符合要求的书目
*异常:
java.rmi.RemoteException
*/
publicCollectiongetAvailableBooks()
throwsjava.rmi.RemoteException;
/*
*业务逻辑函数:
购买指定的书籍
*参数:
Stringbsn书籍的编号
*返回:
boolean交易成功
*异常:
java.rmi.RemoteException
*bookstore.ejb.NoSuchBookException
*/
publicbooleanbuyBook(Stringbsn)
throwsRemoteException,NoSuchBookException;
}
//Hoeminterface:
BookBuyerHome.java
//将本接口定义在bookstore.buyer.ejb下,结构分明,便于管理
packagebookstore.ejb.buyer;
//有状态Bean-BookBuyer的Homeinterface
importjava.rmi.RemoteException;
importjavax.ejb.CreateException;
importjavax.ejb.EJBHome;
publicinterfaceBookBuyerHomeextendsEJBHome
{
/*
*create函数:
获取Remoteintface的参考
*参数:
Stringbooktype书目的类别
*floatmaxPrice查询书目的价格上限
*返回:
BookBuyerBookBuyer的Remoteinterface
*异常:
java.rmi.RemoteException
*javax.ejb.CreateException
*/
publicBookBuyercreate(Stringbooktype,floatmaxPrice)
throwsCreateException,RemoteException;
}
//Beanclass:
BookBuyerBean.java
//将本接口定义在包bookstore.buyer.ejb下
packagebookstore.ejb.buyer;
//引入所使用的类
importjava.rmi.RemoteException;
importjava.util.*;
importjavax.ejb.*;
importjavax.naming.*;
importjavax.rmi.*;
//引入用户自定义的类
importbookstore.ejb.NoSuchBookException;
importbookstore.ejb.dealer.*;
publicclassBookBuyerBeanimplementsSessionBean
{
//SessinContext的参考
privateSessionContextctx;
//用户欲查询图书的类型和最高价格
privateStringbookType;
privatefloatmaxPrice;
//对无状态会话Bean——BookDealer的参考
privateBookDealerbookDealer;
/*
*callback函数
*参数:
SessinContextEJBContaienr参入的SessionContext对象的参考
*/
publicvoidsetSessionContext(SessionContextc){
ctx=c;
}
/*
*ejbCreate函数:
实现Homeinterface中实现的create函数
*参数:
Stringbooktype书目的类别
*floatmaxPrice查询书目的价格上限
*返回:
void
*/
publicvoidejbCreate(Stringbooktype,floatmaxPrice)
{
this.bookType=booktype;
this.maxPrice=maxPrice;
//通过Jndi获得有状态会话Bean的Homeinterface参考
BookDealerHomebookDealerHome=null;
try{
Contextic=newInitialContext();
Objecth=ic.lookup("BookDealerEJB");
bookDealerHome=(BookDealerHome)
PortableRemoteObject.narrow(h,BookDealerHome.class);
}
catch(NamingExceptionne)
{
ne.printStackTrace();
thrownewEJBException("ExceptionduringlookupBookDealerHome");
}
//获得有状态会话Bean的Remoteinterface参考
try
{
bookDealer=bookDealerHome.create();
}
catch(Exceptione)
{
e.printStackTrace();
thrownewEJBException("ExceptionduringgetBookDealerRemoteinterface");
}
}
//callback函数,在本实例中用不着,但由于implements了SessionBean,
//所以还是必须实现它们。
publicvoidejbRemove(){}
publicvoidejbActivate(){}
publicvoidejbPassivate(){}
/*
*业务逻辑函数:
查询符合客户要求的书籍
*参数:
无
*返回:
java.util.Collection符合要求的书目
*异常:
java.rmi.RemoteException
*/
publicCollectiongetAvailableBooks()
throwsRemoteException{
//调用BoookDealer提供的服务:
getAvailableBookInPriceRange
returnbookDealer.getAvailableBooksInPriceRange(bookType,maxPrice);
}
/*
*业务逻辑函数:
购买指定的书籍
*参数:
Stringbsn书籍的编号
*返回:
boolean交易成功
*异常:
java.rmi.RemoteException
*/
publicbooleanbuyBook(Stringbsn)
throwsRemoteException,NoSuchBookException
{
//调用BoookDealer提供的服务:
buyBook(String)
returnbookDealer.buyBook(bsn);
}
}
3、无状态会话Bean:
BookDealer
//Remoteinterface:
BookDealer.java
packagebookstore.ejb.dealer;
//引入所需的类
importjava.util.Collection;
importjava.rmi.RemoteException;
importjavax.ejb.*;
//引入用户自定的异常类
importbookstore.ejb.NoSuchBookException;
publicinterfaceBookDealerextendsEJBObject
{
//根据业务需要定义的各种业务函数
/*
*业务逻辑函数:
删除数据库中相应的数据记录
*参数:
Stringbsn书籍的编号
*返回:
boolean交易成功
*异常:
java.rmi.RemoteException
*bookstore.ejb.NoSuchBookException
*/
publicbooleanbuyBook(Stringbooksn)
throwsRemoteException,NoSuchBookException;
/*
*业务逻辑函数:
查询数据库中符合用户要求的书籍信息
*参数:
Stringbooktype书籍的种类
*floatmaxPrice书籍的最高价格
*返回:
java.util.Collection符合查询条件的书籍信的信息对象(BookValueObject)的集合
*异常:
java.rmi.RemoteException
*/
publicCollectiongetAvailableBooksInPriceRange(Stringbooktype,floatmaxprice)
throwsRemoteException;
}
//Homeinterface:
BookDealerHome.java
packagebookstore.ejb.dealer;
importjava.rmi.RemoteException;
importjavax.ejb.*;
publicinterfaceBookDealerHomeextendsEJBHome
{
//无状态的会话Bean的Homeinterface
//只能有一个没参数的create()函数,且必须返回Bean的Remoteinterface
publicBookDealercreate()
throwsCreateException,RemoteExcepti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 会话 bean