package org.drools.grid.remote.mina; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.SocketAcceptor; import org.drools.grid.AcceptorService; public class MinaAcceptor implements AcceptorService { protected SocketAcceptor acceptor; protected SocketAddress address; public MinaAcceptor(SocketAcceptor acceptor, SocketAddress address) { this.acceptor = acceptor; this.address = address; } public MinaAcceptor(SocketAcceptor acceptor, String address, int port) { this.acceptor = acceptor; this.address = new InetSocketAddress( address, port ); } public synchronized void start() throws IOException { this.acceptor.getFilterChain().addLast( "logger", new LoggingFilter() ); this.acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) ); this.acceptor.getSessionConfig().setReadBufferSize( 2048 ); this.acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 ); this.acceptor.bind( this.address ); } public synchronized void stop() { this.acceptor.dispose(); } public synchronized IoAcceptor getIoAcceptor() { return this.acceptor; } public int getCurrentSessions() { return this.acceptor.getManagedSessionCount(); } }