2011-10-21 40 views

回答

4

您可以在同一個bean中使用@WebService和@Stateless或@WebService和@Singleton,如果您想將POJO作爲Web服務和EJB公開,那麼這是非常有意義的。

在同一個bean中使用@Stateless和@Singleton沒有多大意義。當您使用@Singleton時,您正在使用@Stateless完全創建一個包含所有EJB功能(事務管理,安全性等)的EJB。唯一的區別是容器如何管理EJB的生命週期:

  • @Stateless:EJB實例是第一個請求後立即創建和請求結束時,該EJB被合併,如果另一個請求準備重用但是,如果在同一個bean出現另一個請求時使用了所有共用實例,那麼容器會創建一個新的實例來提供該新請求。
  • @Singleton:EJB實例是在第一個請求(默認情況下,請參閱@Startup覆蓋此行爲)後創建的,並且這將是容器創建的唯一實例。如果另一個請求想要使用相同的EJB,容器將永遠不會創建它的新實例 - 將使用之前創建的實例。它就像一個池大小爲1的@Stateless EJB :)使用這些方面時併發性等方面很重要,但這可能超出了本文的範圍。
相關問題