Example usage for java.nio.channels.spi SelectorProvider provider

List of usage examples for java.nio.channels.spi SelectorProvider provider

Introduction

In this page you can find the example usage for java.nio.channels.spi SelectorProvider provider.

Prototype

SelectorProvider provider

To view the source code for java.nio.channels.spi SelectorProvider provider.

Click Source Link

Usage

From source file:Test.java

public static void main(String[] args) throws Exception {
    SelectorProvider provider = SelectorProvider.provider();
    NetworkChannel socketChannel = provider.openSocketChannel();
    SocketAddress address = new InetSocketAddress(3080);
    socketChannel = socketChannel.bind(address);

    Set<SocketOption<?>> socketOptions = socketChannel.supportedOptions();

    System.out.println(socketOptions.toString());
    socketChannel.setOption(StandardSocketOptions.IP_TOS, 3);
    Boolean keepAlive = socketChannel.getOption(StandardSocketOptions.SO_KEEPALIVE);
}

From source file:gridool.communication.transport.nio.GridNioServer.java

private static Selector createSelector(int port) throws IOException {
    final Selector selector = SelectorProvider.provider().openSelector();

    ServerSocketChannel serverChannel = ServerSocketChannel.open();
    serverChannel.configureBlocking(false);

    ServerSocket servSocket = serverChannel.socket();
    servSocket.setReuseAddress(true);/*from  w ww .jav a 2 s .com*/
    servSocket.bind(new InetSocketAddress(port));

    serverChannel.register(selector, SelectionKey.OP_ACCEPT);

    if (LOG.isInfoEnabled()) {
        LOG.info("GridNioServer is started at port: " + port);
    }
    return selector;
}

From source file:com.yahoo.ycsb.db.couchbase2.Couchbase2Client.java

