WELD-000315无法获得会话锁定

时间:2013-03-27 16:05:20

标签: java jsf primefaces weld jboss-weld

我正在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>       

该应用程序还有一个全局on click javascript侦听器,它触发p:remoteCommand通知sessioncoped bean的click。因此,当用户尝试导航到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)。

1 个答案:

答案 0 :(得分:3)

在获得有关WELD-000315 error含义的更多信息后,我确定错误的原因是我为用户发出的每次点击触发了全局点击监听器。

点击的ajax请求总是将会话ID附加到请求上,这导致它尝试在另一个请求运行时间超过1秒时锁定会话。问题发生的时间超过1秒,例如导航到不同的页面或长时间保存请求。解决问题所需要做的就是更具体地说明何时触发点击监听器。