Implementar coordenação de transação externa

É possível implementar a coordenação de transações externas usando o procedimento listado aqui.

Sobre esta tarefa

Para implementar coordenação de transação externa:

Procedimento

  1. Crie a API customizada que deseja implementar em seu processo de transação externa, mas NÃO confirme as transações externas. Em vez disso, registre o objeto da transação externa com o YFSEnvironment chamando (YFSEnvironment)env.setTxnObject(String ID, Object txnObj).

    O ID de sequência é um nome exclusivo que é usado pela classe de implementação de saída de usuário para identificar o objeto de transação customizado.

    O exemplo a seguir ilustra uma API customizada simples.

    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. Implemente a interface de saída de usuário com.yantra.yfs.japi.ue.YFSTTxnCoordinatorUE para confirmar as transações externas antes ou depois de o Sterling™ Order Management System realizar suas confirmações. Em seguida, implemente o método de reversão para que, se a transação do Sterling Order Management System acionar uma reversão, o método afterYantraTxnRollback(YFSEnvironment oEnv ) seja chamado para reverter também as transações externas. Implemente os seguintes métodos para realizar isso:
    • beforeYantraTxnCommit(YFSEnvironment oEnv)
    • afterYantraTxnCommit(YFSEnvironment oEnv)
    • afterYantraTxnRollback(YFSEnvironment oEnv)
    Observação: você pode usar a saída de usuário beforeYantraTxnCommit ou afterYantraTxnCommit para sincronizar os commits, dependendo dos requisitos de integração.

    Chamar (YFSEnvironment)env.getTxnObject(ID) possibilita que esses métodos obtenham a manipulação do objeto de transação externa que foi previamente registrado pelo (YFSEnvironment)env.setTxnObject(String ID, Object txnObj). Note que o ID é o mesmo em ambas as chamadas, getTxnObject e setTxnObject.

    A seguir está um exemplo da implementação da interface da saída de usuário 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. Inicie o Gerenciador de aplicativos e navegue até Administração do sistema > Gerenciamento de saídas de usuário para configurar a classe de implementação YFSTxnCoordinatorUE.

    Para obter mais informações sobre a definição da interface de saída do usuário YFSTxnCoordinatorUE, consulte as informações do Javadoc.