Hi,
I;m using MINA 2.0.0M2 and java 1.6
1) are the sessions using a keep alive system ? Or do I need to do that
manually ?
2) Do IoSession.write() operations conclude to a session closed event if the
remote peer has terminated the connection ? ( In a normal or abnormal way )
To implement a keep alive system, on Session Idle event I tried to write a
small string to the IoSession, but it doesn't seem to work very well. In the
case of abnormal session termination, it takes a very long time until the
peer is actually fired a SessionClosed event. ( even 10-15 minutes )
Secondly, I tried to get a Write Future from the write operation and see if
the write operation succeded or not, in the moment where the listener
received operationCompleted notification.
This hasn't worked better at all, instead now I even get exceptions :
at
org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:245)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:476)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:49)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:844)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:770)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:476)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:470)
at
org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:398)
at
org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:355)
at dshub.SimpleHandler.sessionIdle(Unknown Source)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.sessionIdle(DefaultIoFilterChain.java:725)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionIdle(DefaultIoFilterChain.java:393)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1000(DefaultIoFilterChain.java:49)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionIdle(DefaultIoFilterChain.java:822)
at
org.apache.mina.core.filterchain.IoFilterAdapter.sessionIdle(IoFilterAdapter.java:75)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionIdle(DefaultIoFilterChain.java:393)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1000(DefaultIoFilterChain.java:49)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionIdle(DefaultIoFilterChain.java:822)
at
org.apache.mina.filter.logging.LoggingFilter.sessionIdle(LoggingFilter.java:122)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionIdle(DefaultIoFilterChain.java:393)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1000(DefaultIoFilterChain.java:49)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionIdle(DefaultIoFilterChain.java:822)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$HeadFilter.sessionIdle(DefaultIoFilterChain.java:604)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionIdle(DefaultIoFilterChain.java:393)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.fireSessionIdle(DefaultIoFilterChain.java:387)
at
org.apache.mina.core.session.IdleStatusChecker.notifyIdleSession1(IdleStatusChecker.java:240)
at
org.apache.mina.core.session.IdleStatusChecker.notifyIdleSession(IdleStatusChecker.java:179)
at
org.apache.mina.core.session.IdleStatusChecker.notifyIdleness(IdleStatusChecker.java:150)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.notifyIdleSessions(AbstractPollingIoProcessor.java:524)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$700(AbstractPollingIoProcessor.java:55)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Worker.run(AbstractPollingIoProcessor.java:781)
at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: buf is empty. Forgot to call
flip()?
at
org.apache.mina.filter.codec.AbstractProtocolEncoderOutput.write(AbstractProtocolEncoderOutput.java:51)
at
org.apache.mina.filter.codec.textline.TextLineEncoder.encode(TextLineEncoder.java:150)
at
org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:236)
... 34 more
The only class that is mine in there its dshub.SimpleHandler but it doesn't
seem that the exception had anything to do with it anyway...
What is the best solution for this keep alive system and what can I do to
improve my program ?
Thanks a lot