Beispiel #1
0
  public Object call(
      String cfcPath,
      String id,
      String functionName,
      Struct arguments,
      boolean cfcPeristent,
      Object defaultValue)
      throws PageException {
    DevNullOutputStream os = DevNullOutputStream.DEV_NULL_OUTPUT_STREAM;
    String requestURI = toRequestURI(cfcPath);

    PageContext oldPC = ThreadLocalPageContext.get();
    PageContextImpl pc =
        ThreadUtil.createPageContext(
            config, os, "localhost", requestURI, "", null, null, null, null);
    pc.setRequestTimeout(999999999999999999L);
    try {
      ThreadLocalPageContext.register(pc);
      Component cfc = getCFC(pc, requestURI, cfcPath, id, cfcPeristent);
      if (cfc.containsKey(functionName)) {
        return cfc.callWithNamedValues(pc, functionName, arguments);
      }
    } finally {
      CFMLFactory factory = config.getFactory();
      factory.releasePageContext(pc);
      ThreadLocalPageContext.register(oldPC);
    }
    return defaultValue;
  }
  private PageContextImpl createPageContext(
      CFMLFactory factory,
      ComponentAccess app,
      String applicationName,
      String cfid,
      Collection.Key methodName)
      throws PageException {
    Resource root = factory.getConfig().getRootDirectory();
    String path = app.getPageSource().getFullRealpath();

    // Request
    HttpServletRequestDummy req =
        new HttpServletRequestDummy(root, "localhost", path, "", null, null, null, null, null);
    if (!StringUtil.isEmpty(cfid))
      req.setCookies(new Cookie[] {new Cookie("cfid", cfid), new Cookie("cftoken", "0")});

    // Response
    OutputStream os = DevNullOutputStream.DEV_NULL_OUTPUT_STREAM;
    try {
      Resource out =
          factory
              .getConfig()
              .getConfigDir()
              .getRealResource("output/" + methodName.getString() + ".out");
      out.getParentResource().mkdirs();
      os = out.getOutputStream(false);
    } catch (IOException e) {
      e.printStackTrace();
      // TODO was passiert hier
    }
    HttpServletResponseDummy rsp = new HttpServletResponseDummy(os);

    // PageContext
    PageContextImpl pc =
        (PageContextImpl)
            factory.getRailoPageContext(factory.getServlet(), req, rsp, null, false, -1, false);
    // ApplicationContext
    ClassicApplicationContext ap =
        new ClassicApplicationContext(
            factory.getConfig(),
            applicationName,
            false,
            app == null ? null : ResourceUtil.getResource(pc, app.getPageSource(), null));
    initApplicationContext(pc, app);
    ap.setName(applicationName);
    ap.setSetSessionManagement(true);
    // if(!ap.hasName())ap.setName("Controler")
    // Base
    pc.setBase(app.getPageSource());

    return pc;
  }
  @Override
  public void onApplicationEnd(CFMLFactory factory, String applicationName) throws PageException {
    ComponentAccess app = apps.get(applicationName);
    if (app == null || !app.containsKey(ON_APPLICATION_END)) return;

    PageContextImpl pc = (PageContextImpl) ThreadLocalPageContext.get();
    boolean createPc = pc == null;
    try {
      if (createPc) pc = createPageContext(factory, app, applicationName, null, ON_APPLICATION_END);
      call(app, pc, ON_APPLICATION_END, new Object[] {pc.applicationScope()}, true);
    } finally {
      if (createPc && pc != null) {
        factory.releasePageContext(pc);
      }
    }
  }
  @Override
  public void onSessionEnd(CFMLFactory factory, String applicationName, String cfid)
      throws PageException {
    ComponentAccess app = apps.get(applicationName);
    if (app == null || !app.containsKey(ON_SESSION_END)) return;

    PageContextImpl pc = null;
    try {
      pc = createPageContext(factory, app, applicationName, cfid, ON_SESSION_END);
      call(
          app,
          pc,
          ON_SESSION_END,
          new Object[] {pc.sessionScope(false), pc.applicationScope()},
          true);
    } finally {
      if (pc != null) {
        factory.releasePageContext(pc);
      }
    }
  }