@Override public <T> AnnotatedAggregateModel<T> createModel(Class<? extends T> aggregateType) { if (!registry.containsKey(aggregateType)) { AnnotatedHandlerInspector<T> inspector = AnnotatedHandlerInspector.inspectType(aggregateType, parameterResolverFactory, handlerDefinition); AnnotatedAggregateModel<T> model = new AnnotatedAggregateModel<>(aggregateType, inspector); // Add the newly created inspector to the registry first to prevent a StackOverflowError: // another call to createInspector with the same inspectedType will return this instance of the inspector. registry.put(aggregateType, model); model.initialize(); } //noinspection unchecked return registry.get(aggregateType); }
private void doPublish(EventMessage<?> message, T target) { getHandler(message).ifPresent(h -> { try { h.handle(message, target); } catch (Exception e) { throw new MessageHandlerInvocationException( format("Error handling event of type [%s] in aggregate", message.getPayloadType()), e); } }); children.forEach(i -> i.publish(message, target)); }
@SuppressWarnings("unchecked") private AnnotatedAggregateModel<T> runtimeModelOf(T target) { return modelOf((Class<T>) target.getClass()); }
@Override public <T> AnnotatedAggregateModel<T> createModel(Class<? extends T> aggregateType) { if (!registry.containsKey(aggregateType)) { AnnotatedHandlerInspector<T> inspector = AnnotatedHandlerInspector.inspectType(aggregateType, parameterResolverFactory, handlerDefinition); AnnotatedAggregateModel<T> model = new AnnotatedAggregateModel<>(aggregateType, inspector); // Add the newly created inspector to the registry first to prevent a StackOverflowError: // another call to createInspector with the same inspectedType will return this instance of the inspector. registry.put(aggregateType, model); model.initialize(); } //noinspection unchecked return registry.get(aggregateType); }
@SuppressWarnings("unchecked") private AnnotatedAggregateModel<T> runtimeModelOf(T target) { return modelOf((Class<T>) target.getClass()); }
private void doPublish(EventMessage<?> message, T target) { getHandler(message).ifPresent(h -> { try { h.handle(message, target); } catch (Exception e) { throw new MessageHandlerInvocationException( format("Error handling event of type [%s] in aggregate", message.getPayloadType()), e); } }); children.forEach(i -> i.publish(message, target)); }
@Override public void publish(EventMessage<?> message, T target) { if (target != null) { runtimeModelOf(target).doPublish(message, target); } }
private void initialize() { inspectAggregateType(); inspectFields(); prepareHandlers(); }
@Override public void publish(EventMessage<?> message, T target) { if (target != null) { runtimeModelOf(target).doPublish(message, target); } }
private void initialize() { inspectAggregateType(); inspectFields(); prepareHandlers(); }