transactions wso2 axis2 wso2esb wso2dss

transactions - Wso2Dss Box_Carring no funciona en WSO2esb4.8.0



axis2 (2)

Tu no estás haciendo tus operaciones de DSS en la misma sesión.

DSS usa la cookie JSESSIONID para identificar sesiones. begin_boxcar tomar esa cookie de la llamada a begin_boxcar y, a su vez, enviar la cookie junto con el resto de las llamadas DSS que desea realizar en la misma transacción.

Finalmente, deberá enviar la misma cookie en la llamada a end_boxcar o abort_boxcar , lo que termine llamando.

Después de llamar a una operación de begin_boxcar en un servicio DSS, puede acceder a las cookies establecidas por el servicio a través de las propiedades de transporte:

<property name="setCookieHeader" expression="$trp:Set-Cookie" action="set"/>

Después de tener la cookie en una propiedad de contexto del mensaje Synapse, puede usar un lenguaje de scripting como Groovy o JavaScript para analizar el valor real de la cookie.

Cualquier llamada subsiguiente de DSS que deba estar en la misma sesión de delimitación de cuadro debe enviar la cookie al servicio DSS. Puede hacer que Axis2 envíe la cookie estableciéndola en una propiedad de transporte (análoga a los encabezados HTTP en este caso):

<property name="Cookie" expression="$ctx:jsessionIdCookie" action="set" scope="transport" />

Estoy trabajando con wso2dss3.0.1 y wso2esb4.8.0. Deseo trabajar con Transactions para eso he habilitado box_carying en wso2dss y funciona bien. Me gustaría insertar los datos en 2 tablas si la 2da tabla falló mi primera tabla también necesita deshacerse .Esta funcionalidad funciona en wso2dss.While estoy llamando al mismo servicio usando wso2esb que la reversión de transacciones en el tiempo no funciona box_carying no funciona bien, mi configuración es así

<?xml version="1.0" encoding="UTF-8"?> <proxy xmlns="http://ws.apache.org/ns/synapse" name="TransactionProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> <target> <inSequence> <log level="full"> <property name="M1" value="*************HITTING Transaction PROXY*************"/> </log> <property name="OUT_ONLY" value="true"/> <property name="companycode" expression="//companycode/text()"/> <property name="companyname" expression="//companyname/text()"/> <property name="clientcode" expression="//clientcode/text()"/> <property name="clientname" expression="//clientname/text()"/> <payloadFactory media-type="xml"> <format> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dat="http://ws.wso2.org/dataservice"> <soapenv:Header/> <soapenv:Body/> </soapenv:Envelope> </format> <args/> </payloadFactory> <log level="full"> <property name="M2" value="*************HITTING Transaction PROXY*************"/> </log> <header name="Action" value="urn:begin_boxcar"/> <callout serviceURL="http://192.168.1.201:9764/services/Transaction/begin_boxcar" action="urn:begin_boxcar"> <source type="envelope"/> <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> </callout> <payloadFactory media-type="xml"> <format> <p:insertinto_mclient_OP xmlns:p="http://ws.wso2.org/dataservice"> <xs:clientcode xmlns:xs="http://ws.wso2.org/dataservice">$1</xs:clientcode> <xs:clientname xmlns:xs="http://ws.wso2.org/dataservice">$2</xs:clientname> <xs:createdbyid xmlns:xs="http://ws.wso2.org/dataservice">-1</xs:createdbyid> <xs:modifiedbyid xmlns:xs="http://ws.wso2.org/dataservice">-1</xs:modifiedbyid> </p:insertinto_mclient_OP> </format> <args> <arg evaluator="xml" expression="get-property(''clientcode'')"/> <arg evaluator="xml" expression="get-property(''clientname'')"/> </args> </payloadFactory> <header name="Action" value="urn:insertinto_mclient_OP"/> <callout serviceURL="http://192.168.1.201:9764/services/Transaction/" action="urn:insertinto_mclient_OP"> <source xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> </callout> <payloadFactory media-type="xml"> <format> <p:insertinto_mcompany_OP xmlns:p="http://ws.wso2.org/dataservice"> <xs:companycode xmlns:xs="http://ws.wso2.org/dataservice">$1</xs:companycode> <xs:comapnyname xmlns:xs="http://ws.wso2.org/dataservice">$2</xs:comapnyname> <xs:createdbyid xmlns:xs="http://ws.wso2.org/dataservice">-1</xs:createdbyid> <xs:modifiedbyid xmlns:xs="http://ws.wso2.org/dataservice">-1</xs:modifiedbyid> <xs:clientid xmlns:xs="http://ws.wso2.org/dataservice">-1</xs:clientid> </p:insertinto_mcompany_OP> </format> <args> <arg evaluator="xml" expression="get-property(''companycode'')"/> <arg evaluator="xml" expression="get-property(''companyname'')"/> </args> </payloadFactory> <log level="full"> <property name="M5" value="**************hitting2nd dss*****"/> </log> <header name="Action" value="urn:insertinto_mcompany_OP"/> <callout serviceURL="http://192.168.1.201:9764/services/Transaction/" action="urn:insertinto_mcompany_OP"> <source xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> </callout> <payloadFactory media-type="xml"> <format> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dat="http://ws.wso2.org/dataservice"> <soapenv:Header/> <soapenv:Body/> </soapenv:Envelope> </format> <args/> </payloadFactory> <log level="full"> <property name="M3" value="*************HITTING Transaction PROXY*************"/> </log> <header name="Action" value="urn:end_boxcar"/> <callout serviceURL="http://192.168.1.201:9764/services/Transaction/end_boxcar" action="urn:end_boxcar"> <source type="envelope"/> <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> </callout> <log level="full"> <property name="M4" value="*************HITTING Transaction PROXY*************"/> </log> </inSequence> <outSequence> <send/> </outSequence> </target> <description/> </proxy>

