001 package com.croftsoft.core.util.queue;
002
003 import java.rmi.Remote;
004 import java.rmi.RemoteException;
005
006 /*********************************************************************
007 *
008 * @author
009 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
010 * @version
011 * 1998-11-27
012 *********************************************************************/
013
014 public interface QueueRemote extends Remote
015 //////////////////////////////////////////////////////////////////////
016 //////////////////////////////////////////////////////////////////////
017 {
018
019 /*********************************************************************
020 * Appends the object to the queue and notifies any threads that
021 * are blocked in pull().
022 *
023 * @return
024 * Returns true if the object could be added to the queue.
025 *********************************************************************/
026 public boolean append ( Object o )
027 throws RemoteException;
028
029 /*********************************************************************
030 * Poll this queue to see if an object is available, immediately
031 * removing one if so. If the queue is empty, this method
032 * immediately returns null.
033 *
034 * @return
035 * An object, if one was immediately available, otherwise null.
036 *********************************************************************/
037 public Object poll ( )
038 throws RemoteException;
039
040 /*********************************************************************
041 * Remove the next object in this queue, blocking until one becomes
042 * available.
043 *
044 * @throws InterruptedException
045 * If the wait is interrupted.
046 *********************************************************************/
047 public Object pull ( ) throws InterruptedException,
048 RemoteException;
049
050 /*********************************************************************
051 * Remove the next object in this queue, blocking until one becomes
052 * available or the given timeout period expires.
053 *
054 * @param timeout
055 * If positive, block for up to <I>timeout</I> milliseconds while
056 * waiting for an object to be added to this queue.
057 * If zero, block indefinitely.
058 *
059 * @return
060 * An object, if one was available within the specified timeout
061 * period, otherwise null.
062 *
063 * @throws IllegalArgumentException
064 * If the value of the timeout argument is negative.
065 * @throws InterruptedException
066 * If the timeout wait is interrupted.
067 *********************************************************************/
068 public Object pull ( long timeout )
069 throws IllegalArgumentException, InterruptedException,
070 RemoteException;
071
072 /*********************************************************************
073 * Replaces the first occurrence of any equal object in the queue.
074 * The new object is placed in the same queue order as the old.
075 * If the new object is unique, calls add(o).
076 *
077 * @return
078 * The old object, if available, otherwise null.
079 *********************************************************************/
080 public Object replace ( Object o )
081 throws RemoteException;
082
083 //////////////////////////////////////////////////////////////////////
084 //////////////////////////////////////////////////////////////////////
085 }