Implementar la coordinación de transacciones externas
Puede implementar una coordinación de transacciones externas utilizando el procedimiento que aquí se lista.
Acerca de esta tarea
Para implementar la coordinación de transacciones externas:
Procedimiento
- Cree la API personalizada que desee que implemente el proceso de
transacciones externas, pero NO confirme las transacciones externas. Registre el objeto de la transacción externa con YFSEnvironment
llamado a (YFSEnvironment)env.setTxnObject(String ID, Object txnObj).
String ID es un nombre exclusivo utilizado por la clase de implementación de salida de usuario para identificar el objeto de la transacción personalizada.
En el ejemplo siguiente se muestra una API simple personalizada.
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 la interfaz de salida de usuario com.yantra.yfs.japi.ue.YFSTTxnCoordinatorUE para consignar las transacciones externas antes o después de que Sterling™ Order Management System realice sus consignaciones. A continuación, implemente el método rollback de forma que si la transacción Sterling Order Management System desencadena un rollback, se llame al método afterYantraTxnRollback(YFSEnvironment oEnv ) para que también haga rollback de las transacciones externas. Para ello, implemente los siguientes
métodos:
- beforeYantraTxnCommit(YFSEnvironment oEnv)
- afterYantraTxnCommit(YFSEnvironment oEnv)
- afterYantraTxnRollback(YFSEnvironment oEnv)
Nota: Puede utilizar la salida de usuario beforeYantraTxnCommit o afterYantraTxnCommit para sincronizar commits, dependiendo de sus requisitos de integración.La llamada a (YFSEnvironment)env.getTxnObject(ID) permite que estos métodos obtengan el manejador para el objeto de la transacción externa que había registrado anteriormente (YFSEnvironment)env.setTxnObject(String ID, Object txnObj). Tenga en cuenta que el ID es el mismo en las llamadas a getTxnObject y a setTxnObject.
A continuación se ofrece un ejemplo de la implementación de la interfaz de salida de usuario 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 el Administrador de aplicaciones y vaya a Administración del sistema > Gestión de salidas de usuario para configurar la clase de implementación YFSTxnCoordinatorUE.
Para obtener más información sobre la definición de la interfaz de salida de usuario YFSTxnCoordinatorUE, consulte la información de Javadoc.