Listing 1
// Retrieve the namespace handle from the catalog
// INamespace eventSource = (INamespace) root.find("File
// System");
// Create an event filter
IQuery filter = (IQuery)eventSource.create("FileCreatedEvent", ItemType.IT_Query);
filter.setQueryExp("path like Ô%.docÕ");
// Create an event listener object
MyEventListener listener = new MyEventListener();
// Register the filter and the listener object with the runtime system
EventBroker.subscribe(listener, filter);
Listing 2
// Retrieve the namespace handle from the catalog
INamespace eventSource = (INamespace) root.find("File System");
// Create an event object and set its properties
IEvent event = (IEvent) eventSource.create("FileCreatedEvent", ItemType.IT_Event);
event.setPropertyValue("path", "/Docs/Important Paper.doc");
// Broadcast the event to local and remote listeners
EventBroker.raise(event);
Listing 3
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<broker:raise xmlns:broker="http://eventcentral.com">
<ev:FileCreatedEvent
xmlns:ev="http://eventcentral.com/Root/File System">
<path xsi:type="xsd:string">/Docs/Important Paper.doc</path>
</ev:FileCreatedEvent>
<ev:FileDestroyedEvent
xmlns:ev="http://eventcentral.com/Root/File System">
<path xsi:type="xsd:string">/Docs/Junk Paper.doc</path>
</ev:FileCreatedEvent>
</broker:raise>
</env:Body>
</env:Envelope>
Listing 4
public SOAPMessage onMessage(SOAPMessage requestMsg)
{
...
SOAPEnvelope requestEnv = requestMsg.getSOAPPart().getEnvelope();
SOAPHeader requestHeader = requestEnv.getHeader();
SOAPBody requestBody = requestEnv.getBody();
SOAPElement raiseElem = (SOAPElement) requestBody.getChildElements().next();
// Decode events and forward them to the runtime system
IEvent [] events = SOAPCodec.decodeEventList(requestEnv, raiseElem);
for (int k = 0; k < events.length; k ++)
{
// Raise the event in the runtime system
EventBroker.raise(events[k]);
}
// Compose the response message
SOAPMessage responseMsg = messageFactory.createMessage();
...
return responseMsg;
}
Listing 5
public class EventListener implements IEventListener
{
private String endpoint; // end point of a web based listener
public void handleEvent(IEvent event)
{
...
SOAPConnection connection = connectionFactory.createConnection();
SOAPMessage requestMsg = messageFactory.createMessage();
SOAPEnveloper soapEnv = requestMsg.getSOAPPart().getEnvelope();
SOAPBody soapBody = soapEnv.getBody();
SOAPBodyElement command = soapBody.addBodyElement(
soapEnv.createName("raise", "broker", "http://eventcentral.com"));
SOAPCodec.encodeEventList(soapEnv, command, new IEvent [] { event });
requestMsg.saveChanges();
SOAPMessage responseMsg = connection.call(requestMsg, endpoint);
connection.close();
...
}
...
}
Listing 6
public class Subscription
{
public String endpoint; // an endpoint used to receive events
public String nsppath; // path of a namespace containing the event class
public String classname; // name of an event class
public String filter; // a query expression for filtering events
}
public interface IEventManager
{
public void subscribe(Subscription [] subscriptions);
public void unsubscribe(String endpoint);
}
Listing 7
public class EventManager implements IEventManager
{
public void subscribe(Subscription [] subs)
{
...
for (int k = 0; k < subs.length; k ++)
{
// locate the event source namespace in the catalog
INamespace nsp = root.find(subs[k].nsppath);
// create an event filter
IQuery q = (IQuery) nsp.create(subs[k].classname, ItemType.IT_Query);
q.setQueryExp(subs[k].filter);
// create an event listener object
EventListener lsn = new EventListener(subs[k].endpoint);
// register the listener object with the runtime system
EventBroker.subscribe(lsn, q);
}
}
...
}