Example usage for org.apache.commons.pool2 KeyedObjectPool borrowObject

List of usage examples for org.apache.commons.pool2 KeyedObjectPool borrowObject

Introduction

In this page you can find the example usage for org.apache.commons.pool2 KeyedObjectPool borrowObject.

Prototype

V borrowObject(K key) throws Exception, NoSuchElementException, IllegalStateException;

Source Link

Document

Obtains an instance from this pool for the specified key.

Usage

From source file:org.openhab.binding.modbus.internal.SimultaneousReadWriteTestCase.java

@Test
public void testPoolBlocks() throws Exception {
    final KeyedObjectPool<ModbusSlaveEndpoint, ModbusSlaveConnection> pool = ModbusBinding
            .getReconstructedConnectionPoolForTesting();

    final ModbusTCPSlaveEndpoint endpoint = new ModbusTCPSlaveEndpoint(localAddress().getHostAddress(),
            this.tcpModbusPort);

    ModbusSlaveConnection borrowObject = pool.borrowObject(endpoint);
    Thread thread = new Thread() {
        @Override//from w ww.  j  a  va  2 s  . com
        public void run() {
            try {
                ModbusSlaveConnection borrowObject2 = pool.borrowObject(endpoint);
                pool.returnObject(endpoint, borrowObject2);
            } catch (Exception e) {
                e.printStackTrace(System.err);
            }
        }
    };
    thread.start();
    thread.join(500);
    if (!thread.isAlive()) {
        throw new AssertionError("Thread should still be alive -- blocking since no objects");
    } else {
        thread.interrupt();
    }

    pool.returnObject(endpoint, borrowObject);
    // Now that object has been returned, borrowing should work again
    ModbusSlaveConnection borrowObject2 = pool.borrowObject(endpoint);
    pool.returnObject(endpoint, borrowObject2);

}

From source file:org.openhab.io.transport.modbus.internal.ModbusManagerImpl.java

private Optional<ModbusSlaveConnection> borrowConnection(ModbusSlaveEndpoint endpoint) {
    Optional<ModbusSlaveConnection> connection = Optional.empty();
    KeyedObjectPool<ModbusSlaveEndpoint, ModbusSlaveConnection> pool = connectionPool;
    if (pool == null) {
        return connection;
    }//from   w w  w  .  ja v  a2 s  .  c o m
    long start = System.currentTimeMillis();
    try {
        connection = Optional.ofNullable(pool.borrowObject(endpoint));
    } catch (Exception e) {
        logger.warn("Error getting a new connection for endpoint {}. Error was: {} {}", endpoint,
                e.getClass().getName(), e.getMessage());
    }
    if (connection.isPresent()) {
        ModbusSlaveConnection slaveConnection = connection.get();
        if (!slaveConnection.isConnected()) {
            logger.trace(
                    "Received connection which is unconnected, preventing use by returning connection to pool.");
            returnConnection(endpoint, connection);
            connection = Optional.empty();
        }
    }
    logger.trace("borrowing connection (got {}) for endpoint {} took {} ms", connection, endpoint,
            System.currentTimeMillis() - start);
    return connection;
}