在开发JSF应用程序时,CDI对话范围是一个很好的功能。 假设您有大型数据表,需要花费很长时间才能加载。 由于高内存消耗,您通常不希望将加载的数据放在会话范围的Bean中。 而且,您不能将加载的数据放入视图范围的Bean中,因为如果用户离开并进入同一视图,您将不希望总是再次重新加载数据。 如果用户在特定时间间隔内进入同一页面,则仅保留数据;如果在此时间间隔内未访问Bean,则再次重新加载它们将是很好的选择。

这可以通过带超时的对话作用域bean来实现。 我们将处理MyFaces CODI (CDI扩展),并了解如何为使用@ConversationScoped注释的bean设置自定义超时。 默认超时是30分钟。 对于我们的示例来说太长了。 我们将其配置1分钟。 第一步是扩展CODI的ConversationConfig并覆盖方法getConversationTimeoutInMinutes() 。 让我们编写一个类AlternativeConversationConfig

package controller.cdi;import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Alternative;
import javax.enterprise.inject.Specializes;
import org.apache.myfaces.extensions.cdi.core.api.config.ConfigEntry;
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.config.ConversationConfig;@ApplicationScoped
@Alternative
@Specializes
public class AlternativeConversationConfig extends ConversationConfig {@ConfigEntrypublic int getConversationTimeoutInMinutes() {return 1;}
}

重要的是注释@Specializes ,该注释允许在每个现有位置注入AlternativeConversationConfig而不是ConversationConfig 。 第二步是在beans.xml正确输入,以便在ConversationConfig所有注入点上使用(激活)我们的类。

<alternatives><class>controller.cdi.AlternativeConversationConfig</class>
</alternatives>

服务器在启动过程中的日志输出现在包含这些行

config implementation:
controller.cdi.AlternativeConversationConfig$Proxy$_$$_WeldClientProxy
config implementation: controller.cdi.AlternativeConversationConfigmethod: getConversationTimeoutInMinutesvalue: 1

为了检查一切正常,我们可以编写一个对话范围的bean并在facelets中使用它。

import java.io.Serializable;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationScoped;@Named
@ConversationScoped
public class CdiBeanConversationScoped implements Serializable {private int counter;public int getCounter() {return counter;}public void increment(ActionEvent e) {counter++;}
}
<h:outputText id='counter' value='Conversation scoped counter: #{cdiBeanConversationScoped.counter}'/><p:commandButton value='Increment counter' process='@this' update='counter'actionListener='#{cdiBeanConversationScoped.increment}'/>

计数器将在1分钟后过期。 如果在此时间间隔内没有访问Bean。 只需按一下按钮即可增加计数器,等待时间超过1分钟。 并再次增加它。 您将看到该计数器已重置。

参考: 在“软件开发思想”博客上,从我们的JCG合作伙伴 Oleg Varaksin 配置CDI对话的超时 。

翻译自: https://www.javacodegeeks.com/2012/09/configure-timeout-for-cdi-conversations.html

配置CDI对话的超时相关推荐

  1. php cdi_配置CDI对话的超时

    php cdi 在开发JSF应用程序时,CDI对话范围是一个很好的功能. 想象一下,您有大型数据表,需要很长时间才能加载. 由于高内存消耗,您通常不希望将加载的数据放置在会话作用域的Bean中. 而且 ...

  2. ribbon基于接口配置超时_feign的ribbon超时配置和hystrix的超时配置说明

    先看下我的配置: ribbon: MaxAutoRetries: 1 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试 MaxAutoRetriesNextServer: 1 # ...

  3. 使用百度UNIT配置智能对话机器人的注意事项,开发者必看!

    首先是AI社区UNIT板块里官方发的的: [小白终结帖]UNIT开发者必备学习资料大集合 视频可以不看,但是这篇帖子一定要看,满满的都是干货! 帖子上有的内容,这里就不重复了,下面是配置智能对话机器人 ...

  4. axios 最全 请求拦截器 响应拦截器 配置公共请求头 超时时间 以及get delete post put 四种请求传参方式

    axios 拦截器 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易 响应拦截器 响应拦截器的作用是在接收到响应后进行一些操 ...

  5. Spring集成–配置Web服务客户端超时

    介绍 在Spring Integration的支持下,您的应用程序可以使用出站Web服务网关来调用Web服务. 调用由该网关处理,因此您只需要担心构建请求消息和处理响应. 但是,使用这种方法并不明显, ...

  6. Nginx笔记-反向代理中配置WebSocket及设置超时

    这里贴下配置: ... server{listen 8888;server_name MyWeb;location / {proxy_pass http://xxx.xx.xx.xxx:xxxx;}l ...

  7. mysql odbc连接池_Java Mysql连接池配置和案例分析--超时异常和处理

    前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...

  8. 配置nginx实现连接超时

    保持连接(长连接) 在进行HTTP连接前要先建立TCP连接(TCP3次握手),再建立HTTP连接,当HTTP资源请求结束后,会断开HTTP连接,再断开TCP连接(TCP4次挥手). 很多情况下用户访问 ...

  9. php cdi_涉及CDI和JSF的过期对话的定制错误页面

    php cdi 自上次写博客以来已经有一段时间了. 我一直在想写一些技术博客,但最终却忙于其他事情. 上周,在Coderanch论坛上进行了非常有趣的讨论. 甚至更有趣,因为它涉及JBoss. 熟悉J ...

最新文章

  1. 初学者编写python用什么软件好_初学者编写python用什么软件
  2. cassandra的全文检索插件
  3. XTU 1243 2016
  4. Tomcat定义虚拟主机案例
  5. Ajax技术简单入门
  6. LeetCode 245. 最短单词距离 III
  7. 2013蓝桥杯java试题_2013年第四届蓝桥杯javaB组 试题 答案 解析
  8. 从Nand Flash启动U-BOOT的基本原理
  9. nuxt服务端php,nuxt服务端部署上线
  10. mysql binlog备份_MySQL mysqldump + mysqlbinlog 备份和还原
  11. 今日花生价格多少钱一斤?
  12. Number and String in JS
  13. 什么是HikariCP?HikariCP介绍(包含配置示例)
  14. 网络安全设备-认识运维安全管理与审计系统(堡垒机)
  15. 【Android P】 JobScheduler服务源码解析(二) ——框架解析
  16. OpenGL ES 简介
  17. 基于51单片机的水族箱温度水质监测智能宠物金鱼喂食器补氧换水proteus仿真原理图
  18. 大家有哪些舍不得拿出来分享的网站?你有吗?这几个抓紧收藏起来
  19. 计算机中丢失repo,我的本地git repo有“未上演”的已删除文件,远程是文件,如何删除丢失的文件?...
  20. 玩魂斗罗怎么能少了Arduino游戏手柄!

热门文章

  1. linux-basic(9)文件与文件系统的压缩与打包
  2. poj doubles_余数运算符在Java中用于Doubles
  3. 迁移学习 简而言之_简而言之SPIFFE
  4. Neo4j导入:java.lang.IllegalStateException:不支持在单个导入中混合指定和未指定的组所有物...
  5. java单词按字典排序_最终Java日志字典:开发人员最常记录的单词是什么?
  6. hotspot 垃圾收集器_HotSpot增量Java垃圾收集器
  7. 备忘录模式 命令模式_备忘录设计模式示例
  8. mwc校准油门_编写下载服务器。 第五部分:油门下载速度
  9. neo4j cypher_Neo4j:使用Cypher生成实时建议
  10. junit:junit_简而言之,JUnit:另一个JUnit教程