关于java ee:如何在WebSphere Application Server上超时运行长时间的Web请求?

How to time out long-running web requests on WebSphere Application Server?

本问题已经有最佳答案,请猛点这里访问。

我正在尝试在IBM WebSphere Application Server v.8.5.5.4上生成JavaEE应用程序。

如果Web请求导致计算时间太长(出于任何原因,从意外的大量数据到编程错误导致无限循环),我想在一段时间后中止它们。

我在Web Sphere文档中找不到任何内容(像往常一样,我必须说)。我到目前为止在StackOverflow和其他地方找到的所有内容都不适合我的情况:

  • 客户端超时:不是我想要的,因为我想通过杀死(几乎)无休止的循环线程来节省服务器资源。
  • 容器管理事务:我没有使用它们,所以在这里设置超时无处可寻。
  • 连接超时(JDBC Datasource):我并不担心数据库请求花费太长时间,而是关于我的业务逻辑永远循环。
  • WAS Stuck Thread Detection:据我所知,这只能用于打印警告。

我会选择任何服务器端解决方案;它可能是一些WAS设置或一些我不知道的普通JavaEE / Servlet配置。

这里有任何WebSphere专家吗?谢谢您的帮助!

编辑:

实际上是如何在Java中杀死一个线程?以及如何超时线程。提出这个问题我认为这在Java中是可行的,因此在WebSphere中必须有一些功能。


无论JVM是否是像WebSphere这样的应用程序服务器,都无法(安全地)强制停止或"超时"任何JVM中正在运行的线程。 对于陷入纯粹"计算"的线程尤其如此(如果线程最终到达中断点,那么Thread.interrupt可能是可用的;例如,挂起线程通知监听器可能能够做到,但没有 内置对WebSphere中的支持)。 你最好的选择是写"合作"中断/取消; 也就是说,您需要显式编写代码,定期检查它是否已运行太长并取消自身。 至于无意的无限循环,你唯一的防御是强大/经过良好测试的代码。