首页 > 解决方案 > Play Framework中的公共资源(几乎是有状态的)对象(bean)(与HTTP会话无关)?

问题描述

我有一个需要很长初始化时间(大约 2 分钟)的外部库,我需要在 Play Framework Controller-Action 处理的几乎每个 HTTP 请求中调用它。是否存在实例化此类 Scala 对象的机制(例如,放入某个全局范围、某个配置 bean、某个专用缓存)并根据 Controller-Action 中的请求检索它?

此对象不是完全有状态的对象。它是有状态的,意思是它需要一些复杂的初始化。但是当它准备好并运行时,它是无状态的——它可以在任何时间处理任何请求(当然,可能需要一些排队,但我可以用一些技巧来实现它),从这个意义上说,它是公共资源。

我的 Play 应用程序是纯粹的无状态 API,因此没有 HTTP 会话。我正在考虑在 Play 中使用 Spring(我猜,这是可能的),但 Spring 会话范围与 HTTP 会话和 servlet 相关,因此,这不是解决方案。

我还没有设法找到在 Play 中使用 J2EE 会话 bean 的用例,也许那是不可能的。

我正在阅读有关 Play 框架的 ThreadPools 和配置工具的信息,但目前我对 Play 框架能否拥有这样的 statful/preinitialized/common-resource 持怀疑态度。

上下文:提到的公共资源是相当重的数学库,可以做一些人工智能/自动推理,我计划使用 Play 框架围绕它创建 API,然后使用 Python 机器学习脚本中的这个 API。

标签: springplayframeworkstateful-session-bean

解决方案


我正在考虑使用缓存 API https://www.playframework.com/documentation/2.8.x/ScalaCache。当我能够报告我的努力结果时,我将进一步扩大我的答案。


推荐阅读