docs: private synchronized void lazyInit(HttpServletRequest request) throws IOException {
          List<File> files;
          URL url;
          long lastModified;
          long now;
          Resolver resolver;
          Node localhost;
          FileNode file;
          Object[] tmp;
  
          resolver = application.resolver;
          if (engine != null && resolver.isLife()) {
              for (Node node : reloadFiles) {
                  lastModified = node.getLastModified();
                  if (lastModified > loaded) {
                      now = System.currentTimeMillis();
                      if (lastModified > now) {
                          // fail to avoid repeated re-init
                          throw new IOException(node.getUri() + " has lastModifiedDate in the future: "
                                  + new Date(lastModified) + "(now: " + new Date(now) + ")");
                      }
                      LOG.info("reloading jasmin for application '" + application.getContextPath() + "' - changed file: " + node);
                      engine = null;
                      resolver.reset();
                  }
              }
          }
          if (engine == null) {
              url = new URL(request.getRequestURL().toString());
              try {
                  localhost = resolver.getWorld().node(new URI(url.getProtocol(), null, url.getHost(), url.getPort(), "", null, null));
              } catch (URISyntaxException e) {
                  throw new IllegalStateException(e);
              }
              tmp = application.createEngine(docroot, localhost);
              engine = (Engine) tmp[0];
              LOG.info("started engine, initial url=" + url);
              for (Module module : engine.repository.modules()) {
                  files = module.files();
                  if (files.size() > 2) {
                      LOG.warn("deprecated: module '" + module.getName() + "' contains more than 2 file: " + files);
                  }
                  for (File f : files) {
                      if (f.getNormal() instanceof HttpNode) {
                          LOG.warn("deprecated: module '" + module.getName() + "' uses base LOCALHOST: " + f.getNormal().getUri());
                      }
                  }
              }
              if (resolver.isLife()) {
                  reloadFiles = (List<Node>) tmp[1];
                  file = resolver.getLiveXml();
                  if (file != null) {
                      reloadFiles.add(file);
                  }
                  LOG.info("reload if one of these " + reloadFiles.size() + " files is modified: ");
                  for (Node node : reloadFiles) {
                      LOG.info("  " + node.getUri());
                  }
                  loaded = System.currentTimeMillis();
              }
              if (engine == null) {
                  throw new IllegalStateException();
              }
          }
      }