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
- 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; } } - 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); } } - 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.