我在 JBoss EAP 6 上使用 PrimeFaces 3.4.2 和 CDI 创建 JSF 2 应用程序。该应用程序有一个部分使用 3 页的长时间运行对话。当用户导航到使用对话的第一个页面时,他们有 2 个指向其他页面的链接。
<p:commandLink action="#{event.navigateToIfg()}" >
<h:outputText value="#{msg.ifg_label}" />
</p:commandLink>
<p:commandLink action="#{event.navigateToJob()}" >
<h:outputText value="#{msg.job_label}"/>
</p:commandLink>
这两种方法都使用导航规则在页面之间移动。
navigateToIfg() 使用规则:
<navigation-rule>
<from-view-id>/event/event.xhtml</from-view-id>
<navigation-case>
<from-outcome>TO_IFG</from-outcome>
<to-view-id>/event/eventGuideIfg.xhtml?cid=# {javax.enterprise.context.conversation.id}</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
navigateToJob() 使用规则:
<navigation-rule>
<from-view-id>/event/event.xhtml</from-view-id>
<navigation-case>
<from-outcome>TO_JOB</from-outcome>
<to-view-id>/event/eventGuideJob.xhtml?cid=#{javax.enterprise.context.conversation.id}</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
该应用程序还有一个全局点击 javascript 监听器,它触发 ap:remoteCommand 通知一个 sessionscoped bean 的点击。因此,当用户尝试导航到 IFG 或 JOB 时,也会触发以下操作。
<p:remoteCommand id="keepAliveRemoteCommand" name="keepAliveRC" actionListener="#{sessionInfo.keepAlive()}" autoRun="false" update="@none" process="@this" />
我相信导航和点击监听器一起触发会导致我收到警告:
WELD-000315 未能在 1,000 中获取会话锁定,用于 id 为 1 的会话
然后在我的应用程序中导致其他异常和失败。最后,问题并不总是一致的,有时它会立即发生,有时它不会使用相同的步骤发生。我需要了解我做错了什么以及如何解决这个问题。
更新:
谁能解释这个警告?这是什么意思?具体是怎么引起的?我的 JSF 应用程序似乎无法控制它。在这种情况下,它似乎特定于 Web 应用程序 JBoss EAP 6 (JBoss AS 7.1.3)。