I have a problem with this configuration[1]. 

When I call this proxy service with the 3 DB online it work with no problem.
It insert the data in each DB.

But when one DB is down, this configuration must call the
myFaultHandlerTransac sequence and do a rollback, but in this case
I receive an error[2] in ESB console, so the system don´t do the rollback, I
check in each DB, and another error occurred due to a time out[3] event with
<property name="OUT_ONLY" value="true"/> in proxy configuration.




[1] This is my proxy service:
<proxy xmlns="http://ws.apache.org/ns/synapse";
name="DirectorioEstudiantesMultiProxyTransac" transports="https http"
startOnLoad="true" trace="disable">
    <target faultSequence="myFaultHandlerTransac">
        <inSequence>
            <transaction action="new"/>
            <log level="custom">
                <property name="text" value="** Guardar en las BDs usando
BDReport**"/>
            </log>
                        
                        <dbreport useTransaction="true">
                                <connection>
                                        <pool>
                     <!-- my pool data-->
                                        </pool>
                                </connection>
                                <statement>
                                        <sql>
                                         <!-- my sql0 sentence-->
                                        </sql>
                                                                 <!-- my
parameter data-->
                                </statement>
                        </dbreport>

                        <dbreport useTransaction="true">
                                <connection>
                                        <pool>
                                                                     <!-- my
pool data-->
                                        </pool>
                                </connection>
                                <statement>
                                        <sql>
                                         <!-- my sql1 sentence-->
                                        </sql>
                                                                    <!-- my
parameter data-->
                                </statement>
                        </dbreport>                     
                        

                        <dbreport useTransaction="true">
                                <connection>
                                        <pool>
                                                                    <!-- my
pool data-->
                                        </pool>
                                </connection>
                                <statement>
                                        <sql>
                                         <!-- my sql2 sentence-->
                                        </sql>
                                                                  <!-- my
parameter data-->
                                </statement>
                        </dbreport>                     
                        
                        <transaction action="commit"/>
                        <property name="OUT_ONLY" value="true"/>
        </inSequence>
    </target>
    <publishWSDL
uri="http://127.0.0.1:9763/services/DirectorioEstudiantes?wsdl"/>
    <parameter name="useOriginalwsdl">false</parameter>
</proxy>


This is my fault sequence:

<sequence xmlns="http://ws.apache.org/ns/synapse";
name="myFaultHandlerTransac">
        <log level="custom">
            <property name="text" value="** Rollback Transaction**"/>
        </log>
        <transaction action="rollback"/>
        <send/>
</sequence>


[2] This is the error in ESB console:

[2011-12-03 11:55:17,656]  INFO - LogMediator text = ** Rollback
Transaction**
[2011-12-03 11:55:17,766]  INFO - TimeoutHandler This engine will expire all
callbacks after : 86400 seconds, irrespective of the timeout action, after
the specimeout
[2011-12-03 11:55:17,781] ERROR - ClientUtils The system cannot infer the
transport information from the
/services/DirectorioEstudiantesMultiProxyTransac.DirectoProxyTransacHttpSoap
12Endpoint URL.
[2011-12-03 11:55:17,781] ERROR - Axis2Sender Unexpected error during
sending message out
org.apache.axis2.AxisFault: The system cannot infer the transport
information from the
/services/DirectorioEstudiantesMultiProxyTransac.DirectorioEstudiantesMult
ap12Endpoint URL.
        at
org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:
81)
        at
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.ex
ecuteImpl(DynamicAxisOperation.java:123)
        at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
        at
org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPCl
ient.java:441)
        at
org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:57)
        at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvir
onment.java:271)
        at
org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:
84)
        at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat
or.java:60)
        at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.
java:114)
        at
org.apache.synapse.mediators.MediatorFaultHandler.onFault(MediatorFaultHandl
er.java:81)
        at
org.apache.synapse.FaultHandler.handleFault(FaultHandler.java:102)
        at
org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServi
ceMessageReceiver.java:183)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
        at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HT
TPTransportUtils.java:172)
        at
org.apache.synapse.transport.nhttp.ServerWorker.processEntityEnclosingMethod
(ServerWorker.java:408)
        at
org.apache.synapse.transport.nhttp.ServerWorker.run(ServerWorker.java:259)
        at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerP
ool.java:173)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.ja
va:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:9
08)
        at java.lang.Thread.run(Thread.java:619)



[3] [2011-12-03 11:56:17,984]  INFO - HTTPSender Unable to sendViaPost to
url[http://localhost:8280/services/DirectorioEstudiantesMultiProxyTransac.Di
rectorioEstudiaacHttpSoap12Endpoint] java.net.SocketTimeoutException: Read
timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
        at
org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
        at
org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
        at
org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:11
16)
        at
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnect
ionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413)
        at
org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.j
ava:1973)
        at
org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.jav
a:1735)
        at
org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:109
8)
        at
org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethod
Director.java:398)
        at
org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDir
ector.java:171)
        at
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
        at
org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTT
PSender.java:621)
        at
org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
        at
org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
        at
org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithC
ommons(CommonsHTTPTransportSender.java:449)
        at
org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTT
PTransportSender.java:276)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
        at
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperatio
n.java:406)
        at
org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisO
peration.java:229)
        at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
        at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:555)
        at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:531)
        at
org.apache.jsp.admin.jsp.WSRequestXSSproxy_005fajaxprocessor_jsp._jspService
(WSRequestXSSproxy_005fajaxprocessor_jsp.java:272)
        at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