@Override
public void init() throws DBException {
    Properties props = getProperties();

    host = props.getProperty("couchbase.host", "127.0.0.1");
    bucketName = props.getProperty("couchbase.bucket", "default");
    String bucketPassword = props.getProperty("couchbase.password", "");

    upsert = props.getProperty("couchbase.upsert", "false").equals("true");
    persistTo = parsePersistTo(props.getProperty("couchbase.persistTo", "0"));
    replicateTo = parseReplicateTo(props.getProperty("couchbase.replicateTo", "0"));
    syncMutResponse = props.getProperty("couchbase.syncMutationResponse", "true").equals("true");
    adhoc = props.getProperty("couchbase.adhoc", "false").equals("true");
    kv = props.getProperty("couchbase.kv", "true").equals("true");
    maxParallelism = Integer.parseInt(props.getProperty("couchbase.maxParallelism", "1"));
    kvEndpoints = Integer.parseInt(props.getProperty("couchbase.kvEndpoints", "1"));
    queryEndpoints = Integer.parseInt(props.getProperty("couchbase.queryEndpoints", "1"));
    epoll = props.getProperty("couchbase.epoll", "false").equals("true");
    boost = Integer.parseInt(props.getProperty("couchbase.boost", "3"));
    networkMetricsInterval = Integer.parseInt(props.getProperty("couchbase.networkMetricsInterval", "0"));
    runtimeMetricsInterval = Integer.parseInt(props.getProperty("couchbase.runtimeMetricsInterval", "0"));
    documentExpiry = Integer.parseInt(props.getProperty("couchbase.documentExpiry", "0"));
    scanAllQuery = "SELECT RAW meta().id FROM `" + bucketName
            + "` WHERE meta().id >= '$1' ORDER BY meta().id LIMIT $2";

    try {//from  w  ww.  j a  v a2  s.c  o  m
        synchronized (INIT_COORDINATOR) {
            if (env == null) {

                LatencyMetricsCollectorConfig latencyConfig = networkMetricsInterval <= 0
                        ? DefaultLatencyMetricsCollectorConfig.disabled()
                        : DefaultLatencyMetricsCollectorConfig.builder().emitFrequency(networkMetricsInterval)
                                .emitFrequencyUnit(TimeUnit.SECONDS).build();

                MetricsCollectorConfig runtimeConfig = runtimeMetricsInterval <= 0
                        ? DefaultMetricsCollectorConfig.disabled()
                        : DefaultMetricsCollectorConfig.create(runtimeMetricsInterval, TimeUnit.SECONDS);

                DefaultCouchbaseEnvironment.Builder builder = DefaultCouchbaseEnvironment.builder()
                        .queryEndpoints(queryEndpoints).callbacksOnIoPool(true)
                        .runtimeMetricsCollectorConfig(runtimeConfig)
                        .networkLatencyMetricsCollectorConfig(latencyConfig).socketConnectTimeout(10000) // 10 secs socket connect timeout
                        .connectTimeout(30000) // 30 secs overall bucket open timeout
                        .kvTimeout(10000) // 10 instead of 2.5s for KV ops
                        .kvEndpoints(kvEndpoints);

                // Tune boosting and epoll based on settings
                SelectStrategyFactory factory = boost > 0 ? new BackoffSelectStrategyFactory()
                        : DefaultSelectStrategyFactory.INSTANCE;

                int poolSize = boost > 0 ? boost
                        : Integer.parseInt(System.getProperty("com.couchbase.ioPoolSize",
                                Integer.toString(DefaultCoreEnvironment.IO_POOL_SIZE)));
                ThreadFactory threadFactory = new DefaultThreadFactory("cb-io", true);

                EventLoopGroup group = epoll ? new EpollEventLoopGroup(poolSize, threadFactory, factory)
                        : new NioEventLoopGroup(poolSize, threadFactory, SelectorProvider.provider(), factory);
                builder.ioPool(group, new IoPoolShutdownHook(group));

                env = builder.build();
                logParams();
            }
        }

        cluster = CouchbaseCluster.create(env, host);
        bucket = cluster.openBucket(bucketName, bucketPassword);
        kvTimeout = env.kvTimeout();
    } catch (Exception ex) {
        throw new DBException("Could not connect to Couchbase Bucket.", ex);
    }

    if (!kv && !syncMutResponse) {
        throw new DBException("Not waiting for N1QL responses on mutations not yet implemented.");
    }
}

From source file:com.voxbone.kelpie.Session.java

public void run() {
    Selector sel = null;//from   w  w w  . j  a  v a 2  s .  c om

    logger.info("[[" + internalCallId + "]] Session thread started: " + this.socketChannel.socket().toString());

    try {
        sel = SelectorProvider.provider().openSelector();
        socketChannel.register(sel, SelectionKey.OP_READ, this);

        while (true) {
            if (sel.select() >= 0) {
                Iterator<SelectionKey> itr = sel.selectedKeys().iterator();
                while (itr.hasNext()) {
                    SelectionKey key = itr.next();
                    itr.remove();
                    if (key.isReadable()) {
                        this.execute();
                    }
                }
            } else {
                logger.error("[[" + internalCallId + "]] Select returned error");
            }
            if (conn.getCurrentStatus().isDisconnected()) {
                break;
            }
        }

        logger.info("[[" + internalCallId + "]] Session Connection finished: "
                + this.socketChannel.socket().toString());
        sel.close();
    } catch (IOException e) {
        logger.error("[[" + internalCallId + "]] Error in xmpp session thread", e);
    } catch (StreamException e) {
        logger.error("[[" + internalCallId + "]] Error in xmpp session thread", e);
    } catch (Exception e) {
        logger.error("[[" + internalCallId + "]] Error in xmpp session thread", e);
    } finally {
        try {
            if (sel != null) {
                sel.close();
            }
        } catch (IOException e) {
            // we are dead already, RIP
        }
    }

    // make sure the connection is closed
    try {
        conn.close();
        conn.disconnect();
        try {
            socketChannel.socket().shutdownInput();
        } catch (IOException e) {
            // ignore
        }
        try {
            socketChannel.socket().shutdownOutput();
        } catch (IOException e) {
            // ignore
        }
        try {
            socketChannel.close();
        } catch (IOException e) {
            // ignore
        }
    } catch (StreamException e) {
        logger.error("[[" + internalCallId + "]] Problem closing stream", e);
    }
}

