[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| 
Re: [ecf-dev] Distributed EventAdmin Service
 | 
Hello Roshan,
First, I assume you are using the latest from HEAD (i.e. not something 
already released)...as we haven't had a release of DistributedEventAdmin 
yet. 
For reference, the classname under discussion here is 
org.eclipse.ecf.remoteservice.eventadmin.DistributedEventAdmin, and it's 
in the 
org.eclipse.ecf/server-side/bundles/org.eclipse.ecf.remoteservice.eventadmin 
project.
In answer to your question, however, it *should* support filters...i.e. 
here's the code in DistributedEventAdmin that retrieves EventHandler 
instances
   private ServiceReference[] getEventHandlerServiceReferences(Event 
event) {
       synchronized (eventHandlerSTLock) {
           if (eventHandlerServiceTracker == null) {
               eventHandlerServiceTracker = new ServiceTracker(context,
                       EventHandler.class.getName(), null);
               eventHandlerServiceTracker.open();
           }
           ServiceReference[] refs = eventHandlerServiceTracker
                   .getServiceReferences();
           List results = new ArrayList();
           if (refs == null)
               return null;
           for (int i = 0; i < refs.length; i++) {
               String eventFilter = (String) refs[i]
                       .getProperty(EventConstants.EVENT_FILTER);
               Filter filter = null;
               if (eventFilter != null) {
                   try {
                       filter = context.createFilter(eventFilter);
                       if (event.matches(filter))
                           results.add(refs[i]);
                   } catch (InvalidSyntaxException e) {
                       logError("getEventHandlers eventFilter=" + 
eventFilter,
                               e);
                       continue;
                   }
               } else
                   results.add(refs[i]);
           }
           return (ServiceReference[]) results
                   .toArray(new ServiceReference[] {});
       }
   }
As you can see, a Filter is created out of the EVENT_FILTER String, and 
then the event.matches(filter) is called to determine if there is a 
match.  I frankly haven't had opportunity yet to write test code for a 
number of EVENT_FILTER values (although I will try to do that very 
soon), so if you have such test code that shows that this works 
improperly then please do  1) open a bug; 2) consider contributing test 
code.
Thanks,
Scott
roshan joseph wrote:
Hi,
 Could someone let me know whether the distributed eventadmin service 
support filters?
 
I was trying to add a filter condition to the eventhandler code in the 
properties object, but the event handler is found no response to the 
filter.
 
In the testeventhandler code I have added another line like
dictionary.put(EventConstants.EVENT_FILTER,"(topic=defaultTopic)");
 
before registering the eventhandler. Events with different topic names 
are also processed by the handler.
 
Really appreciate all help in advance.
 
Thanks & Regards,
Roshan
 
------------------------------------------------------------------------
_______________________________________________
ecf-dev mailing list
ecf-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ecf-dev