A bug [0] in APTK causes our Javadoc extraction to fail for methods whose parameters are classes nested in interfaces. We fix that by temporarily including a fixed copy of TypeElementWrapper, that looks up outer types on interfaces as well.
[0] https://github.com/toolisticon/aptk/issues/163
We now explicitly declare an order for the MTBPP so that it gets registered for execution before the ones that create infrastructure for message listeners so that those already see the potentially proxied instance and invocations actually invoke the advice creating the traces.
We now consider all methods that are (meta-)annotated with Spring Messaging's @MessageMapping which is consistently used in a lot of broker annotations such as @(Rabbit|Kafka)Listener etc.
Eagerly initializing the archiving Cypher statements required for the new archiving event completion mode breaks our compatibility with Spring Boot 3.2 as that depends on a Cypher library version not containing the exists(…) operator yet. We now lazily instantiate those statements.
We now explicitly set the completion date property of newly created event publications to null. The copying data manipulation statements now properly copy all properties of the publication notes into the archive.
We now use two separate entity types for archived and non-archived event publications to rpevent hibernate hickups when inserting an instance of a subtype with he same id.
We now support an archiving completion mode that copies the entry to be completed into a dedicated archive to retain the completed event publications but also keep the main publication store small for more efficient data access.
Co-authored-by: Oliver Drotbohm <oliver.drotbohm@broadcom.com>
In case no ObjectMapper bean instance is present, we now fall back to creating a default one to render a JSON byte array. This is useful in case Jackson is on the class path but not necessarily the JacksonObjectMapperBuilder, which is located in spring-web.
DefaultEventPublicationRegistry.processIncompletePublications(…) now actively unregisters the publication from being considered in progress after completion (either successful or failed). While CompletionRegisteringAdvisor should take care of that on the target listeners we now leave the publications in progress in consistent state independent of the actual target being invoked. Decrease log level of the failed listener invocation as it's not unusual for the listener to fail.
Improved PublicationsInProgress by switching to a concurrent map internally to avoid ConcurrentModificationExceptions in case of multiple threads.
We now support SpEL expressions in routing targets for events to be externalized. Introduced a BrokerRouting.getTarget(Object) overload to allow access to the event object in the SpEL expression. To support those, event externalizers will have to call that method where they previously called ….getTarget().