protected synchronized QueueInfo getQueue(String name) { QueueInfo q = (QueueInfo) queues.get(name); if (q == null) { q = new QueueInfo(); q.name = name; q.list = new LinkedList(); q.config = defaultQueueConfiguration; queues.put(name, q); } return q; }
/* * (non-Javadoc) * * @see org.mule.transaction.xa.AbstractResourceManager#doRollback(org.mule.transaction.xa.AbstractTransactionContext) */ protected void doRollback(AbstractTransactionContext context) throws ResourceManagerException { QueueTransactionContext ctx = (QueueTransactionContext) context; if (ctx.removed != null) { for (Iterator it = ctx.removed.entrySet().iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry) it.next(); QueueInfo queue = (QueueInfo) entry.getKey(); List queueRemoved = (List) entry.getValue(); if (queueRemoved != null && queueRemoved.size() > 0) { for (Iterator itRemoved = queueRemoved.iterator(); itRemoved.hasNext(); ) { Object id = itRemoved.next(); queue.putNow(id); } } } } ctx.added = null; ctx.removed = null; }
/* * (non-Javadoc) * * @see org.mule.transaction.xa.AbstractResourceManager#doCommit(org.mule.transaction.xa.AbstractTransactionContext) */ protected void doCommit(AbstractTransactionContext context) throws ResourceManagerException { QueueTransactionContext ctx = (QueueTransactionContext) context; try { if (ctx.added != null) { for (Iterator it = ctx.added.entrySet().iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry) it.next(); QueueInfo queue = (QueueInfo) entry.getKey(); List queueAdded = (List) entry.getValue(); if (queueAdded != null && queueAdded.size() > 0) { for (Iterator itAdded = queueAdded.iterator(); itAdded.hasNext(); ) { Object object = itAdded.next(); Object id = doStore(queue, object); queue.putNow(id); } } } } if (ctx.removed != null) { for (Iterator it = ctx.removed.entrySet().iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry) it.next(); QueueInfo queue = (QueueInfo) entry.getKey(); List queueRemoved = (List) entry.getValue(); if (queueRemoved != null && queueRemoved.size() > 0) { for (Iterator itRemoved = queueRemoved.iterator(); itRemoved.hasNext(); ) { Object id = itRemoved.next(); doRemove(queue, id); } } } } } catch (Exception e) { // throw new ResourceManagerException("Could not commit // transaction", e); // TODO: add an i18n Message throw new ResourceManagerException(e); } finally { ctx.added = null; ctx.removed = null; } }
public Object peek(QueueInfo queue) throws IOException, InterruptedException { readOnly = false; if (added != null) { List queueAdded = (List) added.get(queue); if (queueAdded != null) { return queueAdded.get(queueAdded.size() - 1); } } Object o = queue.peek(); if (o != null) { o = doLoad(queue, o); } return o; }
public boolean offer(QueueInfo queue, Object item, long timeout) throws InterruptedException { readOnly = false; if (added == null) { added = new HashMap(); } List queueAdded = (List) added.get(queue); if (queueAdded == null) { queueAdded = new ArrayList(); added.put(queue, queueAdded); } // wait for enough room if (queue.offer(null, queueAdded.size(), Long.MAX_VALUE)) { queueAdded.add(item); return true; } else { return false; } }
public Object poll(QueueInfo queue, long timeout) throws IOException, InterruptedException { readOnly = false; if (added != null) { List queueAdded = (List) added.get(queue); if (queueAdded != null) { return queueAdded.remove(queueAdded.size() - 1); } } Object o = queue.poll(Long.MAX_VALUE); if (o != null) { if (removed == null) { removed = new HashMap(); } List queueRemoved = (List) removed.get(queue); if (queueRemoved == null) { queueRemoved = new ArrayList(); removed.put(queue, queueRemoved); } queueRemoved.add(o); o = doLoad(queue, o); } return o; }