From source file:net.timewalker.ffmq4.transport.tcp.nio.NIOTcpMultiplexer.java

/**
 * Constructor (private)/*from  ww w  . j  a  v  a2 s.  co  m*/
 */
public NIOTcpMultiplexer(Settings settings, boolean client) throws PacketTransportException {
    super();
    this.socketSendBufferSize = settings.getIntProperty(FFMQCoreSettings.TRANSPORT_TCP_SOCKET_SEND_BUFFER_SIZE,
            65536);
    this.socketRecvBufferSize = settings.getIntProperty(FFMQCoreSettings.TRANSPORT_TCP_SOCKET_RECV_BUFFER_SIZE,
            65536);
    try {
        this.selector = SelectorProvider.provider().openSelector();
        this.selectorThread = new SelectorThread(client);
        this.selectorThread.start();
    } catch (Exception e) {
        throw new PacketTransportException("Cannot create NIO multiplexer", e);
    }
}

From source file:org.apache.htrace.impl.PackedBufferManager.java

PackedBufferManager(Conf conf) throws IOException {
    this.conf = conf;
    this.frameBuffer = ByteBuffer.allocate(PackedBuffer.HRPC_REQ_FRAME_LENGTH);
    this.prequel = new PackedBuffer(ByteBuffer.allocate(MAX_PREQUEL_LENGTH));
    this.spans = new PackedBuffer(ByteBuffer.allocate(conf.bufferSize));
    this.selector = SelectorProvider.provider().openSelector();
    clear();//from  www . j  av a 2 s .c  o m
}

From source file:org.eclipsetrader.directa.internal.core.BrokerConnector.java

