jeudi 9 janvier 2020

Spring transaction not being created when invoking @Transactional method via reflection

I have a class that is invoking a public method on another class via reflection. The invoking class already has an active transaction, and the public method on the invoked class is marked with

@Transactional(propagation = Propagation.REQUIRES_NEW)
    public void handleProcess() { ..}

The invocation looks like

Runnable runnable = null;
Method handleMethod = config.handleProcessMethod;
            Object handler = autowireHandler(process);
            runnable = () -> {
                LOGGER.info("executing method {} on {}",handleMethod,handler);
                handleMethod.invoke(handler);
            };
runnable.run();

The method is called correctly, but the log indicates that it is particpating in the current transaction instead of creating a new one.

08:54:33.452 [process-executor-2] DEBUG o.springframework.orm.jpa.JpaTransactionManager - Found thread-bound EntityManager ... for JPA transaction
08:54:33.453 [process-executor-2] DEBUG o.springframework.orm.jpa.JpaTransactionManager - Participating in existing transaction

Is the reflection causing spring to miss the @Transactional annotation? I need the invoked method to use it's own transaction so that it's committed prior to returning from the invocation.





Aucun commentaire:

Enregistrer un commentaire