范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

AxonFramework状态存储聚合

  在聚合篇中,我们看到了如何创建由事件溯源支持的聚合。 换句话说,事件溯源聚合的存储方法是通过重放构成聚合变化的事件。
  然而,聚合也可以按原样存储。 这样做时,用于保存和加载聚合的  Repository   是 GenericJpaRepository  。 聚合状态存储的结构与事件溯源聚合有点不同:import org.axonframework.commandhandling.CommandHandler; import org.axonframework.eventhandling.EventHandler; import org.axonframework.modelling.command.AggregateIdentifier; import org.axonframework.modelling.command.AggregateMember;  import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany;  @Entity // 1. public class GiftCard {      @Id // 2.     @AggregateIdentifier     private String id;      // 3.     @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)     @JoinColumn(name = "giftCardId")     @AggregateMember     private List transactions = new ArrayList<>();      private int remainingValue;      @CommandHandler  // 4.     public GiftCard(IssueCardCommand cmd) {         if (cmd.getAmount() <= 0) {             throw new IllegalArgumentException("amount <= 0");         }         id = cmd.getCardId();         remainingValue = cmd.getAmount();           // 5.         apply(new CardIssuedEvent(cmd.getCardId(), cmd.getAmount()));     }      @CommandHandler     public void handle(RedeemCardCommand cmd) {          // 6.         if (cmd.getAmount() <= 0) {             throw new IllegalArgumentException("amount <= 0");         }         if (cmd.getAmount() > remainingValue) {             throw new IllegalStateException("amount > remaining value");         }         if (transactions.stream().map(GiftCardTransaction::getTransactionId).anyMatch(cmd.getTransactionId()::equals)) {             throw new IllegalStateException("TransactionId must be unique");         }           // 7.         remainingValue -= cmd.getAmount();         transactions.add(new GiftCardTransaction(id, cmd.getTransactionId(), cmd.getAmount()));          apply(new CardRedeemedEvent(id, cmd.getTransactionId(), cmd.getAmount()));     }      @EventHandler  // 8.     protected void on(CardReimbursedEvent event) {         this.remainingValue += event.getAmount();     }      protected GiftCard() { }  // 9. }
  上面的摘录显示了来自 "Gift Card Service" 的状态存储聚合。 片段中的编号注释指出了 Axon 的细节,在此解释: 由于聚合存储在 JPA 存储库中,因此需要使用  @Entity   注解类。聚合根必须声明一个包含聚合标识符的字段。
  此标识符最迟必须在第一个事件发布时初始化。
  此标识符字段必须由 @AggregateIdentifier 注解进行注解。
  当使用 JPA 存储 Aggregate 时,Axon 知道使用 JPA 提供的  @Id   注解。
  由于 Aggregate 是一个实体,@Id   注解是一个硬性要求。这个聚合有几个 "Aggregate Members"。
  由于聚合按原样存储,因此应考虑实体的正确映射。 带  @CommandHandler   注解的构造函数,或者以不同的方式放置 "command handling constructor"。
  此注解告诉框架给定的构造函数能够处理 IssueCardCommand  。静态的  AggregateLifecycle#apply(Object…)   可用于发布 Event Message  。
  调用此函数后,提供的 Object   将在应用它们的聚合范围内作为 EventMessage   发布。命令处理方法将首先决定此时传入的命令是否有效处理。 业务逻辑验证后,可以调整聚合的状态 Aggregate 中的实体可以通过定义  @EventHandler   注解方法来监听 Aggregate 发布的事件。
  当事件消息在被任何外部处理程序处理之前发布时,将调用这些方法。JPA 需要的无参数构造函数。
  未能提供此构造函数将在加载聚合时导致异常。
  在命令处理程序中调整状态
  与事件溯源聚合不同,状态存储聚合可以在命令处理程序中配对决策逻辑和状态更改。 遵循这种范式对状态存储聚合没有任何后果,因为没有事件溯源处理程序驱动它的状态。

