This extension should be added when you need to use the `transacted()` EIP in the router. It leverages the transaction capabilities provided by the narayana-jta extension in Quarkus. 

Refer to the https://quarkus.io/guides/transaction[Quarkus Transaction guide] for the more details about transaction support. For a simple usage:

[source,java]
----
from("direct:transaction")
    .transacted()
    .to("sql:INSERT INTO A TABLE ...?dataSource=#ds1")
    .to("sql:INSERT INTO A TABLE ...?dataSource=#ds2")
    .log("All data committed to DataSources ds1 and ds2")
----

You can use a specific transaction policy by referring to its name.

[source,java]
----
from("direct:transaction")
    .transacted("PROPAGATION_REQUIRED")
    .to("sql:INSERT INTO A TABLE ...?dataSource=#ds1");
    .to("sql:INSERT INTO A TABLE ...?dataSource=#ds2")
    .log("All data committed to DataSources ds1 and ds2")
----

Support is provided for the following transaction policies.

[cols="50,.^50]
|===
|Policy | Description

| `PROPAGATION_MANDATORY`

| Support a current transaction; throw an exception if no current transaction exists.

| `PROPAGATION_NEVER`

| Do not support a current transaction; throw an exception if a current transaction exists.

| `PROPAGATION_NOT_SUPPORTED`

| Do not support a current transaction; rather always execute non-transactionally.

| `PROPAGATION_REQUIRED`

| Support a current transaction; create a new one if none exists.

| `PROPAGATION_REQUIRES_NEW`

| Create a new transaction, suspending the current transaction if one exists.

| `PROPAGATION_SUPPORTS`

| Support a current transaction; execute non-transactionally if none exists.

|===
