让 bean 使用 CDI bean(使用 Myfaces CODI)代替 JSF 托管 bean 一段时间以来,我一直在阅读一些教程,以更好地理解我可以用这项技术真正做些什么。最明显的利用潜力是 CDI 事件模型,但我对我可以使用它的用途没有太多灵感。
我有一个页面计数器机制,它可以在不访问关键路径上的数据库的情况下维护页面访问的持久记录,即减慢页面加载时间。这通过增加 AtomicReference 访问的 ConcurrentHashMap 中的 AtomicInteger 来工作,数据存储在单例 EJB 中。然后一个 EJB 计时器周期性地“抓取”地图,用一个新的替换它,并将新的命中添加到适当的数据库记录中。PreDestroy 侦听器在应用服务器关闭时保存所有非持久更新。
我认为在页面加载时,我可以使用应用程序范围的 CDI bean 来触发“页面访问”事件并观察它并进行后端处理,但这在某些方面不符合现有设计:
目前更新是批量更新的,timer 方法每隔几分钟运行一次。
虽然现有设计在服务器电源故障时会丢失数据,但这是不可取的,但可以接受,但它相当可靠,因为它可以处理正常关闭。
我需要更好地了解在服务器关闭时排队的 CDI 事件会发生什么,我将通过规范来解决这个问题。
虽然我很感谢对上述想法的任何反馈,但我真正感兴趣的是受到您在 JSF 应用程序中使用 CDI 事件的任何有趣场景的启发,有人愿意分享他们的经验吗?
谢谢。