我正在使用长轮询开发“某种”聊天应用程序。
我正在使用 Play Framework 1.2.5,并且正在尝试处理多个对话,将其信息存储在使用 JPA 的数据库中。
为了收听每个事件并将其发布到聊天中(有人加入、离开或发短信),我使用了 ArchivedEventStream<Event> 类型的对象,但由于该对象不是实体,Play Framework 找不到在数据库中适合他的类型。
目前,我制作了一个静态 HashMap,其中每个对话的模型 id 作为键,我的 ArchivedEventStream 对象带有事件。我在其中添加了@Transient 注释,以便不将我的 Map 计入数据库并规避错误。
@Transient
public final static HashMap<Long, ArchivedEventStream<PlayEvent>> playEvents = new HashMap<Long, F.ArchivedEventStream<PlayEvent>>();
它暂时有效,许多人可以按照自己的流量使用自己的对话,但过了一段时间,服务器会破坏这个静态变量,产生一些 NullPointerExceptions。
有没有办法将此对象存储到我的数据库中,以便每次对话都可以访问它?
或者,我可以阻止我的服务器 Play 破坏我的变量吗?
甚至,还有其他更好的选择来解决这个问题吗?
非常感谢。