If the server has sent a message, you'll get it. It's just a matter of
handling the messageReceived event in your handler. You don't have to
'read it'. Just process it when it arrives.
On 7/25/11 1:37 PM, Gopal Patel wrote:
I have developed a TcpMinaClient which establishes a session to a remote server
with the below configurations:
KeepAlive =true
ReuseAddress=true
SoLinger=0
TcpNoDelay=true.
Once the session is established I send a login request, which if correct works
perfectly fine, but when the login credentials are incorrect the server:
1) sends a login rejected message and
2) close the existing connection.
Now, the issue I am facing is that I can read the login rejected message
sporadically. For 10 runs I recieve it only 5-6 times the other times session
gets closed before I could read the reject message and know the reason.
Effectively the exceptionCaught() in my IoSessionHandler gets called before I
can read the message with stacktrace as:
SessionHandler - exception caught
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:237)
at sun.nio.ch.IOUtil.read(IOUtil.java:210)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236)
at
org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
at
org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIo
Processor.java:695)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:668)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:657)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPoll
ingIoProcessor.java:68)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(Abstract
PollingIoProcessor.java:1141)
at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.
java:64) at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.
java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
java:908) at java.lang.Thread.run(Thread.java:619)
and by the time I try to read the message from the session its already closed
and while trying to read I get an exception:
org.apache.mina.core.RuntimeIoException: java.io.IOException: Connection reset
by peer
at
org.apache.mina.core.future.DefaultReadFuture.getMessage(DefaultReadFuture
.java:60)
at
com.rbs.***.***.connector.****TcpMinaConnection.login(***TcpMinaConnection.
java:187)
at
com.rbs.***.***.connector.***TcpMinaConnection.connect(***TcpMinaConnection.
java:124)
at
com.rbs.***.connector.GenericConnectionManager.connect(GenericConnectionManager
.java:66)
at
com.rbs.***.implementation.MDLHCoreEngine.start(MDLHCoreEngine.java:55)
at
com.rbs.***.utils.Start***LineHandler.connectToExchange(Start***LineHandler.
java:46)
at
com.rbs.***.***.implementation.Start******Handler.main(Start******Handler.
java:60)
Caused by: java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:237)
at sun.nio.ch.IOUtil.read(IOUtil.java:210)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236)
at
org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:
280 )
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.
java:44)at
org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIo
Processor.java:695)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:668)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPolling
IoProcessor.java:657)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPoll
ingIoProcessor.java:68)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(Abstract
PollingIoProcessor.java:1141)
at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.
java:64) at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.
java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908) at java.lang.Thread.run(Thread.java:619)
Is this issue known or am I doing something wrong.
or Is there any configuration in MINA which would let me wait for the data from
the connection to be read before the session gets closed.
--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com