Si envío valores correctos a db, esos valores se almacenan bien en las tablas, pero si envío datos incorrectos a la segunda tabla, aunque la 1ª tabla que almacena los datos 2º está fallando. Aquí no está sucediendo el envío de la caja. Esta versión es un error. wso2dss try-it herramienta transacción funciona bien y luego no desde wso2esb lados seguí este enlace ingrese descripción del enlace aquí ingrese la descripción del enlace aquí Gracias en Adv ..


Hay una solución temporal, use request_box para envolver varias operaciones sql sin consulta en una sola solicitud para evitar el uso de la sesión. Si falla cualquier sql en la solicitud, la solicitud completa se revertirá.

Primero necesitas una base de datos mysql llamada MyDB con un usuario llamado root cuya contraseña es root y una base de datos Postgresql también llamada MyDB con un usuario llamado postgres cuya contraseña es root. Luego crea una tabla llamada cliente en ambas bases de datos:

CREATE TABLE customer ( cust_id int(11) NOT NULL, name varchar(255) NOT NULL, PRIMARY KEY (`cust_id`) );

La muestra inserta un registro en mysql, luego inserta dos registros con el mismo cust_id en postgres, lo que causa un error, por lo que toda la transacción se retrotraerá y no verá el registro insertado en mysql.

A continuación está mi definición de servicio proxy:

<?xml version="1.0" encoding="UTF-8"?> <proxy xmlns="http://ws.apache.org/ns/synapse" name="MyTransactionProxy" startOnLoad="true" statistics="disable" trace="disable" transports="http,https"> <target> <inSequence> <property expression="//id/text()" name="id"/> <property expression="//name/text()" name="name"/> <payloadFactory media-type="xml"> <format> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dat="http://ws.wso2.org/dataservice"> <soapenv:Header/> <soapenv:Body> <dat:request_box> <dat:my_insert> <dat:id>$1</dat:id> <dat:name>$2</dat:name> </dat:my_insert> <dat:pos_insert> <dat:id>$1</dat:id> <dat:name>$2</dat:name> </dat:pos_insert> <dat:pos_insert> <dat:id>$1</dat:id> <dat:name>$2</dat:name> </dat:pos_insert> </dat:request_box> </soapenv:Body> </soapenv:Envelope> </format> <args> <arg evaluator="xml" expression="get-property(''id'')"/> <arg evaluator="xml" expression="get-property(''name'')"/> </args> </payloadFactory> <callout action="urn:request_box" serviceURL="http://longqinsi:8280/services/DTPDS"> <source xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> <target xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/> </callout> </inSequence> <outSequence> <send/> </outSequence> </target> <description/> </proxy>

Mi servicio de datos se define a continuación:

<?xml version="1.0" encoding="UTF-8"?> <data disableStreaming="true" enableBoxcarring="true" enableDTP="true" name="DTPDS"> <config id="pos_ds"> <property name="org.wso2.ws.dataservice.xa_datasource_class">org.postgresql.xa.PGXADataSource</property> <property name="org.wso2.ws.dataservice.xa_datasource_properties"> <property name="ServerName">localhost</property> <property name="PortNumber">5432</property> <property name="DatabaseName">MyDB</property> <property name="User">postgres</property> <property name="Password">root</property> </property> </config> <config id="my_ds"> <property name="org.wso2.ws.dataservice.xa_datasource_class">com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</property> <property name="org.wso2.ws.dataservice.xa_datasource_properties"> <property name="URL">jdbc:mysql://localhost:3306/MyDB</property> <property name="User">root</property> <property name="Password">root</property> </property> </config> <query id="pos_q" useConfig="pos_ds"> <sql>INSERT INTO customer VALUES(?,?)</sql> <param name="id" sqlType="INTEGER"/> <param name="name" sqlType="STRING"/> </query> <query id="my_q" useConfig="my_ds"> <sql>INSERT INTO customer VALUES(?,?)</sql> <param name="id" sqlType="INTEGER"/> <param name="name" sqlType="STRING"/> </query> <operation disableStreaming="true" name="pos_insert" returnRequestStatus="true"> <call-query href="pos_q"> <with-param name="id" query-param="id"/> <with-param name="name" query-param="name"/> </call-query> </operation> <operation disableStreaming="true" name="my_insert" returnRequestStatus="true"> <call-query href="my_q"> <with-param name="id" query-param="id"/> <with-param name="name" query-param="name"/> </call-query> </operation> </data>