On 7/7/10 1:49 PM, [email protected] wrote:
Hi,
we are developing a client/server application, where the server-side
uses MINA as its communication framework. On the top of the filter
chain there is a message handler class that extends IoHandlerAdapter.
The message handler does some business logic, that is executed in
transactional context using Spring Framework's declarative transaction
management. After the method implementing the business logic executed
and returns the response message, the transaction is committed and the
response is sent back to the client.
The problem is when the client is disconnected during executing the
transactional method (network problems, etc.) In this scenario the
transaction is committed and the server detects the lost connection
only when it tries to send out the response message. In our case the
transaction should be rolled back.
Can you suggest some way how to detect the connection failure earlier
than sending out the message?
There is no way to detect a connection failure. The connection is opened
or closed, but you will know only after having successfully sent
something to the client.
In other words, you have to implement a kind of two-phases commit in
your case :
- receive the request
- make your business transaction
- send the response to the client (at this point, the business
transaction is supposed to have been sucessful)
- when the message has been sent, commit the business transaction.
However, even if the response has been sent, you have no way to be sure
that your client has read it.
Remember that you are dealing with remote communications, where one of
the peer may perfectly disconnect without notice, and you have to deal
with this at the protocol level. MINA won't help you here.
We are using Mina 1.1.7.
Regards,
Andras
--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com