code: public static synchronized Router getRouterFor(ServletContext con) {
          // log.info( "getting router for context path '" + givenContextPath + "'" );
          String contextPath = EldaRouterRestletSupport.flatContextPath(con.getContextPath());
          TimestampedRouter r = routers.get(contextPath);
          long timeNow = System.currentTimeMillis();
          //
          if (r == null) {
              log.info("creating router for '" + contextPath + "'");
              long interval = getRefreshInterval(contextPath);
              r = new TimestampedRouter(EldaRouterRestletSupport.createRouterFor(con), timeNow, interval);
              routers.put(contextPath, r);
          } else if (r.nextCheck < timeNow) {
              long latestTime = EldaRouterRestletSupport.latestConfigTime(con, contextPath);
              if (latestTime > r.timestamp) {
                  log.info("reloading router for '" + contextPath + "'");
                  long interval = getRefreshInterval(contextPath);
                  r = new TimestampedRouter(EldaRouterRestletSupport.createRouterFor(con), timeNow, interval);
                  DOMUtils.clearCache();
                  Cache.Registry.clearAll();
                  routers.put(contextPath, r);
              } else {
                  // checked, but no change to reload
                  // log.info("don't need to reload router, will check again later." );
                  r.deferCheck();
              }
          } else {
              // Don't need to check yet, still in waiting period
              // log.info( "Using existing router, not time to check yet." );
          }
          //
          return r.router;
      }
docs: Answer a router initialised with the URI templates appropriate to
  this context path. Such a router may already be in the routers table,
  in which case it is used, otherwise a new router is created, initialised,
  put in the table, and returned.