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

Reply via email to