final int min = 1; final int max = Integer.MAX_VALUE; // RE: java.util.concurrent.Executors.newCachedThreadPool() Executor executor = new ThreadPoolExecutor(min, max, 60, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()) ExecutorFilter ef = new ExecutorFilter(executor);
/** * (Convenience constructor) Creates a new instance with a new * {@link OrderedThreadPoolExecutor}. * * @param corePoolSize The initial pool size * @param maximumPoolSize The maximum pool size * @param keepAliveTime Default duration for a thread * @param unit Time unit used for the keepAlive value * @param threadFactory The factory used to create threads * @param eventTypes The event for which the executor will be used */ public ExecutorFilter(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ThreadFactory threadFactory, IoEventType... eventTypes) { // Create a new default Executor Executor newExecutor = createDefaultExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, threadFactory, null); // Initialize the filter init(newExecutor, MANAGEABLE_EXECUTOR, eventTypes); }
/** * Creates a new instance of ExecutorFilter. This private constructor is called by all * the public constructor. * * @param executor The underlying {@link Executor} in charge of managing the Thread pool. * @param manageableExecutor Tells if the Executor's Life Cycle can be managed or not * @param eventTypes The lit of event which are handled by the executor */ private void init(Executor executor, boolean manageableExecutor, IoEventType... eventTypes) { if (executor == null) { throw new IllegalArgumentException("executor"); } initEventTypes(eventTypes); this.executor = executor; this.manageableExecutor = manageableExecutor; }
final ExecutorFilter executorFilter = new ExecutorFilter( initialSize, configuration.getMaxThreadPoolSize(), 60, TimeUnit.SECONDS ); final ThreadPoolExecutor eventExecutor = (ThreadPoolExecutor) executorFilter.getExecutor(); final ThreadFactory threadFactory = new NamedThreadFactory( name + "-thread-", eventExecutor.getThreadFactory(), true, null ); eventExecutor.setThreadFactory( threadFactory );
/** * {@inheritDoc} */ @Override public final void exceptionCaught(NextFilter nextFilter, IoSession session, Throwable cause) { if (eventTypes.contains(IoEventType.EXCEPTION_CAUGHT)) { IoFilterEvent event = new IoFilterEvent(nextFilter, IoEventType.EXCEPTION_CAUGHT, session, cause); fireEvent(event); } else { nextFilter.exceptionCaught(session, cause); } }
/** * Creates a new instance with the specified {@link Executor}. * * @param executor the user's managed Executor to use in this filter */ public ExecutorFilter(Executor executor) { // Initialize the filter init(executor, NOT_MANAGEABLE_EXECUTOR); }
final ExecutorFilter executorFilter = new ExecutorFilter( initialSize, configuration.getMaxThreadPoolSize(), 60, TimeUnit.SECONDS ); final ThreadPoolExecutor eventExecutor = (ThreadPoolExecutor) executorFilter.getExecutor(); final ThreadFactory threadFactory = new NamedThreadFactory( name + "-thread-", eventExecutor.getThreadFactory(), true, null ); eventExecutor.setThreadFactory( threadFactory );
/** * {@inheritDoc} */ @Override public final void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) { if (eventTypes.contains(IoEventType.WRITE)) { IoFilterEvent event = new IoFilterEvent(nextFilter, IoEventType.WRITE, session, writeRequest); fireEvent(event); } else { nextFilter.filterWrite(session, writeRequest); } }
/** * Creates a new instance with the specified {@link Executor}. * * @param executor the user's managed Executor to use in this filter * @param eventTypes The event for which the executor will be used */ public ExecutorFilter(Executor executor, IoEventType... eventTypes) { // Initialize the filter init(executor, NOT_MANAGEABLE_EXECUTOR, eventTypes); }
@Override public void run() { final MinaServerHandler serverHandler = new MinaServerHandler(handler); socketAddress = new InetSocketAddress(port); acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool())); acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaCodecAdapter(Response.class, Request.class))); acceptor.setHandler(serverHandler); try { acceptor.bind(socketAddress); if (logger.isInfoEnabled()) { logger.info("[JobX] MinaServer start at address:{} success", port); } } catch (IOException e) { logger.error("[JobX] MinaServer start failure: {}", stackTrace(e)); } } });
/** * (Convenience constructor) Creates a new instance with a new * {@link OrderedThreadPoolExecutor}. * * @param corePoolSize The initial pool size * @param maximumPoolSize The maximum pool size * @param keepAliveTime Default duration for a thread * @param unit Time unit used for the keepAlive value * @param threadFactory The factory used to create threads */ public ExecutorFilter(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ThreadFactory threadFactory) { // Create a new default Executor Executor newExecutor = createDefaultExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, threadFactory, null); // Initialize the filter init(newExecutor, MANAGEABLE_EXECUTOR); }
/** * {@inheritDoc} */ @Override public final void sessionClosed(NextFilter nextFilter, IoSession session) { if (eventTypes.contains(IoEventType.SESSION_CLOSED)) { IoFilterEvent event = new IoFilterEvent(nextFilter, IoEventType.SESSION_CLOSED, session, null); fireEvent(event); } else { nextFilter.sessionClosed(session); } }
/** * Creates a new instance with the specified {@link Executor}. * * @param executor the user's managed Executor to use in this filter * @param eventTypes The event for which the executor will be used */ public ExecutorFilter(Executor executor, IoEventType... eventTypes) { // Initialize the filter init(executor, NOT_MANAGEABLE_EXECUTOR, eventTypes); }
/** * Creates a new instance of ExecutorFilter. This private constructor is called by all * the public constructor. * * @param executor The underlying {@link Executor} in charge of managing the Thread pool. * @param manageableExecutor Tells if the Executor's Life Cycle can be managed or not * @param eventTypes The lit of event which are handled by the executor */ private void init(Executor executor, boolean manageableExecutor, IoEventType... eventTypes) { if (executor == null) { throw new IllegalArgumentException("executor"); } initEventTypes(eventTypes); this.executor = executor; this.manageableExecutor = manageableExecutor; }
public FilterChainBuilder ( final boolean clientMode ) { if ( !Boolean.getBoolean ( "org.eclipse.scada.protocol.ngp.common.disableStats" ) ) { this.filters.add ( new Entry ( StatisticsFilter.DEFAULT_NAME, new StatisticsFilter () ) ); } this.filters.add ( new Entry ( "logger.raw", new LoggerFilterFactory ( "raw" ) ) ); this.filters.add ( new Entry ( "ssl" ) ); this.filters.add ( new Entry ( "streamCompression" ) ); this.filters.add ( new Entry ( "logger", new LoggerFilterFactory ( "pre" ) ) ); this.filters.add ( new Entry ( "sync", new ExecutorFilter ( Integer.getInteger ( "org.eclipse.scada.protocol.ngp.common.coreSessionThreads", 0 ), Integer.getInteger ( "org.eclipse.scada.protocol.ngp.common.maxSessionThreads", 1 ), 1, TimeUnit.MINUTES, new NamedThreadFactory ( "org.eclipse.scada.protocol.ngp.common.FilterChainSync", false, true, THREAD_COUNTER ), IoEventType.WRITE ) ) ); this.filters.add ( new Entry ( "frameCodec", new ProtocolCodecFilter ( new FrameEncoder (), new FrameDecoder () ) ) ); this.filters.add ( new Entry ( "keepalive" ) ); this.filters.add ( new Entry ( "messageChannelCodec", new MessageChannelCodecFilter () ) ); this.filters.add ( new Entry ( "messageChannel", new IoFilterFactoryAdapter () { @Override public IoFilter create () { // we need new instances of MessageChannelFilter return new MessageChannelFilter ( clientMode ); } } ) ); }
/** * (Convenience constructor) Creates a new instance with a new * {@link OrderedThreadPoolExecutor}. * * @param eventTypes The event for which the executor will be used */ public ExecutorFilter(IoEventType... eventTypes) { // Create a new default Executor Executor newExecutor = createDefaultExecutor(BASE_THREAD_NUMBER, DEFAULT_MAX_POOL_SIZE, DEFAULT_KEEPALIVE_TIME, TimeUnit.SECONDS, Executors.defaultThreadFactory(), null); // Initialize the filter init(newExecutor, MANAGEABLE_EXECUTOR, eventTypes); }
/** * {@inheritDoc} */ @Override public final void sessionIdle(NextFilter nextFilter, IoSession session, IdleStatus status) { if (eventTypes.contains(IoEventType.SESSION_IDLE)) { IoFilterEvent event = new IoFilterEvent(nextFilter, IoEventType.SESSION_IDLE, session, status); fireEvent(event); } else { nextFilter.sessionIdle(session, status); } }
/** * Creates a new instance with the specified {@link Executor}. * * @param executor the user's managed Executor to use in this filter */ public ExecutorFilter(Executor executor) { // Initialize the filter init(executor, NOT_MANAGEABLE_EXECUTOR); }
/** * Creates a new instance of ExecutorFilter. This private constructor is called by all * the public constructor. * * @param executor The underlying {@link Executor} in charge of managing the Thread pool. * @param manageableExecutor Tells if the Executor's Life Cycle can be managed or not * @param eventTypes The lit of event which are handled by the executor * @param */ private void init(Executor executor, boolean manageableExecutor, IoEventType... eventTypes) { if (executor == null) { throw new NullPointerException("executor"); } initEventTypes(eventTypes); this.executor = executor; this.manageableExecutor = manageableExecutor; }
public FilterChainBuilder ( final boolean clientMode ) { if ( !Boolean.getBoolean ( "org.eclipse.scada.protocol.ngp.common.disableStats" ) ) { this.filters.add ( new Entry ( StatisticsFilter.DEFAULT_NAME, new StatisticsFilter () ) ); } this.filters.add ( new Entry ( "logger.raw", new LoggerFilterFactory ( "raw" ) ) ); this.filters.add ( new Entry ( "ssl" ) ); this.filters.add ( new Entry ( "streamCompression" ) ); this.filters.add ( new Entry ( "logger", new LoggerFilterFactory ( "pre" ) ) ); this.filters.add ( new Entry ( "sync", new ExecutorFilter ( Integer.getInteger ( "org.eclipse.scada.protocol.ngp.common.coreSessionThreads", 0 ), Integer.getInteger ( "org.eclipse.scada.protocol.ngp.common.maxSessionThreads", 1 ), 1, TimeUnit.MINUTES, new NamedThreadFactory ( "org.eclipse.scada.protocol.ngp.common.FilterChainSync", false, true, THREAD_COUNTER ), IoEventType.WRITE ) ) ); this.filters.add ( new Entry ( "frameCodec", new ProtocolCodecFilter ( new FrameEncoder (), new FrameDecoder () ) ) ); this.filters.add ( new Entry ( "keepalive" ) ); this.filters.add ( new Entry ( "messageChannelCodec", new MessageChannelCodecFilter () ) ); this.filters.add ( new Entry ( "messageChannel", new IoFilterFactoryAdapter () { @Override public IoFilter create () { // we need new instances of MessageChannelFilter return new MessageChannelFilter ( clientMode ); } } ) ); }