Hi,

This was mentioned before: there are many places in Nutch that rely on static initializers. This is so-so or sometimes plainly bad, depending on a situation.

I'm facing a problem now with URLFilters. I need to run several fetchers inside a single VM, with different parameters such as different url patterns (which is handled by URLFilters). But even if I specify different NutchConf-s to each fetcher, the list of implementations and the instances of URLFilter[] in URLFilters are initialized only once, and this happens from the default configuration obtained through a call to static NutchConf.get().

I would like to change it somehow, but I'm not sure how... One way to solve this would be to instantiate the plugins based on a concrete NutchConf instance, like this:

URLFilters:

   private URLFilters(NutchConf) {
      // initialize plugins based on this instance of NutchConf
   }

   public static URLFilters get(NutchConf conf) {
      URLFilters res = (URLFilters)conf.get("urlfilters.key");
      if (res == null) {
         res = new URLFilters(conf);
         conf.put("urlfilters.key", res);
      }
      return res;
   }

In case you are running with a single NutchConf per JVM it doesn't change 
anything. In case you want to run several different configs in a single JVM 
this approach provides the solution. We could follow this strategy for other 
plugin registry facades. Comments?


--
Best regards,
Andrzej Bialecki     <><
___. ___ ___ ___ _ _   __________________________________
[__ || __|__/|__||\/|  Information Retrieval, Semantic Web
___|||__||  \|  ||  |  Embedded Unix, System Integration
http://www.sigram.com  Contact: info at sigram dot com


Reply via email to