2011-12-02 42 views
0

當閱讀有關Java的狀態和無狀態bean的文件,我有點明白,但有這種一般的情況下,使我困惑:需要澄清的Java狀態bean

  • 我有一個Web服務,它需要在內存中數據來處理請求,並且這些數據通過Web服務請求添加到內存中,而不是從數據庫加載。爲了簡單起見,請考慮Web服務提供處理學生數據的方法,但首先,需要將班級中所有學生的數據放入內存中,假設數據只是暫時的,把它們從任何數據庫中加載並加載。
  • 假設第一步我們有3個客戶端調用Web服務來將許多學生的數據添加到Web服務中。
  • 第二步,每個客戶調用一個web服務方法,int getRank(student)表示,這個方法的實現只是循環所有學生的數據,並根據他在特定主題上的標記檢查輸入學生的排名。就這樣,一個整數將被返回,我們不需要存儲任何客戶服務相關的東西,所以我想我們不需要一個有狀態的bean。然而,由於在每次將學生數據發送到服務器之後,這些數據需要留在內存中,似乎我們在這裏有某種有狀態的東西,但我不知道它叫什麼,並且這是否使服務稱爲有狀態的Web服務。

謝謝你的任何想法。

回答

0

這聽起來像「緩存」給我。您定期更新駐留在內存中的一大塊數據以節省網絡延遲;這是可能的,因爲塊不是太大。

我想說任何標準的緩存解決方案都可以。加載值時必須小心,以確保讀取操作不會發生,並確保它是有序的過程。多個客戶不應該有任何機會損害其他人的數據。

我同意 - 你不需要有狀態的會話bean。你需要緩存。

+0

謝謝。 「緩存」聽起來很複雜,如果我有一個全局數據收集對象,並且只是將項目添加到該列表中,該怎麼辦? – longbkit

+1

緩存應該是「大部分讀取」的 - 你比它更頻繁地讀取緩存。這聽起來像你的多客戶端加載操作是週期性的,沒有寫入。真的嗎?如果沒有,您只需在寫操作和無效值期間進行同步,以確保沒有人看到過時的數據。查看產品 - EhCache和Terracotta是開源的。連貫性不是。 http://www.terracotta.org/ – duffymo

+0

如果數據量不是太大,性能是第一優先,那麼我應該只使用全局數據集合而不是緩存? – longbkit