gpt4 book ai didi

java - JPA事务的超时实现和Session失效

转载 作者:行者123 更新时间:2023-11-30 03:53:51 26 4
gpt4 key购买 nike

我一直在处理一个使用 wicket+JPA+springs 技术的应用程序。最近我们在日志中收到许多 5XX 错误(大于阈值)。在那段时间,由于作为我们应用程序后端的大型机 db2 的响应时间不稳定,存在一些常见问题。但此后,一旦主机正常,该应用程序服务器就不再正常了。

有很多挂起的交易(来 self 的应用程序)。服务器中有许多线程可能挂起。当用户在此期间继续保持登录或访问应用程序中的链接时,情况会变得更糟。

当我查看 webspehere 日志时,我发现以下异常:

00000035 ThreadMonitor W WSVR0605W: Thread "WebContainer : 88" (000005ac)
has been active for 637111 milliseconds and may be hung.
There is/are 43 thread(s) in total in the server that may be hung.

在应用程序日志中我发现以下异常:

-->CouldNotLockPageException: Could not lock page 4. Attempt lasted 3 minutes
-->DefaultExceptionMapper - Connection lost, give up responding.
org.apache.wicket.protocol.http.servlet.ResponseIOException:
com.ibm.wsspi.webcontainer.ClosedConnectionException: OutputStream encountered error during
write.
--> JDBCExceptionReporter - [jcc][t4][2030][11211][3.67.27] A communication error occurred
during operations on the connection's underlying socket, socket input stream,
or socket output stream.
Error location: Reply.fill() - socketInputStream.read (-1). Message:
Connection reset. ERRORCODE=-4499, SQLSTATE=08001DSRA0010E: SQL State = 08001, Error Code = - 4.499

现在我们正在研究这个问题的解决方案。以下是我们目前正在考虑的两个解决方案。

1.我浏览了很多论坛,发现每当我们遇到 CouldNotLockPageException 时,最好使 session 失效并强制用户登录页面。目前我们没有 session 失效(注销)机制。因此我们将实现那个。

2.我们需要实现事务超时,以便我们可以停止挂起事务。

我需要从java或服务器端解决这个问题。这里我们使用wicket、jpa和springs框架。我有一些疑问。

1.我们如何在上述框架中实现事务超时?

2.使 session 失效是否可以停止挂起的事务或可能挂起的线程?

最佳答案

由于您已经在使用 Spring,所以就这么简单:

@Transactional(timeout = 300)

事务注释允许您提供超时值(以秒为单位),事务管理器会将其转发到 JTA 事务管理器或您的数据源连接池。它与 Bitronix 事务管理器配合得很好,它会自动拾取它。

您还需要确保 java.sql.Conenction 始终关闭,并且事务始终提交(当所有操作成功时)或在失败时回滚。

使用户http session 失效与jdbc连接无关。您的 jdbc 连接应始终提交/回滚并关闭(在连接池的情况下,将释放到池的连接)。

并确保最大池大小不大于tour db最大并发连接设置。

关于java - JPA事务的超时实现和Session失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23753510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com