[
https://issues.apache.org/jira/browse/CAUSEWAY-3544?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17795685#comment-17795685
]
Daniel Keir Haywood commented on CAUSEWAY-3544:
-----------------------------------------------
Post CAUSEWAY-3654, there is no longer any TransactionBoundaryAware interface,
we instead use Spring's own TransactionSynchronization. And it's also possible
to mark a bean with @TransactionalScope.
How does that relate to this ticket?
Well, the InteractionServiceDefault _is_ responsible for setting up a "default"
transaction, by calling TransactionServiceSpring#onOpen(...). And it commits
it afterwards in onClose(). The Command is 1:1 with the Interaction.
Moreover, within it there could be multiple transactions, for example if
transactionService#run(REQUIRES_NEW, ...) is used.
So what?
So, I think the remark in the description text: "I don't see any reason that
command publishing is any different from auditing," is incorrect. Why?
Because auditing (EntityPropertyChangeDefault) is transaction-scoped, and is
flushed with each transaction, whereas the command is associated with the
top-level default transaction.
Well, ok, so perhaps it isn't any different, it is transactionally-bound, just
with the transaction setup by InteractionService's call to
TransactionServiceSpring#onOpen (where the close tasks are held as attributes
of the Interaction) rather than those managed explicitly via
TranscationService#call.
> Refactor preInteractionClosed calling of completeAndPublishCommand, instead
> treat similar to audit trail publisher.
> -------------------------------------------------------------------------------------------------------------------
>
> Key: CAUSEWAY-3544
> URL: https://issues.apache.org/jira/browse/CAUSEWAY-3544
> Project: Causeway
> Issue Type: Improvement
> Components: Core
> Affects Versions: 2.0.0-RC2
> Reporter: Daniel Keir Haywood
> Assignee: Daniel Keir Haywood
> Priority: Minor
> Fix For: 2.0.0-RC4
>
>
> In InteractionServiceDefault#preInteractionClosed() we currently call the
> `completeAndPublishCurrentCommand` first, and then later we loop around all
> transactionBoundaryAwareBeans callback, tell them to do their stuff. One of
> those is auditing (EntityChangePublishing).
> I don't see any reason that command publishing is any different from
> auditing, so I think we should refactor to use the same callbacks..
> Note that ExecutionPubilshing is not a transactionally aware aspect ... we
> publish that more eagerly, as each action invocation (or property edit) is
> executed .
--
This message was sent by Atlassian Jira
(v8.20.10#820010)