Search in sources :

Example 1 with MockBean

use of org.jboss.as.ejb3.pool.common.MockBean in project wildfly by wildfly.

the class StrictMaxUnitTestCase method testMultiThread.

/**
 * More threads than the pool size.
 */
@Test
public void testMultiThread() throws Exception {
    MockBean.reset();
    StatelessObjectFactory<MockBean> factory = new MockFactory();
    final Pool<MockBean> pool = new StrictMaxPool<MockBean>(factory, 10, 60, TimeUnit.SECONDS);
    pool.start();
    final CountDownLatch in = new CountDownLatch(1);
    final CountDownLatch ready = new CountDownLatch(10);
    Callable<Void> task = new Callable<Void>() {

        public Void call() throws Exception {
            MockBean bean = pool.get();
            ready.countDown();
            in.await();
            pool.release(bean);
            bean = null;
            used.incrementAndGet();
            return null;
        }
    };
    ExecutorService service = Executors.newFixedThreadPool(20);
    Future<?>[] results = new Future<?>[20];
    for (int i = 0; i < results.length; i++) {
        results[i] = service.submit(task);
    }
    ready.await(120, TimeUnit.SECONDS);
    in.countDown();
    for (Future<?> result : results) {
        result.get(5, TimeUnit.SECONDS);
    }
    service.shutdown();
    pool.stop();
    assertEquals(20, used.intValue());
    assertEquals(10, MockBean.getPostConstructs());
    assertEquals(10, MockBean.getPreDestroys());
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) Callable(java.util.concurrent.Callable) ExecutorService(java.util.concurrent.ExecutorService) Future(java.util.concurrent.Future) MockFactory(org.jboss.as.ejb3.pool.common.MockFactory) MockBean(org.jboss.as.ejb3.pool.common.MockBean) Test(org.junit.Test)

Aggregations

Callable (java.util.concurrent.Callable)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1 MockBean (org.jboss.as.ejb3.pool.common.MockBean)1 MockFactory (org.jboss.as.ejb3.pool.common.MockFactory)1 Test (org.junit.Test)1