2013-04-23 85 views
2

我正在開發使用長輪詢的「種類」聊天應用程序。如何使用JPA將非實體對象存儲到數據庫中? (Play Framework)

我正在使用Play Framework 1.2.5,我試圖處理使用JPA將他們的信息存儲在數據庫中的多個對話。

爲了聆聽併發布每個事件進入聊天(某人加入,離開或發短信)我使用的類型爲ArchivedEventStream < Event>的對象,但由於此對象不是實體,Play Framework不會在數據庫中找不到適合他的類型。

目前,我做了一個靜態HashMap,每個對話的Model ID作爲關鍵字,而我的ArchivedEventStream對象則帶有事件。我將@Transient註解添加到它中,不計算我的Map到數據庫中並避免錯誤。

@Transient 
public final static HashMap<Long, ArchivedEventStream<PlayEvent>> playEvents = new HashMap<Long, F.ArchivedEventStream<PlayEvent>>(); 

它適用於當下,很多人可以使用下面自己通量自己的談話,但一段時間後,服務器將刪除此生產一些NullPointerExceptions的靜態變量。

有什麼辦法可以將這個對象存儲到我的數據庫中,這樣它就可以訪問每個對話嗎?

或者,我可以停止我的服務器玩毀滅我的變量?

甚至,有沒有其他更好的選擇來解決這個問題?

非常感謝。

回答

0

用Play存儲狀態的最佳方式是在緩存中。 但是,這不會保證您的事件始終可用(服務器重新啓動,ttl ...)

如果您需要這些事件永久可用,您需要將它們保存到數據庫中。 您可以獲取ArchivedEventStream實現模型,將它們存儲在緩存中,並在緩存中未命中時從數據庫中檢索它們。

相關問題