2016-09-23 108 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。