package io.trygvis.queue; import java.sql.Connection; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; public class JdbcQueueService { private final QueueSystem queueSystem; private final SqlEffectExecutor sqlEffectExecutor; private final Map queues = new HashMap<>(); JdbcQueueService(QueueSystem queueSystem) { this.queueSystem = queueSystem; this.sqlEffectExecutor = queueSystem.sqlEffectExecutor; } public synchronized QueueExecutor getQueue(String name) { QueueExecutor queueExecutor = queues.get(name); if (queueExecutor != null) { return queueExecutor; } throw new IllegalArgumentException("No such queue: " + name); } public synchronized QueueExecutor lookupQueue(Connection c, String name, long interval, boolean autoCreate) throws SQLException { QueueExecutor queueExecutor = queues.get(name); if (queueExecutor != null) { return queueExecutor; } QueueDao queueDao = queueSystem.createQueueDao(c); Queue q = queueDao.findByName(name); if (q == null) { if (!autoCreate) { throw new SQLException("No such queue: '" + name + "'."); } q = new Queue(name, interval); queueDao.insert(q); } queueExecutor = new QueueExecutor(queueSystem, sqlEffectExecutor, q); queues.put(name, queueExecutor); return queueExecutor; } }