Hello,

I'm right now trying to reestablish connection, after the session has been closed. Whenever the session is closed, I reestablish it in the session listener: sessionDestroyed.

The "problem" is, I see two NioProcessor threads in debug mode(NioProcessor-1, Nio-Processor-2,pool-2-thread1), when the first session has been destroyed and the second one established. Further establishments dont create new NioProcessors. Im testing by connecting to a telnet server and after connection is set up, I close it. I also tested by connecting to a self written server that doenst accept strings and then closes connection session.

If you have other suggestions how to handle connection reestablishment just tell me.

Here is my code:

Apache Mina 2.0.0M4
____________________________
package de.pred2k3.comssh.client;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.IoFilter;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoService;
import org.apache.mina.core.service.IoServiceListener;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.filter.logging.MdcInjectionFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class Nioclient {
   public NioSocketConnector connector;
   public IoSession session;
   public ConnectFuture future;
public static void main(String[] args) throws Exception {
       Nioclient c1 = new Nioclient();
       c1.connect();
       c1.go();
   }
public Nioclient(){ } public void connect() throws InterruptedException{
       connector = new NioSocketConnector();
       connector.setHandler(new SSHClientHandler());
       connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
       connector.addListener(new IoServiceListener(){

           @Override
           public void serviceActivated(IoService arg0) throws Exception {
               // TODO Auto-generated method stub
}

           @Override
public void serviceDeactivated(IoService arg0) throws Exception {
               // TODO Auto-generated method stub
}

           @Override
           public void serviceIdle(IoService arg0, IdleStatus arg1)
                   throws Exception {
               // TODO Auto-generated method stub
}

           @Override
           public void sessionCreated(IoSession arg0) throws Exception {
               // TODO Auto-generated method stub
           }

           @Override
           public void sessionDestroyed(IoSession arg0) throws Exception {
               //connector.dispose();
               Thread.sleep(3000);
               System.out.println("Connection closed - reconnect");
               go();
           }
});
   }
public void go() throws InterruptedException{ future = connector.connect(new InetSocketAddress("192.168.1.1", 23));
       future.awaitUninterruptibly();
       if (!future.isConnected()){
//            connector.dispose();
           System.out.println("Connection failed");
           Thread.sleep(3000);
           go();
       } else {
           session = future.getSession();
           System.out.println("Connection established!");
           session.write("hello");
           session.close(true);
       }
   }
}

___

Thanks for help!

Bye,
Markus

Reply via email to