[SNMP4J] Table Listeners and multi-threading
pasteman8-agentpp at yahoo.com
pasteman8-agentpp at yahoo.com
Tue Nov 16 09:52:58 CET 2004
Great. Thanks!
I think this should do the job.
+gil
--- Frank Fock <fock at agentpp.com> wrote:
> pasteman8-agentpp at yahoo.com wrote:
>
> >There is a basic question regarding the design of
> >TableUtils:
> >Can the getTable method be used in a runnable run()
> >method? In otherwords, does getTable return only
> when
> >the table is done?
> >
> >
> >
> No, the TableUtils.getTable() method available in
> v1.0.3 asynchronously
> retrieves a table. It returns immediately. For a
> synchronously getTable
> method, please add the following code to TableUtils
> class (this code
> will be part of v1.0.4):
>
> /**
> * Gets synchronously SNMP tabular data from one
> or more tables.
> * The data is returned row-by-row as a list of
> {@link TableEvent}
> instances.
> * Each instance represents a row (or an error
> condition). Besides the
> * target agent, the OIDs of the columnar objects
> have to be specified
> * for which instances should be retrieved. With a
> lower bound index and
> * an upper bound index, the result set can be
> narrowed to improve
> * performance. This method can be executed
> concurrently by multiple
> threads.
> *
> * @param target
> * a <code>Target</code> instance.
> * @param columnOIDs
> * an array of OIDs of the columnar objects
> whose instances should be
> * retrieved. The columnar objects may belong
> to different tables.
> * Typically they belong to tables that share a
> common index or
> sub-index
> * prefix. Note: The result of this method is
> not defined if
> instance OIDs
> * are supplied in this array!
> * @param lowerBoundIndex
> * an optional parameter that specifies the
> lower bound index.
> * If not <code>null</code>, all returned rows
> have an index
> greater than
> * <code>lowerBoundIndex</code>.
> * @param upperBoundIndex
> * an optional parameter that specifies the
> upper bound index.
> * If not <code>null</code>, all returned rows
> have an index less
> or equal
> * than <code>lowerBoundIndex</code>.
> * @return
> * a <code>List</code> of {@link TableEvent}
> instances. Each instance
> * represents successfully retrieved row or an
> error condition. Error
> * conditions (any status other than {@link
> TableEvent#STATUS_OK})
> * may only appear at the last element of the
> list.
> */
> public List getTable(Target target,
> OID[] columnOIDs,
> OID lowerBoundIndex,
> OID upperBoundIndex) {
>
> if ((columnOIDs == null) || (columnOIDs.length
> == 0)) {
> throw new IllegalArgumentException("No column
> OIDs specified");
> }
> InternalTableListener listener = new
> InternalTableListener();
> TableRequest req = new TableRequest(target,
> columnOIDs, listener,
> null,
>
> lowerBoundIndex,
>
> upperBoundIndex);
> synchronized (listener) {
> req.sendNextChunk();
> try {
> listener.wait();
> }
> catch (InterruptedException ex) {
> logger.warn(ex);
> }
> }
> return listener.getRows();
> }
>
> class InternalTableListener implements
> TableListener {
>
> private LinkedList rows = new LinkedList();
>
> public boolean next(TableEvent event) {
> rows.add(event);
> return true;
> }
>
> public synchronized void finished(TableEvent
> event) {
> if ((event.getStatus() !=
> TableEvent.STATUS_OK) ||
> (event.getIndex() != null)) {
> rows.add(event);
> }
> notify();
> }
>
> public List getRows() {
> return rows;
> }
> }
>
>
> Best regards,
> Frank
>
>
More information about the SNMP4J
mailing list