I am using axis1.3 with kandula 0.2. I solved the problem. I had defined
the transaction handler at the request flow of the banking services that
was the problem. Now everything is working fine, thanks!
Yes you are absolutely right. Thanks; after exposing my application as
Web Service this is working now. But when I call my Web Service the
second time there is a exception at:
tm.begin();
The exception is:
AxisFault
faultCode: {http://schemas.xmlsoap.org/ws/2004/10/wscoor}InvalidState
faultSubcode:
faultString: The message was invalid for the current state of the
activity.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:The message was invalid for
the current state of the activity.
at
org.apache.kandula.coordinator.Coordinator.<clinit>(Coordinator.java:29)
at
org.apache.kandula.coordinator.CoordinatorImpl.registerOperation(CoordinatorImpl.java:63)
at
org.apache.kandula.coordinator.RegistrationImpl.registerOperation(RegistrationImpl.java:31)
This exception occurs when I invoke the second call of my
TransactionWS where I want to do exactly the same again. In this case
there is no message to the activcation coordinator but the first
messages goes to the registrationCoordinator which does not give any
response.
My workflow is like this:
[BankOne] debit(1, 20)
[Bank] opening connection
[BankDBMS] isSameRM
[BankDBMS] start
[BankDBMS] debit
[BankDBMS] after debit amount = 480
[Bank] closing connection
[BankDBMS] end
true
[BankOne] credit(1, 20)
[Bank] opening connection
[BankDBMS] isSameRM
[BankDBMS] isSameRM
[BankDBMS] start
[BankDBMS] credit
[Bank] closing connection
[BankDBMS] end
true
[CallbackRegistry] registerCallback: timeout= 180000
[BankDBMS] end
[BankDBMS] end
[BankDBMS] prepare
[BankDBMS] prepare
[BankDBMS] commit
[BankDBMS] 480
[BankDBMS] commit
[BankDBMS] 520
[TransactionService] committed
Thanks,
Benjamin
Quoting Benjamin Schmeling <[EMAIL PROTECTED]>:
Thank you very much for your support (Hannes and Dasarath)
The example is really that what I needed and I got my Banking
Service working now. The only problem that remains is that the
calling of the commit() operation never returns. When I terminate my
TestCase manually and call it another time, there is a problem with
the coordinator and the transaction cannot be started again. How
could I fix this?
I presume you are running your client as a standalone application--
correct? the commit/rollback operations wait for the
COMMITTED/ABORTED messages from the coordinator. However, a
standalone application cannot receive these messages. So the solution
is to run your client inside a container like Tomcat where kandula
has been deployed. That's what I've done in my example code.
Whenever, we send an async message to which we expect a reply,
kandula creates a dynamic endpoint-- axis2 does this automatically
but for now we have to do it our selves on axis1.x.
Earlier on we were able to run standalone apps without trouble b'cos
we were using sync porttypes but now that we have switched to async,
this is no longer possible. In fact, the reason you are able to even
come this far is b'cos activation and registration still use sync
porttypes!
thanks,
--dasarath
TransactionManagerImpl tm =
TransactionManagerImpl.getInstance();
getBalance("1","DeutscheBankWS");
tm.begin();
sendDebit("20", "1","DeutscheBankWS");
sendCredit("20", "1","CommerzBankWS");
tm.commit(); <---
Thanks,
Benjamin
Quoting Hannes Erven <[EMAIL PROTECTED]>:
Hi Benjamin,
> * completionCoordinator is called and it returns no response
> (containing <Commit xsi:nil="true"
> xmlns="http://schemas.xmlsoap.org/ws/2004/10/wsat"/>)
> * participant is called and it returns no response
> * coordinator is called and it returns no response
> * completionInitiator is called and it returns no response
That's OK, since those calls aren't expected to return anything.
The "Commit" message just tells the coordinator to commit. Once it
has, it sends a message to the completionInitiator containing the
result - Commited or Rolled Back.
(The same pattern applies to the calls between participant
("prepare") and coordintor.)
the reply to prepare can be either PREPARED or ABORTED. But both these
messages
are sent over seperate connections. you should be able to them
however.
--dasarath
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]