2016-09-23 34 views
0

我正在使用對話範圍的CDI bean。 我在bean的這樣的操作方法開始一個新的對話:@ConversationScoped豆 - 會話標識不唯一?

if (conversation.isTransient()) { 
     conversation.begin(); 
     logger.fine("start new conversation, id=" + conversation.getId()); 
    } 

現在我認識到,通過CDI給出的ID是像「1」或「2」等簡單的小數字。 經過一些測試後,我能夠啓動不同的瀏覽器會話,最終得到相同的ID。因此,兩個瀏覽器都聲稱ID爲'1'。這會導致談話中發生衝突。

我不知道這種行爲是否正常(我在Wild running中運行)?

我是否應該通過自己提供一個生成的唯一ID開始我的談話?

if (conversation.isTransient()) { 
     conversation.begin(UUID.randomUUID().toString()); 
     logger.fine("start new conversation, id=" + conversation.getId()); 
    } 

更新: 作爲Siliarus評論,該ID是在瀏覽器會話中是唯一的。我自己在兩個不同的瀏覽器會話中使用相同的CID觀察衝突是錯誤的。我不需要自己創建一個唯一的ID。

+0

請詳細說明「這會導致對話期間發生衝突」。創建不同的瀏覽器會話將觸發CDI內的新會話。所以你最終可能擁有相同的會話ID,但每個會話都屬於不同的會話(假設你保持兩個會話都存活)。這不應該導致我認爲的衝突。這只是我想到的第一個想法。 – Siliarus

+0

是的 - 你是對的。我發現ID在會話中是獨一無二的,認爲這會是一個問題是我的錯。 – Ralph

回答

0

由於Siliarus評論,瀏覽器URL中的ID可能相同,但ID在會話中是唯一的。所以沒有衝突,並且沒有必要手動生成唯一的ID。