2013-03-27 30 views
1

我在JBoss EAP 6上使用PrimeFaces 3.4.2和CDI创建了一个JSF 2应用程序。该应用程序有一个使用长期运行对话的部分,用于3页。当用户导航到使用会话的第一页时,他们有2个链接指向其他页面。WELD-000315无法获取对话锁

<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>  

该应用程序也有一个全球性的触发AP点击JavaScript的听众:remoteCommand通知的sessionscoped豆点击。所以当用户尝试导航到IFG或JOB时,也会触发以下内容。

<p:remoteCommand id="keepAliveRemoteCommand" name="keepAliveRC" actionListener="#{sessionInfo.keepAlive()}" autoRun="false" update="@none" process="@this" /> 

我相信导航和点击收听发射并拢使我得到警告:

WELD-000315未能获取在1000交谈锁 会话ID为:1

然后在我的应用程序中导致其他异常和故障。最后,这个问题并不总是一致的,有时它会在其他时候立即发生,而不会发生使用相同的步骤。我需要了解我做错了什么,以及我如何解决这个问题。

更新:
任何人都可以解释此警告吗?这是什么意思?它是如何造成的?它看起来不像我的JSF应用程序可以控制的东西。这个例子中的Web应用程序似乎特定于JBoss EAP 6(JBoss AS 7.1.3)。

回答

3

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

点击的ajax请求始终将对话ID附加到请求上,导致它尝试获取对话锁定,而另一个请求的运行时间超过1秒。问题发生的时间超过1秒,例如导航到不同的页面或长时间保存请求。我所要解决的所有问题都是针对何时触发点击侦听器。

相关问题