Event-Based Programming

In our examples so far, we’ve used synchronous methods to obtain all of our information. When we discovered peergroups or pipe advertisements, we sent the discovery message and then synchronously examined the local cache to see if the resource had been located. When we read messages from the pipe, we blocked until a message was available. Behind the scenes, of course, discovery was asynchronous, but the threads listening for events in that process were hidden to us: all that we invoked were synchronous methods.

However, there is another mechanism available for these calls: an asynchronous, event-based API. This mechanism follows Java’s standard event design pattern: you register a listener class to be informed when certain events occur. When these events occur, methods of the listener class are invoked.

We’ll show how this works by modifying our HungryPeer to use event-based discovery to locate the RestoNet pipes. Here’s the code that does this:

import java.io.*; import java.util.Enumeration; import java.util.Vector; import net.jxta.peergroup.PeerGroup; import net.jxta.peergroup.PeerGroupFactory; import net.jxta.exception.PeerGroupException; import net.jxta.document.AdvertisementFactory; import net.jxta.document.Advertisement; import net.jxta.document.StructuredDocument; import net.jxta.document.Element; import net.jxta.document.StructuredDocumentFactory; import net.jxta.document.MimeMediaType; import net.jxta.discovery.DiscoveryService; import net.jxta.pipe.PipeService; ...

Get JXTA in a Nutshell now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.