我有两个共享CDI会话的JSF控制器和三个支持bean。在调用第一个控制器之后,调用非JSF Web应用程序以在(OpenAM / OpenSSO)上记录用户,然后调用第二个控制器。通过将“?cid = 1234”附加到第二个控制器的页面请求来保留会话ID。
我的控制器注释如下:
@Named(javax.inject.Named)
@ConversationScoped(javax.enterprise.context.ConversationScoped)
并按如下方式注入控制器:
@Inject(javax.inject.Inject)
私人短暂会话对话; (javax.enterprise.context.Conversation)
支持bean的注释如下:
@Named(javax.inject.Named)
这是在JBoss 7.1上运行的,它使用Weld for CDI。
这工作正常,但在进行了一些不相关的更改后,它不再有效。
现在的问题是,当调用第一个控制器,并且我调用conversation.begin()时,我返回的会话ID是始终 1.此外,当我回到第二个控制器时,我收到以下错误:
org.jboss.weld.context.NonexistentConversationException:WELD-000321找不到为id 1恢复的对话
我尝试使用新会话多次访问网络应用,我尝试从不同的标签和不同的浏览器访问它。会话ID“1”始终返回。另外,据我所知,我不是在两个控制器调用之间随时杀死会话或会话。