public void refreshActivators() {

      if (activatorsFilename==null) return;  // no file

      Date nowDate = new Date();
      long now = nowDate.getTime();
      if (now < ( activatorsChecked + pollingFrequency ) ) return;

      try {
         File af = new File(activatorsFilename);
         if (activatorsModified < af.lastModified()) {
            log.debug("refreshing activators from: " + activatorsFilename);
            activatorsModified = af.lastModified();
            List<String> newActivators = new Vector<String>(configuredActivators);

            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
   	    Document doc = dBuilder.parse(af);
   	    doc.getDocumentElement().normalize();
 
   	    NodeList rpNodes = doc.getElementsByTagName("ActivationRequirement");
 
   	    for (int i=0; i<rpNodes.getLength(); i++) {
   	       Node rpNode = rpNodes.item(i);
   	       if (rpNode.getNodeType() == Node.ELEMENT_NODE) {
   	          String rp = ((Element)rpNode).getAttribute("entityId");
                  if (rp.length()>0) newActivators.add(rp);
                  log.debug("adding activator: " + rp);
               }
   	    }
            activators = newActivators;
   	 }

      } catch (IOException e) {
         log.error("could not read activators file: " + e);
      } catch (ParserConfigurationException e) {
         log.error("parse cofig activators file: " + e);
      } catch (SAXException e) {
         log.error("could not parse activators file: " + e);
      }
      activatorsChecked = now;
   }