jakarta-ee - 使用有状态 ejb 的 TimerService 的解决方法

标签 jakarta-ee timer ejb

我有用于门票订单的有状态 ejb。我想实现一个功能,如果用户选择门票但未付款,则该门票会保留特定时间段(例如 10 分钟)。因此,我实现了当用户提交门票选择时,它们将从可用门票数据库中删除。现在我需要设置一个计时器,在超时时将检查付款是否已完成(可以通过数据库进行),如果没有,则将这些票据返回到数据库。

我会在票据订单的 ejb 中执行此操作,但它是有状态的,并且 EJBTimer 服务不支持有状态 bean。您建议如何做?

是否可以将处理超时的任务委托(delegate)给单独的无状态 bean?在这种情况下,它将只有创建计时器的方法和用 @Timeout 注释的方法。我不知道如何将所选票证的所有详细信息传递给无状态 bean,因为它们不能保留为 bean 属性(因为 bean 是无状态的)。我只能将它们传递给创建计时器的方法,但它们必须在超时时调用的方法中使用。

附注我正在使用 glassfish 3.1

感谢您的帮助。

最佳答案

您可以通过在创建计时器时传递信息来将详细信息传递给超时方法。

您可以传递序列化对象 - 适当的数据结构来保存票证信息,也可以更改现有类以实现 Serialized 接口(interface)。

createTimer(长持续时间,可序列化信息)

现在,在超时时间过后,您可以通过在 Timer 上调用 getInfo() 来在超时方法中获取此 info 对象对象。

[还有其他具有不同签名的方法可用于创建计时器]

关于jakarta-ee - 使用有状态 ejb 的 TimerService 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19662943/

相关文章:

java - 使用 JMS 访问 MQ

Tomcat 单点登录 : server console app and my own apps realms clashing

jsp - Tomcat 没有将 .jsp 转换为 servlet?

java - 如何在计时器倒计时到 0 后禁用 JButton

java - EJB 事务回滚异常

javax.ejb.TransactionRolledbackLocalException(Glassfish 3 + JPA + EclipseLink)

java - 为什么 `@In(create = true)` 不能在 Seam 中创建对象?

cocoa - 如何获取 "Total Minutes"(定时器)

c++ - C++ 中的精确定时器队列

java - Java EE 中的异步执行