我有用于门票订单的有状态 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/