* <td>Database keeps these transactions prepared forever ("in-doubt" state)</td>
* <td>
* <ol>
* <li>store ended transactions in state; rollback on job recovery (still doesn't cover all scenarios)</li>
* <li>call xa_recover() and xa_rollback() on job recovery; disabled by default in order not to affect transactions of other subtasks and apps</li>
* <li>setting transaction timeouts (not supported by most databases)</li>
* <li>manual recovery and rollback</li>
* </ol>
* </td>
* </tr>
* <tr>
* <td>prepared > committed</td>
* <td>open(), notifyCheckpointComplete()</td>
* <td>
* Upon job recovery state contains committed transactions; or JM may notifyCheckpointComplete again after recovery.
* <p>Committing results in {@link javax.transaction.xa.XAException#XAER_NOTA XAER_NOTA} error.</p>
* </td>
* <td>
* Distinguish between transactions created during this run and restored from state and ignore {@link javax.transaction.xa.XAException#XAER_NOTA XAER_NOTA} for the latter.
* </td>
* </tr>
* </tbody>
* </table>
*
* <p>Attention: JdbcXaSinkFunction does not support exactly-once mode with MySQL or other databases
* that do not support multiple XA transaction per connection. We will improve the support in
* FLINK-22239.
*
* @since 1.13
*//*
@Internal
public class JdbcXaSinkFunction<T> extends AbstractRichFunction