@Test public void testAbstractRoutingConnectionFactory() { ConnectionFactory connectionFactory1 = Mockito.mock(ConnectionFactory.class); ConnectionFactory connectionFactory2 = Mockito.mock(ConnectionFactory.class); Map<Object, ConnectionFactory> factories = new HashMap<Object, ConnectionFactory>(2); factories.put(Boolean.TRUE, connectionFactory1); factories.put(Boolean.FALSE, connectionFactory2); ConnectionFactory defaultConnectionFactory = Mockito.mock(ConnectionFactory.class); final AtomicBoolean lookupFlag = new AtomicBoolean(true); final AtomicInteger count = new AtomicInteger(); AbstractRoutingConnectionFactory connectionFactory = new AbstractRoutingConnectionFactory() { @Override protected Object determineCurrentLookupKey() { return count.incrementAndGet() > 3 ? null : lookupFlag.getAndSet(!lookupFlag.get()); } }; connectionFactory.setDefaultTargetConnectionFactory(defaultConnectionFactory); connectionFactory.setTargetConnectionFactories(factories); for (int i = 0; i < 5; i++) { connectionFactory.createConnection(); } verify(connectionFactory1, times(2)).createConnection(); verify(connectionFactory2).createConnection(); verify(defaultConnectionFactory, times(2)).createConnection(); }
@Test public void testSimpleRoutingConnectionFactory() throws InterruptedException { ConnectionFactory connectionFactory1 = Mockito.mock(ConnectionFactory.class); ConnectionFactory connectionFactory2 = Mockito.mock(ConnectionFactory.class); Map<Object, ConnectionFactory> factories = new HashMap<Object, ConnectionFactory>(2); factories.put("foo", connectionFactory1); factories.put("bar", connectionFactory2); final AbstractRoutingConnectionFactory connectionFactory = new SimpleRoutingConnectionFactory(); connectionFactory.setTargetConnectionFactories(factories); ExecutorService executorService = Executors.newFixedThreadPool(3); for (int i = 0; i < 3; i++) { final AtomicInteger count = new AtomicInteger(i); executorService.execute(() -> { SimpleResourceHolder.bind(connectionFactory, count.get() % 2 == 0 ? "foo" : "bar"); connectionFactory.createConnection(); SimpleResourceHolder.unbind(connectionFactory); }); } executorService.shutdown(); assertTrue(executorService.awaitTermination(10, TimeUnit.SECONDS)); verify(connectionFactory1, times(2)).createConnection(); verify(connectionFactory2).createConnection(); }
connectionFactory.setTargetConnectionFactories(factories);