- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在 Weblogic 10 集群环境中使用 Spring Web Flow (2.0.9)。在生产中,我们得到了很多 LockTimeoutException : 30 秒后无法获取对话锁定。
我一直在试图弄清楚为什么在某些情况下只有一次单击或我们正在访问网站本身的主页时会出现上述异常。
请在 SWF 中找到试图锁定 FlowController 的代码。我想不通的是锁是在正在访问的 servlet 上还是其他什么?
请帮助了解在 Web 应用程序中发生此锁定时,SWF 中实际锁定的是哪个资源?
要了解 ReentrantLock 的概念,请引用下面的链接。
What is the Re-entrant lock and concept in general?
提前致谢。
异常堆栈跟踪
org.springframework.webflow.conversation.impl.LockTimeoutException: Unable to acquire conversation lock after 30 seconds
at org.springframework.webflow.conversation.impl.JdkConcurrentConversationLock.lock(JdkConcurrentConversationLock.java:44)
at org.springframework.webflow.conversation.impl.ContainedConversation.lock(ContainedConversation.java:69)
at org.springframework.webflow.execution.repository.support.ConversationBackedFlowExecutionLock.lock(ConversationBackedFlowExecutionLock.java:51)
at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:166)
at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)
at org.springframework.webflow.mvc.servlet.FlowController.handleRequest(FlowController.java:174)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
package org.springframework.webflow.conversation.impl;
import java.io.Serializable;
import java.util.concurrent.locks.ReentrantLock;
/**
* A conversation lock that relies on a {@link ReentrantLock} within Java 5's <code>util.concurrent.locks</code>
* package.
*
* @author Keith Donald
*/
class JdkConcurrentConversationLock implements ConversationLock, Serializable {
/**
* The lock.
*/
private ReentrantLock lock = new ReentrantLock();
public void lock() {
// ensure non-reentrant behaviour
if (!lock.isHeldByCurrentThread()) {
lock.lock();
}
}
public void unlock() {
// ensure non-reentrant behaviour
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
最佳答案
Spring Webflow 作为状态机运行,在可能具有关联 View 的不同状态之间执行转换。多个同时执行的转换没有意义,因此 SWF 使用锁定系统来确保 每个流执行(或 session )一次仅处理一个 HTTP 请求 .
不要太在意 ReentrantLock 的概念,它只是防止同一个线程等待它已经持有的锁。
在回答您的问题时,只有在请求处理期间被 Spring Webflow 锁定的流执行(特定对话实例)。服务器仍然会处理来自其他用户的请求,甚至是来自同一用户对不同流程执行的请求。
LockTimeoutException 很难解决,因为根本问题不是抛出异常的线程。 LockTimeoutException 发生是因为另一个较早的请求花费的时间超过 30 秒,因此最好找出较早的请求花费这么长时间的原因。
故障排除思路:
I have been trying to figure out why does above exception comes in some cases when there is only a single click or we are accessing the home page of the site itself.
关于spring-webflow - Spring Web Flow LockTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533786/
我们正在运行最新版本的 Hibernate 4 和 MySQL。我们所有的 Hibernate 实体都有一个用 @Version 注释的版本字段,因为我们全面使用乐观锁定。我们在应用程序的任何地方都没
我正在使用 hibernate 作为我的持久层创建一个 CRUD API。 API 获取 JSON 并将其序列化为 POJO。然后管理层将 POJO 转换为新的 Hibernate 域对象。 Crea
我们在 Weblogic 10 集群环境中使用 Spring Web Flow (2.0.9)。在生产中,我们得到了很多 LockTimeoutException : 30 秒后无法获取对话锁定。 我
我们在使用Web Flow 2.0.0插件的Grails应用程序中遇到了一个奇怪的行为(基本上是Spring Web Flow 2.0.8.RELEASE)。有时我们会收到 LockTimeoutEx
我是一名优秀的程序员,十分优秀!