@Override
public void run() {
    Selector socketSelector;//  w  w w.j  av a2 s  .  com
    ByteBuffer dst = ByteBuffer.wrap(new byte[2048]);
    List<Position> positions = new ArrayList<Position>();

    try {
        // Create a non-blocking socket channel
        socketChannel = SocketChannel.open();
        socketChannel.configureBlocking(false);

        socketChannel.socket().setReceiveBufferSize(32768);
        socketChannel.socket().setSoLinger(true, 1);
        socketChannel.socket().setSoTimeout(0x15f90);
        socketChannel.socket().setReuseAddress(true);

        // Kick off connection establishment
        socketChannel.connect(new InetSocketAddress(server, port));

        // Create a new selector
        socketSelector = SelectorProvider.provider().openSelector();

        // Register the server socket channel, indicating an interest in
        // accepting new connections
        socketChannel.register(socketSelector, SelectionKey.OP_READ | SelectionKey.OP_CONNECT);
    } catch (Exception e) {
        Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, "Error connecting to orders monitor", //$NON-NLS-1$
                e);
        Activator.log(status);
        return;
    }

    for (;;) {
        try {
            if (socketSelector.select(30 * 1000) == 0) {
                logger.trace(">" + HEARTBEAT); //$NON-NLS-1$
                socketChannel.write(ByteBuffer.wrap(new String(HEARTBEAT + "\r\n").getBytes())); //$NON-NLS-1$
            }
        } catch (Exception e) {
            break;
        }

        // Iterate over the set of keys for which events are available
        Iterator<SelectionKey> selectedKeys = socketSelector.selectedKeys().iterator();
        while (selectedKeys.hasNext()) {
            SelectionKey key = selectedKeys.next();
            selectedKeys.remove();

            if (!key.isValid()) {
                continue;
            }

            try {
                // Check what event is available and deal with it
                if (key.isConnectable()) {
                    // Finish the connection. If the connection operation failed
                    // this will raise an IOException.
                    try {
                        socketChannel.finishConnect();
                    } catch (IOException e) {
                        // Cancel the channel's registration with our selector
                        key.cancel();
                        return;
                    }

                    // Register an interest in writing on this channel
                    key.interestOps(SelectionKey.OP_WRITE);
                }
                if (key.isWritable()) {
                    logger.trace(">" + LOGIN + WebConnector.getInstance().getUser()); //$NON-NLS-1$
                    socketChannel.write(ByteBuffer.wrap(
                            new String(LOGIN + WebConnector.getInstance().getUser() + "\r\n").getBytes())); //$NON-NLS-1$

                    // Register an interest in reading on this channel
                    key.interestOps(SelectionKey.OP_READ);
                }
                if (key.isReadable()) {
                    dst.clear();
                    int readed = socketChannel.read(dst);
                    if (readed > 0) {
                        String[] s = new String(dst.array(), 0, readed).split("\r\n"); //$NON-NLS-1$
                        for (int i = 0; i < s.length; i++) {
                            logger.trace("<" + s[i]); //$NON-NLS-1$

                            if (s[i].endsWith(";" + WebConnector.getInstance().getUser() + ";")) { //$NON-NLS-1$ //$NON-NLS-2$
                                logger.trace(">" + UNKNOWN70); //$NON-NLS-1$
                                socketChannel.write(ByteBuffer.wrap(new String(UNKNOWN70 + "\r\n").getBytes())); //$NON-NLS-1$
                                logger.trace(">" + UNKNOWN55); //$NON-NLS-1$
                                socketChannel.write(ByteBuffer.wrap(new String(UNKNOWN55 + "\r\n").getBytes())); //$NON-NLS-1$
                            }

                            if (s[i].indexOf(";6;5;") != -1 || s[i].indexOf(";8;0;") != -1) { //$NON-NLS-1$ //$NON-NLS-2$
                                try {
                                    OrderMonitor monitor = parseOrderLine(s[i]);

                                    OrderDelta[] delta;
                                    synchronized (orders) {
                                        if (!orders.contains(monitor)) {
                                            orders.add(monitor);
                                            delta = new OrderDelta[] {
                                                    new OrderDelta(OrderDelta.KIND_ADDED, monitor) };
                                        } else {
                                            delta = new OrderDelta[] {
                                                    new OrderDelta(OrderDelta.KIND_UPDATED, monitor) };
                                        }
                                    }
                                    fireUpdateNotifications(delta);

                                    if (monitor.getFilledQuantity() != null
                                            && monitor.getAveragePrice() != null) {
                                        Account account = WebConnector.getInstance().getAccount();
                                        account.updatePosition(monitor);
                                    }
                                } catch (ParseException e) {
                                    Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0,
                                            "Error parsing line: " + s[i], e); //$NON-NLS-1$
                                    Activator.log(status);
                                }
                            }
                            if (s[i].indexOf(";6;0;") != -1) { //$NON-NLS-1$
                                updateStatusLine(s[i]);
                            }
                            if (s[i].indexOf(";7;0;") != -1) { //$NON-NLS-1$
                                try {
                                    positions.add(new Position(s[i]));
                                } catch (Exception e) {
                                    Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0,
                                            "Error parsing line: " + s[i], e); //$NON-NLS-1$
                                    Activator.log(status);
                                }
                            }
                            if (s[i].indexOf(";7;9;") != -1) { //$NON-NLS-1$
                                Account account = WebConnector.getInstance().getAccount();
                                account.setPositions(positions.toArray(new Position[positions.size()]));
                                positions.clear();
                            }
                        }
                    }
                }
            } catch (Exception e) {
                Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, "Connection error", e); //$NON-NLS-1$
                Activator.log(status);
            }
        }
    }
}