package cz.cuni.mff.d3s.been.mq; import java.io.Serializable; import cz.cuni.mff.d3s.been.annotation.NotThreadSafe; /** * * Inter-process message queue. * * @author Martin Sixta */ @NotThreadSafe final class InprocMessageQueue<T extends Serializable> implements IMessageQueue<T> { /** * The context used to create sockets. */ private final ZMQContext context; /** * The singleton receiver. */ private final InprocMessageReceiver<T> receiver; /** * Creates a named inter-process queue. * * @param queueName * name of the queue */ InprocMessageQueue(String queueName) { this.context = Context.getReference(); this.receiver = new InprocMessageReceiver<>(context, queueName); } @Override public InprocMessageReceiver<T> getReceiver() throws MessagingException { if (!receiver.isConnected()) { receiver.bind(); } return receiver; } @Override public InprocMessageSender<T> createSender() throws MessagingException { InprocMessageSender<T> sender = getReceiver().createSender(); sender.connect(); return sender; } @Override public void terminate() throws MessagingException { receiver.close(); context.term(); } }