spring 页面未找到

vvppvyoh  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(79)

我有一个包含多个AggregateMembers的聚合。否是因为找不到for 1 aggregateMember(Referentschap)此聚合成员中的CommandHandlers的问题。使用AggregateTestFixture<>(Onderzoek.class)进行junit测试时也会出现此问题。
在一个AggregateMember Waarschuwing中,CommandHandlers会按要求到达,但在另一个aggregateMember Referentschap中,未找到Commandhandlers。我的问题是我如何解决这个问题?有没有一种方法,我可以做一个配置来解决这个问题?
奇怪的问题是,在一些调试项目的副本中,出现了同样的问题,但随后问题被交换到Waarschuwing,并且Referentschap正常。这种奇怪的问题交换给我的印象是,在如何收集CommandHandlers方面存在问题。
update:在Axoniq的提示上,仅将@Aggregae注解放置在根聚合上。从Intellij IDE中清除chaces和所有内容,并重新运行junit测试。现在,在AggregateMembers ReferentschapWaarschuwing上都出现了未找到ComandHandler问题。
我用一个Axon测试容器做了一些集成测试,它们都成功了。看起来这是一个JUnit测试问题,其中聚合类的扩展顺序与找到的CommandHandler相关。
Axon 4.5.17
Spring Boot 2.7.12
Java temurin 17.0.6

@NoArgsConstructor
public class Onderzoek extends OnderzoekReferentschap {

    @CommandHandler
    public Onderzoek(InitieerOnderzoek command) {
        apply(OnderzoekGeinitieerd.builder().build());
    }

    @EventSourcingHandler
    public void onderzoekGeinitieerd(OnderzoekGeinitieerd event) {
        this.onderzoekId = event.getOnderzoekId();
        this.onderzoekStatus = INITIEEL;
    }

x

@NoArgsConstructor
public abstract class OnderzoekReferentschap extends OnderzoekMaatregel {

    @AggregateMember
    private final Map<UUID, Referentschap> referentschappen = new HashMap<>();

    @CommandHandler
    public void verwerkReferentschapOntstaan(VerwerkReferentschapOntstaan command) {
            apply(ReferentschapOntstaanVerwerkt.builder()
                    .onderzoekId(command.getOnderzoekId())
                    .referentschapId(command.getReferentschapId())
                    .build());
        }
    }

    @EventSourcingHandler
    public void referentschapOntstaanVerwerkt(ReferentschapOntstaanVerwerkt event) {
        UUID referentschapId = event.getReferentschapId();
        Referentschap referentschap = Referentschap.builder()
                .referentschapId(referentschapId)
                .persoonId(event.getPersoonId())
                .build();

        referentschappen.put(referentschapId, referentschap);
    }
}
@NoArgsConstructor
abstract class OnderzoekMaatregel extends OnderzoekBasis {
    @AggregateMember
    final Map<UUID, Waarschuwing> waarschuwingen = new HashMap<>();

    @CommandHandler
    public void verwerkWaarschuwingOpgelegd(VerwerkWaarschuwingOpgelegd command) {
            apply(WaarschuwingOpgelegdVerwerkt.builder()
                    .onderzoekId(command.getOnderzoekId())
                    .referentschapId(command.getWaarschuwingId())
                    .build());
    }

    @EventSourcingHandler
    public void waarschuwingOpgelegdVerwerkt(WaarschuwingOpgelegdVerwerkt event) {
        UUID waarschuwingId = event.getWaarschuwingId();
        waarschuwingen.put(waarschuwingId, new Waarschuwing(waarschuwingId));
    }
}
@NoArgsConstructor
abstract class OnderzoekBasis {

    @AggregateIdentifier
    UUID onderzoekId;
    OnderzoekStatus onderzoekStatus;
}

的数据
下面的类是AggregateMembers,它具有令人讨厌的Not Found CommandHandlers。

@Aggregate
@EqualsAndHashCode
@NoArgsConstructor
public class Referentschap {

    @EntityId
    private UUID referentschapId;

// This command handler is never reached.
    @CommandHandler
    public void verwerkReferentschapBijgewerkt(VerwerkReferentschapBijgewerkt command) {
        apply(ReferentschapBijgewerktVerwerkt.builder()
                .onderzoekId(command.getOnderzoekId())
                .referentschapId(command.getReferentschapId())
                .einddatum(command.getEinddatum())
                .build());
    }
@Aggregate
@EqualsAndHashCode
@NoArgsConstructor
public class Waarschuwing {

    @EntityId
    private UUID waarschuwingId;

// this command handler is never reached.
    @CommandHandler
    public void verwerkWaarschuwingVerlopen(VerwerkWaarschuwingVerlopen command) {
        apply(WaarschuwingVerlopenVerwerkt.builder()
                .onderzoekId(command.getOnderzoekId())
                .waarschuwingId(command.getWaarschuwingId())
                .verloopdatum(command.getVerloopdatum())
                .build());
    }
}

的字符串

jdgnovmf

jdgnovmf1#

这是一种直觉,但我猜Axon Framework的AggregateModel没有正确构造,因为聚合成员上的@Aggregate注解也是如此。
聚合成员只能通过@AggregateMember注解在聚合中引用。@Aggregate注解的作用是:
1.将类标记为Aggregate,并且
1.让它通过Axon的Spring自动配置自动连接。
如果您有一个“简单”聚合,那么您只需要在所谓的聚合根上使用@Aggregate注解一次。如果你有一个polymorphic aggregate,你只需要在根类和所有具体实现(本质上是图的子类)上使用@Aggregate注解。
任何不是根聚合或多态聚合的类都不需要@Aggregate注解。我认为这是罪魁祸首,因为@Aggregate注解执行自动连接,并且用于多态聚合逻辑。
因此,请从您的成员中删除注解,并告诉我们这是否解决了问题!

相关问题