List of usage examples for org.apache.commons.pool2 KeyedObjectPool borrowObject
V borrowObject(K key) throws Exception, NoSuchElementException, IllegalStateException;
key
. 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; }