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
[email protected]
http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev