我有门票订购的有状态ejb。我想实现一个功能,如果用户选择门票但不支付费用,那么这个功能在特定的时间段内保持不变,比如10分钟。所以我实现了当用户提交选票时,它们将从可用票证的数据库中删除。现在我需要设置一个计时器,在超时时将检查是否已经付款(可以通过数据库),如果没有 - 将把这些票证返回到数据库。
我会在ejb中为门票订单这样做,但它是有状态的,而EJBTimer服务不支持有状态bean。你会怎么建议这样做?
是否可以将处理超时的任务委托给单独的无状态bean?在这种情况下,它将只有创建使用@Timeout注释的计时器和方法的方法。我不知道如何将有关所选票证的所有细节传递给无状态bean,因为它们不能保存为bean属性(bean无状态的原因)。我只能将它们传递给创建计时器的方法,但它们必须在超时调用的方法中使用。
P.S。我正在使用glassfish 3.1
感谢您的帮助。
答案 0 :(得分:2)
您可以通过在创建计时器时传递信息来将详细信息传递给超时方法。
您可以传递序列化对象 - 适当的数据结构来保存票证信息,也可以更改现有类以实现Serializable
接口。
createTimer(long duration, Serializable info)
现在,在超时期限之后,您可以通过调用info
对象上的getInfo()
来获取超时方法中的此Timer
对象。
[还有其他方法可用于创建计时器的不同签名]