2015-05-12 189 views
1
  1. 辛格爾頓會話bean已被引入到解決什麼問題?它只是用於共享所有bean常見的數據嗎?辛格爾頓會話bean

  2. 這個問題在EJB 3.0和之前的版本中是如何管理的?

  3. 如果它保留了客戶端指定會話狀態,即單個實例將是讓所有客戶端(即試圖同時訪問)在其具體的數據?它會安全嗎?

  4. 如果我們可以使用靜態最終變量和靜態初始化塊或靜態方法在其他會話Bean進行初始化(靜態變量也是每類數據不是每個實例數據) ,跨豆共享公共數據,什麼單身會話bean的需求是什麼?

  5. 這是一個好的設計必須在單業務方法?如果是這樣,由單個實例服務的客戶端請求的響應時間將遠遠多於當由多個實例服務時的響應時間。而且,雖然singleton bean允許多個客戶端同時訪問單個bean實例,但默認併發類型(容器管理的)中的默認鎖定類型(寫入鎖定)將阻止所有其他線程訪問該Bean,直到那個方法結束了,而且這個好像是個缺點吧?

  6. 這將是非常有益的,如果有人能夠給出一個明確的&簡單的用例,在沒有其他豆類適合作爲完全一樣的單身豆確實

感謝提前:)

+0

問每個問題一個問題。 – BalusC

+1

@BalusC抱歉張貼在一個..我明白你的觀點..但這些都是相關的,我想獲得一個單身bean的完整理解..這就是爲什麼我張貼在一個職位的所有.. – Ragul

回答

4
  1. 是。

  2. 通常數據存儲在靜態變量中。靜態變量由於各種原因(包括單元測試)而不是很好。另外,靜態變量需要某種同步,嚴格閱讀EJB規範並不允許這樣做,儘管在實踐中它運行良好。

  3. 通常被存儲在一個單獨的狀態不是客戶特定的但是專用的。例如,緩存全局配置狀態或從數據庫緩存全局狀態,可能會使用定期非持久性定時器進行刷新。

  4. 沒有,但請參閱#2。

  5. 否,單豆可能不是一個好適合基於請求的業務邏輯。是的,默認是CONTAINER與WRITE鎖併發,所以一次只能有一個線程。根據需要,您應該使用@Lock(READ)@ConcurrencyManagement(BEAN)

  6. 如#3所述,通常是需要在所有bean之間共享的「全局」應用程序狀態。我發現單身會話bean對於應用程序配置和管理應用程序範圍的定時器很有用。

+0

非常感謝你:) – Ragul