11.3.2. Optimisation LRCO pour une validation en 1 phase (1 PC)


Bien que le protocole de validation en deux phases (2PC) soit plus commun, certaines situations ne peuvent pas accommoder les deux phases. Dans ces cas, vous pouvez utiliser le protocole single phase commit (1PC). Cela a lieu par exemple quand une source de données non-XA-aware doit participer à la transaction.
Dans ces situations, une optimisation appelée Last Resource Commit Optimization (LRCO) est employée. La ressource monophasée est traitée en dernier dans la phase de préparation de la transaction, et il y a une tentative de validation. Si la validation réussit, le journal des transactions est écrit et les ressources restantes passent par le protocole 2PC. Si la dernière ressource ne parvient pas à être validée, la transaction est annulée.
Malgré que ce protocole permet le traitement de la plupart des opérations, certains types d'erreurs peuvent aboutir à des résultats de transactions inconsistants. Il est donc recommandé d'utiliser cette approche en dernier ressort.
Quand on utilise une source de données locale TX dans une transaction, l'optimisation LRCO est automatiquement appliquée.

11.3.2.1. Commit Markable Resource (CRM)

Résumé

La configuration de l'accès à un gestionnaire de ressources via l'interface CRM de validation de ressources marquables (Commit Markable Resource) garantit que le gestionnaire de ressources 1PC puisse être inscrit dans une transaction 2PC. C'est une implémentation de l'algorithme LRCO, qui rend les ressources non-XA entièrement récupérables.

Jusqu'à maintenant, l'ajout de ressources 1PC à une transaction 2PC était réalisée par la méthode LRCO, mais il y a place à erreur avec LRCO. Suivre la procédure ci-dessous pour ajouter des ressources 1PC à une transaction 2PC via la méthode LRCO :
  1. Préparer 2PC
  2. Valider LRCO
  3. Write tx log
  4. Commit 2PC
Si la procédure échoue entre les étapes 2 et 3, vous ne pourrez pas valider le 2PC. CMR élimine cette restriction et permet à 1PC d'être bien inscrit dans une transaction 2PC.
Restrictions

Une transaction peut ne contenir qu'une ressource CMR.

Conditions préalables

Vous devez avoir un tableau créé pour lequel le SQL suivant fonctionne :

Copy to Clipboard Toggle word wrap
SELECT xid,actionuid FROM _tableName_ WHERE transactionManagerID IN (String[])
DELETE FROM _tableName_ WHERE xid IN (byte[[]])
INSERT INTO _tableName_ (xid, transactionManagerID, actionuid) VALUES (byte[],String,byte[])

Exemple 11.1. Voici quelques exemples de requêtes SQL

Sybase : Copy to Clipboard Toggle word wrap
CREATE TABLE xids (xid varbinary(144), transactionManagerID varchar(64), actionuid varbinary(28))
Oracle : Copy to Clipboard Toggle word wrap
CREATE TABLE xids (xid RAW(144), transactionManagerID varchar(64), actionuid RAW(28))
CREATE UNIQUE INDEX index_xid ON xids (xid)
IBM : Copy to Clipboard Toggle word wrap
CREATE TABLE xids (xid VARCHAR(255) for bit data not null, transactionManagerID
varchar(64), actionuid VARCHAR(255) for bit data not null)
CREATE UNIQUE INDEX index_xid ON xids (xid)
SQL Server : Copy to Clipboard Toggle word wrap
CREATE TABLE xids (xid varbinary(144), transactionManagerID varchar(64), actionuid varbinary(28))
CREATE UNIQUE INDEX index_xid ON xids (xid)
Postgres : Copy to Clipboard Toggle word wrap
CREATE TABLE xids (xid bytea, transactionManagerID varchar(64), actionuid bytea)
CREATE UNIQUE INDEX index_xid ON xids (xid)
Activer un gestionnaire de ressources en tant que CMR

Par défaut, la fonctionnalité CMR est désactivée pour les sources de données. Pour l'activer, vous devez créer ou modifier la configuration de source de données et vous assurer que l'attribut connectable est défini sur true. Voici un exemple d'entrée de configuration de la section sources de données d'un fichier de configuration xml serveur :

Copy to Clipboard Toggle word wrap
<datasource enabled="true" jndi-name="java:jboss/datasources/ConnectableDS" pool-name="ConnectableDS" jta="true" use-java-context="true" spy="false" use-ccm="true" connectable="true"/>

Note

Cette fonctionnalité ne s'applique pas aux sources de données XA.
Vous pouvez également activer un gestionnaire de ressources en tant que CMR par le CLI de la façon suivante : Copy to Clipboard Toggle word wrap
/subsystem=datasources/data-source=ConnectableDS:add(enabled="true", jndi-name="java:jboss/datasources/ConnectableDS", jta="true", use-java-context="true", spy="false", use-ccm="true", connectable="true", connection-url="validConnectionURL", driver-name="h2")
Mettre à jour une ressource existante pour qu'elle puisse utiliser la nouvelle fonctionnalité CMR

Si vous ne devez mettre à jour qu'une seule ressource existante pour utiliser la nouvelle fonctionnalité CMR, il vous suffira de modifier l'attribut connectable :

Copy to Clipboard Toggle word wrap
/subsystem=datasources/data-source=ConnectableDS:write-attribute(name=connectable,value=true)

Identification des sources de données pouvant utiliser la fonctionnalité CMR

Le sous-système de transactions identifie les sources de données qui peuvent utiliser la fonctionnalité CMR par l'intermédiaire d'une entrée dans la section de config du sous-système de transaction comme dans l'exemple ci-dessous :

Copy to Clipboard Toggle word wrap
<subsystem xmlns="urn:jboss:domain:transactions:3.0">
    ...
    <commit-markable-resources>
        <commit-markable-resource jndi-name="java:jboss/datasources/ConnectableDS">
            <xid-location name="xids" batch-size="100" immediate-cleanup="false"/>
        </commit-markable-resource>
        ...
    </commit-markable-resources>
</subsystem>

Note

Vous devez démarrer le serveur à nouveau pour ajouter le CMR.
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat, Inc.