第19章 实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第19章实例主要内容:无状态会话Bean实例,完成的功能是计算个人所得税;有状态会话Bean实例,模拟一个网上书店的购物车;WebService实例,是一个无状态会话Bean,能够对用户进行简单的响应;定时服务实例,定时服务是JavaEE5中的一个比较特殊的服务。19.1无状态会话Bean实例19.1.1实例功能描述使用EJB完成个人所得税的计算,计算的时候需要提供应纳税部分工资和起征点。采用无状态会话Bean:因为不需要保存客户端信息。该实例由两个文件组成业务接口Bean类包括两种类型的客户端Application客户端Web客户端,采用JSP19.1.2创建业务接口/*PersonalRevenue.java*/packagech19;importjavax.ejb.Remote;@Remote()publicinterfacePersonalRevenue{publicfloatgetPersonalRevenue(floatsalary,floatstart);}需要实现业务接口中的方法@Stateless表示EJB是无状态会话BeanimplementsPersonalRevenue表示实现了业务接口PersonalRevenue。代码://PersonalRevenueBean.java19.1.3创建Bean类19.1.4创建Application客户端获取对EJB实例的引用@EJBprivatestaticPersonalRevenuepersonalRevenue;访问EJB的业务方法floatrevenue=personalRevenue.getPersonalRevenue(3000,1600);完整代码//PersonalRevenueClient.java19.1.5创建Web客户端使用page指令导入要用到的类%@pageimport=com.neu.javaee.ejb,javax.naming.*%查找业务接口%!privatePersonalRevenuepersonalRevenue=null;publicvoidjspInit(){try{InitialContextic=newInitialContext();personalRevenue=(PersonalRevenue)ic.lookup(PersonalRevenue.class.getName());}catch(Exceptionex){System.out.println(不能创建personalRevenuebean。+ex.getMessage());}}publicvoidjspDestroy(){personalRevenue=null;}%调用业务方法%Stringsalary=request.getParameter(salary);Stringstart=request.getParameter(start);if(salary!=null&&salary.length()0&&start!=null&&start.length0){try{floatfsalary=Float.parseFloat(salary);floatfstart=Float.parseFloat(fstart);floatrevenue=personalRevenue.getPersonalRevenue(fsalary,fstart);}catch(Exceptionex){out.println(应该输入大于0的数字!);}}%19.2有状态会话Bean实例功能:本实例模拟一个网上书店的购物车,能够向购物车中添加图书、能够删除购物车中的图书、能够察看购物车中的信息。包含两个文件业务接口会话Bean类涉及两个辅助类IdVerifierBookException19.2.1业务接口packagech19;importjava.util.List;importjavax.ejb.Remote;@RemotepublicinterfaceCart{publicvoidinitialize(Stringperson)throwsBookException;publicvoidinitialize(Stringperson,Stringid)throwsBookException;publicvoidaddBook(Stringtitle);publicvoidremoveBook(Stringtitle)throwsBookException;publicListStringgetContents();publicvoidremove();}19.2.2Bean类使用Stateful进行标识实现业务接口publicclassCartBeanimplementsCart实现业务接口中定义的所有业务方法实现Remove方法@Remove()publicvoidremove(){contents=null;}19.2.3辅助类IdVerifier验证ID是否合法BookException自定义的异常类19.2.4访问过程与无状态会话Bean的访问过程相同19.3WebService实例作为WebService的会话Bean必须是无状态会话Bean。另外还有如下特殊要求:使用javax.jws.WebService或者javax.jws.WebServiceProvider标识标记。实现类可以通过@WebService标识的endpointInterface元素显式的引用一个SEI。实现类的业务方法必须是public,并且不能被声明为static、final或者abstract。给WebService客户端的业务方法使用javax.jws.WebMethod元注释标记。给WebService客户端的业务方法的参数和返回值类型必须与JAXB兼容。实现类必须有一个默认的公有类型的构造器。实现类必须使用@Stateless进行标识。实现类不能定义finalize方法。实现类可以实现生命周期事件回调方法19.4使用定时服务定时功能要解决的问题在某个特定的时刻产生一个事件在一段时间之后产生一个事件以一定的时间间隔产生某个事件EJB容器的定时服务能够为所有EJB提供定时服务;编写定时服务的过程在需要定时服务的EJB的Bean类中编写一个方法,方法中包含当定时事件发生时候的处理代码。方法的返回值是void,参数是javax.ejb.Timer对象。使用@Timeout元注释修饰这个方法,写在方法的前面即可。使用定时服务包括得到TimerService对象。调用TimerService的createTimer方法创建Timer。这样当时间到期的时候系统会调用Bean的定时方法。如果需要取消Timer可以调用Timer接口的cancel方法。如果需要访问Timer的信息,可以通过Timer接口访问。19.4.1Timeout方法@Timeoutpublicvoidtimeout(Timertimer){System.out.println(TimerBean:timeout发生了);}19.4.2TimerService接口可以通过依赖注入访问TimerService可以通过EJBContext接口的getTimerService方法查找可以通过JNDI名字空间查找主要方法createTimer,参数:时间(毫秒)和信息。(某个时间段之后)createTimer,参数:时间(毫秒)、间隔(毫秒)和信息。(某个时间段之后,以特定间隔)createTimer,参数:时刻和信息。(某个特定的时间)createTimer,参数:时刻、间隔(毫秒)和信息。(某个特定时刻之后,以特定间隔)getTimers,得到定时器19.4.3Timer和TimerHandleTimer接口允许Bean提供者取消定时器或者获取定时器信息。主要方法:cancel,取消定时服务getTimeRemaining,获取剩余时间getNextTimeout,获取下一次事件的时间getHandle,得到TimerHandlegetInfo,得到定时信息TimerHandle接口允许Bean提供者获取串行化的timer。主要方法:getTimer,获取定时器19.4.4创建定时器调用TimerService接口的createTimer方法。调用createTimer的时候,定时服务开始不停的减少时间的长度实例:Timertimer=timerService.createTimer(intervalDuration,Creatednewtimer);19.4.5取消和保存定时服务Timer可以被下面的事件取消:当单事件定时器超时的时候,EJB容器调用@Timeout方法,然后取消Timer。当调用Timer接口的cancel方法的时候,容器取消定时器。要保存Timer,调用getHandle得到TimerHandle对象,该对象可以串行化然后保存到数据库。要获取保存的Timer,先从数据库中得到TimerHandle对象,然后调用getTimer方法。19.4.6获取定时器信息publiclonggetTimeRemaining();publicjava.util.DategetNextTimeout();publicjava.io.SerializablegetInfo();19.4.7事务和定时服务如果事务回滚了,定时器的创建也要回滚。如果在事务内取消了定时器,这个事务回滚了,则取消定时器这个动作也要回滚。在使用容器管理事务的Bean中,@Timeout方法通常使用Required事务属性来保证事务的整体性。TimerSession.javaTimerSessionBean.javatimerTest.jsp19.4.8实例本章小结无状态会话Bean有状态会话Bean作为WebService的Bean定时服务下一章消息服务与消息驱动Bean

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功