An Integration Test here means a test runner class annotated
When following the Spring Transactions documentation it is tempting to annotate your
integration test with
@Transactional then seed your database before firing up
the route to be tested and sending a message in. This is incorrect as Spring will have an
in-progress transaction, and Camel will wait on this before proceeding, leading to the route
Instead, remove the
@Transactional annotation from the test method and seed
the test data within a
TransactionTemplate execution which will ensure the data
is committed to the database before Camel attempts to pick up and use the transaction
manager. A simple example can be found on GitHub.
Spring's transactional model ensures each transaction is bound to one thread. A Camel route may invoke additional threads which is where the blockage may occur. This is not a fault of Camel but as the programmer you must be aware of the consequences of beginning a transaction in a test thread and expecting a separate thread created by your Camel route to be participate, which it cannot. You can, in your test, mock the parts that cause separate threads to avoid this issue.