瑞声助力三星Fold3实现新一代触感体验中关村在线消息8月11日,最新发布的GalaxyZFold3手机被称为三星新一代惊艳之作。作为三星目前迭代最多的折叠屏设备,GalaxyFold系列始终保持高速创新,在触觉反馈方面这款aigo国民好物移动固态硬盘我超满意!使用感受分享作为一个视频内容创作者,移动储存设备是一个必不可少的装备。比如小编,身为一名合格的科技媒体,日常出差都会携带移动硬盘来储存资料以及视频素材,日积月累,储存空间也快见底了,传输速度也不容错过高颜值七夕礼物,你离脱单只差这款小清新配色的TWS耳机不知不觉,一年一度的七夕又马上就要到了,相信大家现在都在为自己心爱的人挑选一份充满心意的礼物,如果你觉得送口红,送球鞋又或者是发红包都缺乏新意的话,不妨考虑一下那些即据实用性,同时将矿工定义为经纪人的直接影响是什么?首先,矿工至少那些位于美国的矿工向国税局报告的要求将大大提高。矿工遵守这些要求的成本可能是巨大的,而且在很大程度上是固定的。矿工将需要承担这些成本,无论他们在开采一个区块之前有多少爱玲珑推出首款电池供电闪光灯ElinchromOne日前,爱玲珑推出了旗下首款锂电池供电的闪光灯ElinchromOne,它功率为131Ws,内置电池可全功率闪光725次。爱玲珑作为闪光灯顶级品牌之一却对锂电池型闪光灯反应很慢,在神小米Mix4姗姗来迟,外观配置基本确认,屏下摄像头终于上阵时隔三年,代表着小米高端手机的Mix系列终于将要迎来了实质性的更新,新一代的旗舰手机小米Mix4将会在8月10日正式发布。小米Mix4不仅是小米手机下半年的最强手,也是一部代表着众时隔5年再提任正非签发华为到该炸掉研发金字塔的时候了IT之家8月11日消息8月8日,华为心声社区转发了一篇名为华为到该炸掉研发金字塔的时候了的文章,该文章由华为创始人兼总裁任正非在2016年签发,时隔5年被官方再次转发。图自华为心声七夕将至,格兰仕DR空气炸微波炉新晋约会神器七夕将至,你是否还在为去哪家餐厅,点什么菜而烦恼呢?又或是还在斟酌菜谱,不知如何下手?格兰仕DR空气炸微波炉或许会让你的这些烦恼迎刃而解。日前,格兰仕宇宙厨房概念横空出世,并推出了20款iPhone有重大缺陷?难以忍受2020年4月15日晚上23点,苹果在其官网正式发布了全新的iPhoneSE2。搭载着强大的A13芯片,丝滑的机身,让众多果粉们欲罢不能!iPhoneSE2正面近期,苹果推出了全新iOS15Beta5来了,新变化都在这8月11日凌晨,苹果又又推送了新系统iOS15Beta5,距离上个测试版发布仅仅相隔两周左右。但伴随着距离iOS15正式版发布日期越来越近,新版本更新引入的改动也越来越小。从苹果官三星正式发布两款折叠新机GalaxyZFold3GalaxyZFlip3作为三星的旗舰折叠新机,GalaxyZFold3外屏为6。2英寸,内屏则是7。6英寸DynamicAMOLED屏,均支持120Hz刷新率,并配备400万像素屏下摄像头。新机搭载骁龙
勇立潮头的科大讯飞智能办公本X2,让商务办公游刃有余引言大家好,我是科技好物菌。在2019年的时候,我体验过讯飞智能办公本,那款产品如下图所示,它属于科大讯飞智能办公本的第一代产品。对于这款智能办公本,我印象非常深刻,因为它陪我漂泊功能手机没有微信抖音?不,AGM三防4G手机做到了引言功能机,相信很多人都不陌生,功能机给我们的生活曾经也带来了非常多的便利。像我到如今为止,用智能手机快十年了,但我还会考虑入手一部功能机作为备用机。为什么?因为功能机有它固有的特本田小型房车亮相,功能十分全面,油耗低至4L,堪称是自驾游神器现代人的生活压力真的很大,为了能给家人提供更好的物质条件,除了在挣钱就是在挣钱的路上,所以当静下来的时候我都畅想着未来能一个人一辆车,来一场随遇而安的自驾游,其实自驾游并不美好,只全新风神AX7怎么样?搭双十佳动力组合,军工级品质,H6买早了市场竞争的残酷不仅仅在于合资车价格上的不断下探,还有一众产品力强势的新车不断涌入,这就造成了市面上的诸多老牌车型面临着性价比与产品力上的双面打压。就拿国内最畅销的紧凑SUV领域为例机箱限制只能单风扇的它也是散热王者九州风神阿萨辛III阿萨辛,做为九州风神众多风冷中性能最强的风冷巨兽,关于它的评测也不在少数,它的散热压制能力一直处在神坛,笔者做为风冷的拥护者,也一直想尝试一下解一解毒。最近偶得了一块I99900K丰田全新中型SUV凌放发布,车长超过4。7米,定位高于RAV4荣放从今年开始,明显看出丰田在加速布局国内市场,从亚洲狮凌尚的上市,再到刚刚上市的皇冠陆放,可以说丰田在国内市场中的产品线越来越细分和完善,目前仅有入门级中型SUV还是空白,不过一汽丰涡轮和自吸的对比,1。5T和2。0L怎么选?内行依照这个标准不会错随着汽车技术的进步,很多新产物的问世在颠覆我们的原有认知,比如涡轮增压发动机。都知道,同样的排量下涡轮机拥有远超同排量自然吸气发动机的性能,而且随着政策的推动,当下市场中的小排量涡34M刹停6。95S破百轴距2770mm,东风风神奕炫MAX碾压思域了说起运动型轿车,10万级价位内大多数人首先想到的会是本田思域这款车,这是为何呢?不可否认,思域在同级别的运动性算是不错的,1。5T地球梦CVT的组合提速不错且平顺,同时具备可变转向高性价比耳机再度升级JeetOne升级版TWS耳机体验目前TWS真无线耳机可谓是遍地开花,而国产耳机也凭借着超强的产品力和极具竞争力的价格牢牢抓住了一大批用户,走在大街上放眼望去,很多人耳朵里都塞着无线耳机,现在可谓是TWS的春天了。轻盈舒适无惧汗水,为跑步而生韶音AS800骨传导专业运动耳机前言骨传导耳机,从诞生之刻开始就备受运动爱好者的关注,我比较喜欢跑步,在2016年的时候,我就入手了韶音AS650耳机。韶音AS650耳机,我平常夜跑和上下班时佩戴,一年中差不多参硬件无短板的一加9RT手机到底怎么样?值得买吗?一文全面解读良心产品,自带口碑BUFF高配置旗舰机,明眼人都能一眼识破。这说的就是刚刚发布的一加9RT手机!一加手机的发布会,我每次都看,这次也不例外。但是,这次我看完一加9RT发布会之后,我