public static String getPageFileName(final MessageQueue queue) { return tempDir + "/queuecache/" + queue.getSession().getSessionId().replaceAll("\\-", "_"); }
/** * Closes the message queue * * @param queue * - the message queue to close */ @Override public void closeQueue(final MessageQueue queue) { messageQueues.values().remove(queue); sessionLookup.values().remove(queue.getSession()); for (Iterator<RemoteMessageCallback> iterator = remoteSubscriptions.values().iterator(); iterator.hasNext(); ) { final RemoteMessageCallback cb = iterator.next(); cb.removeQueue(queue); if (cb.getQueueCount() == 0) { iterator.remove(); } } fireQueueCloseListeners(new QueueCloseEvent(queue)); }
@Override public boolean deliver(final MessageQueue queue, final Message message) throws IOException { try { directSocketChannel.write("[" + BusToolsCli.encodeMessage(message) + "]"); return true; } catch (Throwable e) { log.info("error writing to socket for queue " + queue.getSession().getSessionId()); LocalContext.get(queue.getSession()).destroy(); queue.stopQueue(); e.printStackTrace(); return false; } }
@Override public void attachMonitor(final BusMonitor monitor) { if (this.busMonitor != null) { log.warn("new monitor attached, but a monitor was already attached: old monitor has been detached."); } this.busMonitor = monitor; for (final Map.Entry<QueueSession, MessageQueue> entry : messageQueues.entrySet()) { busMonitor.notifyQueueAttached(entry.getKey().getSessionId(), entry.getValue()); } for (final String subject : subscriptions.keySet()) { busMonitor.notifyNewSubscriptionEvent(new SubscriptionEvent(false, "None", 1, false, subject)); } for (final Map.Entry<String, RemoteMessageCallback> entry : remoteSubscriptions.entrySet()) { for (final MessageQueue queue : entry.getValue().getQueues()) { busMonitor.notifyNewSubscriptionEvent( new SubscriptionEvent(true, queue.getSession().getSessionId(), 1, false, entry.getKey()) ); } } monitor.attach(this); }
private void fireQueueCloseListeners(final QueueCloseEvent event) { if (isMonitor()) { busMonitor.notifyQueueDetached(event.getQueue().getSession().getSessionId(), event.getQueue()); } synchronized (queueClosedListeners) { event.setDisposeListener(false); for (Iterator<QueueClosedListener> iter = queueClosedListeners.iterator(); iter.hasNext(); ) { iter.next().onQueueClosed(event); if (event.isDisposeListener()) { iter.remove(); event.setDisposeListener(false); } } } }
ServerMessageBusImpl.this.remoteUnsubscribe(ref.getSession(), ref, subject); ref.getSession().endSession(); deferredQueue.remove(ref); ref.discard();
private void send(final MessageQueue queue, final Message message, final boolean fireListeners) { try { if (isMonitor()) { busMonitor.notifyOutgoingMessageToRemote(queue.getSession().getSessionId(), message); } enqueueForDelivery(queue, message); } catch (NoSubscribersToDeliverTo nstdt) { // catch this so we can get a full trace handleMessageDeliveryFailure(this, message, "No subscribers to deliver to", nstdt, false); } }
@Override public void activate(final MessageQueue queue) { try { queue.poll(new OutputStreamWriteAdapter(asyncContext.getResponse().getOutputStream())); queue.setActivationCallback(null); queue.heartBeat(); } catch (IOException e) { log.debug("Closing queue with id: " + queue.getSession().getSessionId() + " due to IOException", e); } catch (final Throwable t) { try { writeExceptionToOutputStream((HttpServletResponse) asyncContext.getResponse(), t); } catch (Throwable t2) { log.debug("Failed to write exception to dead client", t2); } } finally { asyncContext.complete(); } } });
@Override public boolean copyFromBuffer(TimeUnit timeUnit, int timeout, MessageQueue queue, ByteWriteAdapter toAdapter) throws IOException { final MarkedByteWriteAdapter markedOutputStream = new MarkedByteWriteAdapter(toAdapter); try { queue.getBuffer().readWait(timeUnit, timeout, markedOutputStream, queue.getBufferColor(), new MultiMessageFilter()); if (markedOutputStream.dataWasWritten() && markedOutputStream.getBytesWritten() > 2) { queue.resetMessageCount(); return true; } } catch (BufferOverflowException e) { queue.getBufferColor().getSequence().set(queue.getBuffer().getHeadSequence()); log.warn("buffer data was evicted for session " + queue.getSession().getSessionId() + " due to overflow condition. (consider increasing buffer size with errai.bus.buffer_size " + "in ErraiService.properties)"); } catch (InterruptedException e) { e.printStackTrace(); } return false; } }
@Override public boolean copyFromBuffer(final MessageQueue queue, final ByteWriteAdapter toAdapter) throws IOException { final MarkedByteWriteAdapter markedOutputStream = new MarkedByteWriteAdapter(toAdapter); try { queue.getBuffer().read(markedOutputStream, queue.getBufferColor(), new MultiMessageFilter()); if (markedOutputStream.dataWasWritten() && markedOutputStream.getBytesWritten() > 2) { queue.resetMessageCount(); return true; } } catch (BufferOverflowException e) { queue.getBufferColor().getSequence().set(queue.getBuffer().getHeadSequence()); log.warn("buffer data was evicted for session " + queue.getSession().getSessionId() + " due to overflow condition. (consider increasing buffer size with errai.bus.buffer_size " + "in ErraiService.properties)"); } return false; }
public static String getPageFileName(final MessageQueue queue) { return tempDir + "/queuecache/" + queue.getSession().getSessionId().replaceAll("\\-", "_"); }
forwardMessage.setResource(Resources.Session.name(), messageQueue.getSession()); serverMessageBus.send(forwardMessage);
/** * Closes the message queue * * @param queue * - the message queue to close */ @Override public void closeQueue(final MessageQueue queue) { messageQueues.values().remove(queue); sessionLookup.values().remove(queue.getSession()); for (Iterator<RemoteMessageCallback> iterator = remoteSubscriptions.values().iterator(); iterator.hasNext(); ) { final RemoteMessageCallback cb = iterator.next(); cb.removeQueue(queue); if (cb.getQueueCount() == 0) { iterator.remove(); } } fireQueueCloseListeners(new QueueCloseEvent(queue)); }
@Override public boolean deliver(final MessageQueue queue, final Message message) throws IOException { try { directSocketChannel.write("[" + BusToolsCli.encodeMessage(message) + "]"); return true; } catch (Throwable e) { log.info("error writing to socket for queue " + queue.getSession().getSessionId()); LocalContext.get(queue.getSession()).destroy(); queue.stopQueue(); e.printStackTrace(); return false; } }
@Override public void attachMonitor(final BusMonitor monitor) { if (this.busMonitor != null) { log.warn("new monitor attached, but a monitor was already attached: old monitor has been detached."); } this.busMonitor = monitor; for (final Map.Entry<QueueSession, MessageQueue> entry : messageQueues.entrySet()) { busMonitor.notifyQueueAttached(entry.getKey().getSessionId(), entry.getValue()); } for (final String subject : subscriptions.keySet()) { busMonitor.notifyNewSubscriptionEvent(new SubscriptionEvent(false, "None", 1, false, subject)); } for (final Map.Entry<String, RemoteMessageCallback> entry : remoteSubscriptions.entrySet()) { for (final MessageQueue queue : entry.getValue().getQueues()) { busMonitor.notifyNewSubscriptionEvent( new SubscriptionEvent(true, queue.getSession().getSessionId(), 1, false, entry.getKey()) ); } } monitor.attach(this); }
private void fireQueueCloseListeners(final QueueCloseEvent event) { if (isMonitor()) { busMonitor.notifyQueueDetached(event.getQueue().getSession().getSessionId(), event.getQueue()); } synchronized (queueClosedListeners) { event.setDisposeListener(false); for (Iterator<QueueClosedListener> iter = queueClosedListeners.iterator(); iter.hasNext(); ) { iter.next().onQueueClosed(event); if (event.isDisposeListener()) { iter.remove(); event.setDisposeListener(false); } } } }
private void send(final MessageQueue queue, final Message message, final boolean fireListeners) { try { if (isMonitor()) { busMonitor.notifyOutgoingMessageToRemote(queue.getSession().getSessionId(), message); } enqueueForDelivery(queue, message); } catch (NoSubscribersToDeliverTo nstdt) { // catch this so we can get a full trace handleMessageDeliveryFailure(this, message, "No subscribers to deliver to", nstdt, false); } }
@Override public void activate(final MessageQueue queue) { try { queue.poll(new OutputStreamWriteAdapter(asyncContext.getResponse().getOutputStream())); queue.setActivationCallback(null); queue.heartBeat(); } catch (IOException e) { log.debug("Closing queue with id: " + queue.getSession().getSessionId() + " due to IOException", e); } catch (final Throwable t) { try { writeExceptionToOutputStream((HttpServletResponse) asyncContext.getResponse(), t); } catch (Throwable t2) { log.debug("Failed to write exception to dead client", t2); } } finally { asyncContext.complete(); } } });
@Override public boolean copyFromBuffer(TimeUnit timeUnit, int timeout, MessageQueue queue, ByteWriteAdapter toAdapter) throws IOException { final MarkedByteWriteAdapter markedOutputStream = new MarkedByteWriteAdapter(toAdapter); try { queue.getBuffer().readWait(timeUnit, timeout, markedOutputStream, queue.getBufferColor(), new MultiMessageFilter()); if (markedOutputStream.dataWasWritten() && markedOutputStream.getBytesWritten() > 2) { queue.resetMessageCount(); return true; } } catch (BufferOverflowException e) { queue.getBufferColor().getSequence().set(queue.getBuffer().getHeadSequence()); log.warn("buffer data was evicted for session " + queue.getSession().getSessionId() + " due to overflow condition. (consider increasing buffer size with errai.bus.buffer_size " + "in ErraiService.properties)"); } catch (InterruptedException e) { e.printStackTrace(); } return false; } }
@Override public boolean copyFromBuffer(final MessageQueue queue, final ByteWriteAdapter toAdapter) throws IOException { final MarkedByteWriteAdapter markedOutputStream = new MarkedByteWriteAdapter(toAdapter); try { queue.getBuffer().read(markedOutputStream, queue.getBufferColor(), new MultiMessageFilter()); if (markedOutputStream.dataWasWritten() && markedOutputStream.getBytesWritten() > 2) { queue.resetMessageCount(); return true; } } catch (BufferOverflowException e) { queue.getBufferColor().getSequence().set(queue.getBuffer().getHeadSequence()); log.warn("buffer data was evicted for session " + queue.getSession().getSessionId() + " due to overflow condition. (consider increasing buffer size with errai.bus.buffer_size " + "in ErraiService.properties)"); } return false; }