Ejemplo n.º 1
0
  private void processApple(
      List params, Redirector redirector, AppleController app, WebContinuation wk)
      throws Exception {

    Request cocoonRequest = ContextHelper.getRequest(this.avalonContext);
    AppleRequest req = new DefaultAppleRequest(params, cocoonRequest);
    Response cocoonResponse = ContextHelper.getResponse(this.avalonContext);
    DefaultAppleResponse res = new DefaultAppleResponse(cocoonResponse);

    try {
      app.process(req, res);
    } finally {
      if (wk == null) {
        // dispose stateless apple immediatelly
        if (app instanceof Disposable) {
          try {
            ((Disposable) app).dispose();
          } catch (Exception e) {
            getLogger().error("Error disposing Apple instance.", e);
          }
        }
      }
    }

    if (res.isRedirect()) {
      redirector.redirect(false, res.getURI());
    } else {
      String uri = res.getURI();
      if (getLogger().isDebugEnabled()) {
        getLogger()
            .debug(
                "Apple forwards to "
                    + uri
                    + " with bizdata= "
                    + res.getData()
                    + (wk != null
                        ? " and continuationid= " + wk.getId()
                        : " without continuationid"));
      }

      // Note: it is ok for wk to be null
      this.forwardTo(uri, res.getData(), wk, redirector);
    }

    // TODO allow for AppleResponse to set some boolean saying the use case
    // is completed and the continuation can be invalidated ?
  }
Ejemplo n.º 2
0
 public void disposeContinuation(WebContinuation webContinuation) {
   AppleController app = (AppleController) webContinuation.getContinuation();
   if (app instanceof Disposable) {
     ((Disposable) app).dispose();
   }
 }