【问题标题】:Spring Session + Redis + JSFSpring Session + Redis + JSF
【发布时间】:2019-02-12 04:00:57
【问题描述】:

我目前正在从事一个项目,我需要将 HTTP 会话和其他对象(如 JSF 状态、控制器等)外部化。我的项目在 Web 层使用 JSF(加上 PrimeFaces 和其他一些库)在完整的 JEE 中。在 Payara 服务器上运行,在 AWS 上使用 Docker。

我的控制器是完全有状态的,我需要保持这种状态。我研究了如何在不更改太多代码的情况下轻松外部化用户会话,我发现了 Spring Session。问题是我对 Spring 以及如何将它引入我的项目的经验为零,到目前为止我所有的尝试都失败了。

我不使用 Maven,此时我不太可能使用它,因为项目太大而无法移动,所以我必须手动导入所有库。我只想导入库(Spring + Spring Session),配置 Redis 访问并尽可能少地更改代码。能这么容易吗?

我的问题是:在我的情况下使用 Spring Session 的最佳方法是什么?有谁知道将 JSF 会话外部化到 Redis 的更好/更简单的方法?

谢谢。

【问题讨论】:

  • 您如何构建您的项目?有蚂蚁吗?
  • 是的。我使用 Netbeans,所以它是用 ant 构建的。
  • 您想进行会话复制,因此您正在尝试“外部化”会话吗?
  • 没错。但我不想在所有 Payara 节点中复制会话(就像 Hazelcast 一样),只将其存储在 Redis 等外部服务中。
  • 首先,欢迎来到stackoverflow。 I use Netbeans, so it builds with ant.:这两者有什么关系? Netbeans 是一个 IDE,因此您可以在 ant、Maven、Gradle 中进行构建。

标签: java spring jsf redis spring-session


【解决方案1】:

我会做什么:我不会尝试重新发明轮子,很可能在您的预算中没有足够的空闲时间和金钱来找出这样的解决方案。

为什么?

你有一个基于 ant 的大型项目,spring 是基于 maven 的,它有一个非常大的依赖树,如果没有 maven,你将无法真正管理它(我什至不想尝试在没有 maven 的情况下构建一个 hello world在 spring-boot/mvc 中)。即使你能以某种方式将它们放在一起,我敢打赌,jar 版本差异会导致很多类路径问题。你必须注意你使用的Java版本,你必须选择spring版本,这样你的JDK才会被Spring支持。

还有技术上的差异:您可能会从 EJB 调用 Spring bean,反之亦然使用 CDI(至少这在 Wildfly 上以这种方式工作),但如果您考虑一下,您不会喜欢这样做。如果您曾经使用过 Spring,您就会知道这并不容易。

最后但同样重要的是:您想使用 Spring 替换/实现 Payara Session 复制...为了做到这一点,您必须非常了解 Payara 内部结构、Spring 内部结构和许多其他内容这样做。

总而言之,如果我是你,我会实现标准会话复制,或者更好的是无状态后端。您可以拥有更多集群,这样您就不会在所有节点之间复制会话。

你真的应该考虑转向 maven 或 gradle,从长远来看,它几乎只有好处。 Netbeans supports 很好。 如果你有很多自定义的 ant 任务,但有 maven-antrun-plugin,唯一的缺点是,如果没有什么对你有帮助,编写自己的 maven 插件并不难。

【讨论】:

  • 感谢您的宝贵时间。我们确实有很多 ant 任务,主要是为了构建一些我们自己的 sdk,但我会看一下。目前,我认为我们将变得无国籍。这会很痛苦,因为我们的应用程序非常依赖有状态的 bean。
猜你喜欢
  • 2021-09-13
  • 2016-12-09
  • 2016-07-08
  • 2017-11-02
  • 2016-05-31
  • 2021-01-06
  • 2018-03-14
  • 2016-11-26
  • 2018-06-25
相关资源
最近更新 更多