Я пытался go просмотреть документацию Spring, но не могу найти подтверждение. Я предполагаю, что при расширении AbstractAggregate Root (spring-data-commons-2.2.4.RELEASE) (и регистрации новых событий в определенных методах) я должен явно вызывать save-метод в соответствующем классе репозитория, чтобы обработчики событий могли принять место. Это правда? Это кажется странным, так как явное сохранение (для загруженного агрегата root в транзакционном контексте) является антипаттерном для моего понимания
Есть ли способ "запустить" прослушиватели событий для событий, зарегистрированных через AbstractAggregate Root .registerEvent ?
Это упрощенный код
@Entity
public class AggregateRoot extends AbstractAggregateRoot<AggregateRoot> {
@Id
private long id;
public void executeAction(){
if(myState.isSomething()){
registerEvent(new FancyEventHappened(this.id));
}
}
}
public interface AggregateRootRepository extends JpaRepository<AggregateRoot, Long>{}
@Service
public class MyService{
final AggregateRootRepository aggregateRootRepository;
@Transactional
public void execute(int id){
AggregateRoot aggregateRoot = aggregateRootRepository.findById(id).get();
aggregateRoot.executeAction();
//is this required? Any way around it if it is?
//aggregateRootRepository.save(aggregateRoot);
}
}
public class FancyEventHappened extends ApplicationEvent{
public FancyEventHappened(Object source) {
super(source);
}
}
public class FancyEventListener{
@TransactionalEventListener(TransactionPhase = TransactionPhase.BEFORE_COMMIT)
public void somethingFancyHappened(FancyEventHappened event){
System.out.println("Hooray "+event.getSource());
}
}
Спасибо за любые ответы!