package org.jboss.as.test.multinode.ejb.timer.database; import javax.ejb.ConcurrencyManagement; import javax.ejb.ConcurrencyManagementType; import javax.ejb.Singleton; import java.util.ArrayList; import java.util.List; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; /** * @author Stuart Douglas */ @Singleton @ConcurrencyManagement(ConcurrencyManagementType.BEAN) public class CollectionSingleton implements Collector { private final LinkedBlockingDeque<TimerData> timerDatas = new LinkedBlockingDeque<>(); @Override public void timerRun(String nodeName, String info) { timerDatas.add(new TimerData(nodeName, info)); } @Override public List<TimerData> collect(int expectedCount) { long end = System.currentTimeMillis() + 30000; //10 seconds List<TimerData> ret = new ArrayList<>(); for (; ; ) { if (ret.size() == expectedCount) { break; } if (System.currentTimeMillis() > end) { break; } try { TimerData res = timerDatas.poll(end - System.currentTimeMillis(), TimeUnit.MILLISECONDS); if (res != null) { ret.add(res); } } catch (InterruptedException e) { throw new RuntimeException(e); } } return ret; } }