在这篇文章中...。
- EJB计时器旋风之旅
- 通过带有示例实现的简单REST接口即时使用EJB计时器
更新(2015年7月14日)
现在可以在OpenShift上使用该应用程序的前端 。 由于我是前端新手,因此我在其他来源的帮助下组装了此HTML5 + AngularJS应用程序:)因此,它可能有些笨拙。 在我尝试改善此问题的同时,请多包涵!
在用户界面中,您可以:
- 查看所有活动计时器
- 创建一个计时器
- 取消计时器
更新(2015年7月14日)
如果您需要自动创建计时器,则EJB @Schedule注释会派上用场。 可以使用类似cron的表达式来配置适当的时间表。 如果您需要更多的灵活性,可以使用旧的TimerService来作为一种魅力。
快速背景
- 在EJB 2.1中引入了TimerService接口[是的.. J2EE天! ;-)]
- 用于以编程方式创建Timer对象
- 用于与TimedObject接口[EJB 3.0之前的版本]的实现配合使用,以用作计时器触发器的回调
- 从EJB 3.0开始, @ Timeout批注用于标记(无状态/单例/消息驱动)Bean中的方法,以充当EBJ容器中的计时器回调的接收者。
- EJB 3.1中引入了ScheduleExpression ,使事情得到了进一步的改善,它允许进行细粒度的计时器调度–这与@Schedule在程序上等效
EJB Timer相关组件(快速参考)
- @时间表
- @时间表
- 计时器服务
- 计时器
- 定时对象
- @超时
- 计时器句柄
- ScheduleExpression
RESTful计时器
可以轻松地公开一个简单的RESTful接口,以与EJB Timers一起使用。 创建计时器,获取计时器详细信息以及取消计时器之类的操作可以即时执行。
这个Github项目提供了一个简单的实现。 这是一个基于Netbeans的简单Java EE 7 Maven项目。 您应该能够轻松进行设置。
这是要点
- 发布请求以计划计时器(JSON / XML有效负载代表计划配置)
@POST @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response schedule(@HeaderParam("name") final String timerName, final ScheduleConfiguration config) {auditScheduler.schedule(from(config), new TimerConfig(timerName, config.isPersistent()));return Response.created(UriBuilder.fromResource(AuditSchedulerResource.class).path(timerName).build(timerName)).build(); }
- 获取所有活动计时器及其各自的详细信息(JSON / XML表示形式)
@GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getAllTimers() {List<String> ejbTimers = auditScheduler.getAllTimers();List<ScheduledTimerInfo> timers = ejbTimers.stream().map((id) -> auditScheduler.getTimerInfo(id)).collect(Collectors.toList());GenericEntity<List<ScheduledTimerInfo>> entities = new GenericEntity<List<ScheduledTimerInfo>>(timers) {};return Response.ok(entities).build(); }
- 获取特定计时器的信息(JSON / XML表示形式)
@GET @Path("{id}") @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getTimerInfo(@PathParam("id") String name) {ScheduledTimerInfo info = auditScheduler.getTimerInfo(name);return Response.ok(info).build(); }
- 删除(取消)现有计时器
@DELETE @Path("{id}") public void cancel(@PathParam("id") String name) {auditScheduler.cancel(name); }
- 使用带有JAXB注释的POJO表示调度程序配置和详细信息
- 利用Java EE 7中的默认JSON支持
WADL应该讲故事:
干杯!
翻译自: https://www.javacodegeeks.com/2015/07/restful-timers-in-java-ee.html