Koordination externer Transaktionen implementieren

Mit dem hier aufgeführten Verfahren können Sie die Koordination externer Transaktionen implementieren.

Informationen zu diesem Vorgang

So implementieren Sie die Koordination externer Transaktionen:

Vorgehensweise

  1. Erstellen Sie die angepasste API, die Ihre externen Transaktionsprozesse implementieren soll, führen Sie aber KEIN Commit der externen Transaktionen durch. Registrieren Sie stattdessen das externe Transaktionsobjekt mit "YFSEnvironment", indem Sie "(YFSEnvironment)env.setTxnObject(String ID, Object txnObj)" abrufen.

    Die "String ID" ist ein eindeutiger Name, der von der Implementierungsklasse des Benutzerexits verwendet wird, um das angepasste Transaktionsobjekt zu bestimmen.

    In dem folgenden Beispiel wird eine einfache angepasste API veranschaulicht.

    public class doSomethingAPI 
    { 
    private YFCLogCategory cat = YFCLogCategory.instance("DoSomethingAPI");
    public doSomethingAPI()  // constructor is empty 
    { 
    } 
    public void writeToDB (String key, YFSEnvironment oEnv) 
    {
    try 
    { 
    Driver aDriver = 
    (Driver)Class.forName("db2.jdbc.DB2Driver").newInstance();
            String url = "jdbc:db2:thin:@127.0.0.1:1521:qotree2";
            Connection conn = DriverManager.getConnection(url, "Scott", "Tiger"); 
    conn.setAutoCommit(false);
           String sql = "insert into TxnTest (key) values ('" + key + "')";
           Statement stmt = conn.createStatement();
           stmt.executeUpdate(sql);
           oEnv.setTxnObject("YDBconn", conn); 
    } 
    catch (Exception e) 
    { 
    System.out.println ("Caught Exception :\n" + e); 
    }
       } 
    public Document doSomething(YFSEnvironment env, Document doc) throws Exception 
    {
     	    System.out.println("Executing doSomething method..........."); 
    writeToDB ("doSomething", env); 
    return doc;
       } 
    }
  2. Implementieren Sie die Benutzer-Exit-Schnittstelle com.yantra.yfs.japi.ue.YFSTTxnCoordinatorUE, um die externen Transaktionen entweder vor oder nach den Festlegungen des Sterling™ Order Management Systems festzulegen. Implementieren Sie dann die Rollback-Methode so, dass, wenn die Sterling Order Management System-Transaktion einen Rollback auslöst, die Methode afterYantraTxnRollback(YFSEnvironment oEnv ) aufgerufen wird, um auch die externen Transaktionen zurückzusetzen. Implementieren Sie dazu die folgenden Methoden:
    • beforeYantraTxnCommit(YFSEnvironment oEnv)
    • afterYantraTxnCommit(YFSEnvironment oEnv)
    • afterYantraTxnRollback(YFSEnvironment oEnv)
    Hinweis: Sie können entweder den beforeYantraTxnCommit oder den afterYantraTxnCommit verwenden, um Commits zu synchronisieren, je nach Ihren Integrationsanforderungen.

    Durch das Abrufen von "(YFSEnvironment)env.getTxnObject(ID)" können diese Methoden die Verarbeitung des externen Transaktionsobjekts erreichen, das zuvor von "(YFSEnvironment)env.setTxnObject(String ID, Object txnObj)" registriert war. Hinweis: Die ID ist in den Abrufen "getTxnObject" und "setTxnObject" identisch.

    Im Folgenden sehen Sie ein Beispiel für die Implementierung der Benutzerexitschnittstelle "YFSTTxnCoordinatorUE".

    public class afterTxnCommit implements YFSTxnCoordinatorUE 
    {
     
    public void beforeYantraTxnCommit (YFSEnvironment oEnv) throws YFSUserExitException 
    { 
    // before method is not implemented because after method is implemented. 
    } 
    public void afterYantraTxnCommit (YFSEnvironment oEnv) throws YFSUserExitException 
    { 
    System.out.println ("Entering method afterYantraTxnCommit........."); 
    try 
    {
       Connection ydbConn = (Connection)oEnv.getTxnObject("YDBconn");
       ydbConn.commit(); 
    } 
    catch (Exception e) 
    { 
    System.out.println ("Caught Exception :\n" + e); 
    } 
    } 
    public void afterYantraTxnRollback (YFSEnvironment oEnv) throws 
    YFSUserExitException 
    { 
    System.out.println ("Entering method afterYantraTxnRollback.........");
    try 
    {
       Connection ydbConn = (Connection)oEnv.getTxnObject("YDBconn");
       ydbConn.rollback(); 
    } 
    catch (Exception e) 
    { 
    System.out.println ("Caught Exception :\n" + e); 
    }
    }
    
  3. Starten Sie den Anwendungsmanager und navigieren Sie zu Systemverwaltung > User Exit Management, um die Implementierungsklasse YFSTxnCoordinatorUE zu konfigurieren.

    Weitere Informationen zur User-Exit-Schnittstellendefinition YFSTxnCoordinatorUE finden Sie in der Javadoc-Information.