32)
        at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.wso2.carbon.ui.JspServlet.service(JspServlet.java:161)
        at
org.wso2.carbon.ui.TilesJspServlet.service(TilesJspServlet.java:80)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at
org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPat
hServletAdaptor.java:36)
        at
org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(
ServletRegistration.java:90)
        at
org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxySer
vlet.java:111)
        at
org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.
java:67)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at
org.wso2.carbon.bridge.BridgeServlet.service(BridgeServlet.java:164)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:304)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:240)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:164)
        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:462)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164
)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100
)
        at
org.wso2.carbon.server.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThr
eadDetectionValve.java:154)
        at
org.wso2.carbon.server.TomcatServer$1.invoke(TomcatServer.java:254)
        at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:118)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
        at
org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:
396)
        at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(H
ttp11NioProtocol.java:356)
        at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:
1534)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.ja
va:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:9
08)
        at java.lang.Thread.run(Thread.java:619)


Saludos,
Ing. Jorge Infante Osorio.
J´Dpto Soluciones SOA.
CDAE.
Fac. 5.
UCI.

De: carbon-dev-boun...@wso2.org [mailto:carbon-dev-boun...@wso2.org] En
nombre de Jorge Infante Osorio
Enviado el: martes, 29 de noviembre de 2011 16:02
Para: carbon-dev@wso2.org
Asunto: [Carbon-dev] problem with a transaction in ESB.

Hi all.

I have a proxy Service that do the follow:
•             Receive a message from a client and create a clone this
message three times.
•             Each clone message pass through a sequence.
•             In each sequence, I do a call to a DBReport mediator and I
store the message information into a different DB.

My idea and the use of sequences, are based in the idea to use transactions
features. If I insert data in DB1 and DB2, and fail in DB3  I want to do a
rollback in DB1 and DB2.

In Insequence mediator I put <transaction action="new"/> before clone and
after clone I put <transaction action="commit"/>. Them inside each sequence
with DBReport I put <dbreport useTransaction="true">

<inSequence>
            <transaction action="new"/>
            <log level="custom">
                <property name="text" value="** Clonando y enviando mensajes
**"/>
            </log>
            <clone>
                <target sequence="insertar_clones"/>
                <target sequence="insertar_clones1"/>
                <target sequence="insertar_clones2"/>
            </clone>
                <transaction action="commit"/>
                <property name="OUT_ONLY" value="true"/>
</inSequence>


A sequence sample:

<sequence xmlns="http://ws.apache.org/ns/synapse"; name="insertar_clones">
    <dbreport useTransaction="true">
        <connection>
            <pool>
                <password></password>
                <user> </user>
                <url>jdbc:postgresql://127.0.0.1:5432/pruebas</url>
                <driver>org.postgresql.Driver</driver>
            </pool>
        </connection>
        <statement>
            <sql>INSERT INTO estudiantes   ……   VALUES(?,?,?,?,?)</sql>
                               
        </statement>
    </dbreport>
</sequence>

The error when BD3 is down:

TID: [] [WSO2 ESB] [2011-11-27 08:47:59,968]  INFO
{org.apache.synapse.mediators.builtin.LogMediator} -  text = ** Rollback
Transaction** {org.apache.synapse.mediators.builtin.LogMediator}
TID: [] [WSO2 ESB] [2011-11-27 08:48:00,078] ERROR
{org.apache.synapse.mediators.transaction.TransactionMediator} -  Unable to
rollback transaction
{org.apache.synapse.mediators.transaction.TransactionMediator}
java.lang.IllegalStateException: This method needs a transaction for the
calling thread and none exists.
Possible causes: either you didn't start a transaction,
it rolledback due to timeout, or it was committed already.
ACTIONS: You can try one of the following: 
1. Make sure you started a transaction for the thread.
2. Make sure you didn't terminate it yet.
3. Increase the transaction timeout to avoid automatic rollback of long
transactions;
   check http://www.atomikos.com/Documentation/JtaProperties for how to do
this.
                at
com.atomikos.icatch.jta.TransactionManagerImp.raiseNoTransaction(Transaction
ManagerImp.java:123)
                at
com.atomikos.icatch.jta.TransactionManagerImp.rollback(TransactionManagerImp
.java:518)
                at
com.atomikos.icatch.jta.UserTransactionImp.rollback(UserTransactionImp.java:
140)
                at
org.wso2.carbon.atomikos.TransactionFactory$TransactionManagerWrapper.rollba
ck(TransactionFactory.java:87)
                at
org.apache.synapse.mediators.transaction.TransactionMediator.mediate(Transac
tionMediator.java:78)
                at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat
or.java:60)
                at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.
java:114)
                at
org.apache.synapse.mediators.MediatorFaultHandler.onFault(MediatorFaultHandl
er.java:81)
                at
org.apache.synapse.FaultHandler.handleFault(FaultHandler.java:102)
                at
org.apache.synapse.mediators.MediatorWorker.run(MediatorWorker.java:75)
                at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.ja
va:886)
                at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:9
08)
                at java.lang.Thread.run(Thread.java:619)


It´s possible to implement this idea??

Saludos,
Ing. Jorge Infante Osorio.
J´Dpto Soluciones SOA.
CDAE.
Fac. 5.
UCI.










Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE 
ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
_______________________________________________
Carbon-dev mailing list
Carbon-dev@wso2.org
http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev

Reply via email to