具有有状态ejb的TimerService的解决方法

时间:2013-10-29 15:44:37

标签: java-ee timer ejb

我有门票订购的有状态ejb。我想实现一个功能,如果用户选择门票但不支付费用,那么这个功能在特定的时间段内保持不变,比如10分钟。所以我实现了当用户提交选票时,它们将从可用票证的数据库中删除。现在我需要设置一个计时器,在超时时将检查是否已经付款(可以通过数据库),如果没有 - 将把这些票证返回到数据库。

我会在ejb中为门票订单这样做,但它是有状态的,而EJBTimer服务不支持有状态bean。你会怎么建议这样做?

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

P.S。我正在使用glassfish 3.1

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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

createTimer(long duration, Serializable info)

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

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