欢迎来到天天文库
浏览记录
ID:45037767
大小:289.00 KB
页数:29页
时间:2019-11-08
《EJB高级——事务处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、EJB高级——事务处理西安电子科技大学软件学院AgendaContainerManagedTransactionBeanManagedTransaction西安电子科技大学软件学院CMT西安电子科技大学软件学院CMTContainerManagedTransaction程序员在Bean的源程序中没有事务边界控制的代码(如事务开始、回滚、提交等)在部署描述符中指定事务属性,由容器控制事务的边界。容器维护的事务是方法级的即默认将一个方法当作一个事务执行当方法执行的过程中,发生系统级异常,容器会自动将事务回滚,即将方法前面执行的结果恢复。例子背景银行账户例子EJB提供存款
2、、取款、获取余额的操作。西安电子科技大学软件学院Remote接口packagebank;importjavax.ejb.*;importjava.rmi.*;publicinterfaceBankerextendsEJBObject{publicvoiddeposit(StringaccountName,intamount)throwsRemoteException,BankerFailureException;publicvoidwithdraw(StringaccountName,intamount)throwsRemoteException,BankerFai
3、lureException;publicintgetBalance(StringaccountName)throwsRemoteException,BankerFailureException;}定义商业方法西安电子科技大学软件学院Home接口packagebank;importjava.rmi.RemoteException;importjavax.ejb.*;publicinterfaceBankerHomeextendsEJBHome{publicBankercreate()throwsRemoteException,CreateException;}定义cr
4、eate方法西安电子科技大学软件学院Bean类实现(Part1)packagebank;//import...publicclassBankerBeanimplementsSessionBean{DataSourceds;Connectionconn;publicvoidejbCreate()throwsCreateException{try{InitialContextinitialCtx=newInitialContext();ds=(DataSource)initialCtx.lookup("java:comp/env/jdbc/BankDB");}catch
5、(NamingExceptionex){thrownewCreateException("lookupdatasourcefailed");}catch(Exceptione){thrownewCreateException("operationfailed");}}publicvoidejbRemove(){}publicvoidejbPassivate(){}publicvoidejbActivate(){}publicvoidsetSessionContext(SessionContextContext){}//Part2,3}实现ejbCreate方法:查找
6、所用的数据源西安电子科技大学软件学院Bean类实现(Part2)publicvoiddeposit(StringaccountName,intamount)throwsBankerFailureException{try{conn=ds.getConnection();Statementstmt=conn.createStatement();ResultSetres=stmt.executeQuery("SELECT*FROMaccountsWHEREaccountname='"+accountName+"'");if(res.next()){intnewBalan
7、ce;newBalance=res.getInt("balance")+amount;stmt.execute("UPDATEaccountsSETbalance="+newBalance);}else{thrownewBankerFailureException("invalidaccountName");}conn.close();}catch(Exceptione){thrownewBankerFailureException("invalidaccountName");}}publicintgetBalance(StringaccountName)thr
此文档下载收益归作者所有