在 WildFly 中的重新部署之间保持 HTTP 会话
Posted
技术标签:
【中文标题】在 WildFly 中的重新部署之间保持 HTTP 会话【英文标题】:Keeping HTTP session between redeploys in WildFly 【发布时间】:2015-02-18 14:27:59 【问题描述】:是否可以在 WildFly 上的重新部署之间保持 HTTP 会话?
【问题讨论】:
我认为是,但我认为您必须使用数据库持久会话。 【参考方案1】:web.xml 中的<distributable/>
部署到独立 可能会将您引导至WFLY-3715(被低级异常污染的日志)。
替代选项可以是配置持久会话 in standalone.xml 或使用 jboss-cli.sh。 JBoss CLI 命令值得一提,因为它可以在 WildFly 的 maven 插件中使用。
/subsystem=undertow/servlet-container=default/setting=persistent-sessions:add(path="session", relative-to="jboss.server.temp.dir")
日志污染示例:
2016-12-29 09:39:48,464 错误 [io.undertow.request](默认任务 26)UT005023:对 /resources/js/holder.js 的异常处理请求:org.infinispan.util.concurrent。 TimeoutException:ISPN000299:15 秒后无法获取密钥 SessionCreationMetaDataKey(EkmgBEYcvqFxNF_T2dDwEfyXkh7Nzcv2nTKBYy9G) 和请求者 GlobalTransaction::13:local 的锁定。锁由 GlobalTransaction::12:local 持有 在 org.infinispan.util.concurrent.locks.impl.DefaultLockManager$KeyAwareExtendedLockPromise.lock(DefaultLockManager.java:238) 在 org.infinispan.interceptors.locking.AbstractLockingInterceptor.lockAndRecord(AbstractLockingInterceptor.java:193) 在 org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.checkPendingAndLockKey(AbstractTxLockingInterceptor.java:193) 在 org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.lockOrRegisterBackupLock(AbstractTxLockingInterceptor.java:116) 在 org.infinispan.interceptors.locking.PessimisticLockingInterceptor.visitDataReadCommand(PessimisticLockingInterceptor.java:71) 在 org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitGetKeyValueCommand(AbstractLockingInterceptor.java:80) 在 org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:43) 在 org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:99) 在 org.infinispan.interceptors.TxInterceptor.enlistReadAndInvokeNext(TxInterceptor.java:346) 在 org.infinispan.interceptors.TxInterceptor.visitGetKeyValueCommand(TxInterceptor.java:331) 在 org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:43) 在 org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:99) 在 org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:114) 在 org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:83) 在 org.infinispan.commands.AbstractVisitor.visitGetKeyValueCommand(AbstractVisitor.java:85) 在 org.infinispan.commands.read.GetKeyValueCommand.acceptVisitor(GetKeyValueCommand.java:43) ...........
【讨论】:
【参考方案2】:您可以尝试配置会话持久性。 Here 是一个关于如何做的博客。
<servlet-container name="default">
<persistent-sessions path="session" relative-to="jboss.server.temp.dir"/>
<jsp-config/>
</servlet-container>
但是,似乎从 v8.2 开始可以使用此功能。我将引用此博客中的注释
当您使用非 ha 配置文件时,您还可以通过将
<distributable/>
添加到您的 web.xml 来实现会话钝化(适用于使用 WildFly 8.1.0 或更低版本的用户)。
【讨论】:
非常感谢!<distributable/>
就像 WildFly 8.1 的魅力。我也会尝试 WildFly 8.2 的解决方案。
太好了,很高兴它有帮助。
我要将所有会话变量类设置为“实现可序列化”
似乎可分发属性必须在 web.xml 中才能使持久会话工作。将 Wildfly 16 和 Keycloak 5 与 Elytron 一起使用。认为可分发仅适用于域/集群设置,但显然它也适用于独立设置。注意:单服务器模式(非集群)上的会话持久性在 GlassFish 中工作,无需分发...以上是关于在 WildFly 中的重新部署之间保持 HTTP 会话的主要内容,如果未能解决你的问题,请参考以下文章
在 Wildfly 8.2 上重新部署后从 Infinispan 缓存读取时发生 ClassCastException
Spring Boot 2 重新部署到 Wildfly 10 后无法刷新 JMS 连接
在 WildFly 上重新部署后,CDI 无法在 @Requestscoped REST 服务中将 @Singleton 设置为 @Provider