private void endHereCommon() throws BeanException {
   // save EJB object handle in property
   if (ejb != null) {
     try {
       hPubAccessHandle = ejb.getHandle();
     } catch (Exception e) {
       String errMsg =
           (new Date(System.currentTimeMillis())).toString()
               + " HPS5955 "
               + this.getClass().getName()
               + ": ejb.getHandle(), ejb="
               + ejb
               + ": "
               + e.getClass().getName()
               + ": "
               + e.getMessage();
       System.err.println(errMsg);
       if (tracing == true) {
         traceArgs[0] = this;
         traceArgs[1] = errMsg;
         try {
           traceMethod.invoke(o, traceArgs);
         } catch (Exception x) {
         }
       }
       throw new BeanException(errMsg);
     }
   }
   // save ejb accessHandle and hpubLinkKey in HttpSession
   if ((oHttpServletRequest != null) && (outputProps != null)) {
     // a new HPubEjb2HttpSessionBindingListener object containing the ejb access
     // handle and hPubLinkKey for the connection is bound to the session using
     // a prefix and the ending connection state of the IO just processed.
     // This hPubLinkKey uniquely identifies the connection associated with the
     // IO chain for that HP Runtime JVM.
     // The ejb access handle is contained within the HPubEjb2HttpSessionBindingListener
     // object so that an ejb remove can be issued in the case where a session
     // timeout or session invalidation occurs for an incomplete IO chain.
     HttpSession theWebsession = oHttpServletRequest.getSession(true);
     if (theWebsession != null) {
       synchronized (theWebsession) {
         try {
           String theKey = KEY_WEBCONN + outputProps.getHPubEndChainName();
           hPubLinkKey = outputProps.getHPubLinkKey();
           theWebsession.setAttribute(
               theKey, new HPubEJB2HttpSessionBindingListener(hPubAccessHandle, hPubLinkKey));
           if (tracing == true) {
             traceArgs[0] = this;
             traceArgs[1] =
                 "theWebsession.setAttribute("
                     + theKey
                     + ",new HPubEJB2HttpSessionBindingListener("
                     + hPubAccessHandle
                     + ", "
                     + hPubLinkKey
                     + "))";
             try {
               traceMethod.invoke(o, traceArgs);
             } catch (Exception x) {
             }
           }
           if (auditing == true) {
             auditArgs[0] =
                 "\n---\nIN:"
                     + this.getClass().getName()
                     + " "
                     + theKey
                     + " "
                     + hPubAccessHandle
                     + " "
                     + hPubLinkKey
                     + " "
                     + theWebsession.getId();
             auditArgs[1] = theWebsession;
             try {
               auditMethod.invoke(o, auditArgs);
             } catch (Exception x) {
             }
           }
         } catch (Exception e) {
           hPubLinkKey = null; // set to null to force following error logic
         }
       }
     }
     // if an error occurred throw an exception to cause ejb remove to be issued.
     if ((theWebsession == null) || (hPubLinkKey == null)) {
       String errMsg =
           (new Date(System.currentTimeMillis())).toString()
               + " HPS5956 "
               + this.getClass().getName()
               + ": HttpServletRequest.getSession(true), hPubLinkKey="
               + hPubLinkKey;
       System.err.println(errMsg);
       if (tracing == true) {
         traceArgs[0] = this;
         traceArgs[1] = errMsg;
         try {
           traceMethod.invoke(o, traceArgs);
         } catch (Exception x) {
         }
       }
       throw new BeanException(errMsg);
     }
   }
   // send Event to User indicating that the Query request is complete
   RequestCompleteEvent hPubEvent = new RequestCompleteEvent(this);
   fireHPubReqCompleteEvent(hPubEvent);
   return;
 }
  /**
   * Processes the request coming to the servlet and grabs the attributes set by the servlet and
   * uses them to fire off pre-determined methods set in the setupActionMethods function of the
   * servlet.
   *
   * @param request the http request coming from the browser.
   * @param response the http response going to the browser.
   * @throws javax.servlet.ServletException
   * @throws java.io.IOException
   */
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    if (!actionInitialized) {
      LogController.write(this, "This dispatcher servlet is not initialized properly!");
      return;
    }

    if (actionTag == null) {
      LogController.write(this, "There is no action attribute tag name!");
      return;
    }

    HttpSession httpSession = request.getSession();
    UserSession userSession = (UserSession) httpSession.getAttribute("user_session");

    if (userSession == null) {
      LogController.write(this, "User session is no longer available in this http session.");

      userSession = new UserSession();

      // We always want a user session though...
      httpSession.setAttribute("user_session", userSession);
    }

    String action = (String) request.getAttribute(actionTag);

    try {
      if (action == null) {
        // There is no action attribute specified, check parameters.
        String external_action = (String) request.getParameter(actionTag);

        if (external_action != null) {
          Method method = externalActions.get(external_action);

          if (method != null) {
            LogController.write(this, "Performing external action: " + external_action);
            method.invoke(this, new Object[] {userSession, request, response});
          } else {
            if (defaultExternalMethod != null) {
              LogController.write(this, "Performing default external action.");
              defaultExternalMethod.invoke(this, new Object[] {userSession, request, response});
            } else {
              LogController.write(this, "Unable to perform default external action.");
            }
          }
        } else {
          if (defaultExternalMethod != null) {
            LogController.write(this, "Performing default external action.");
            defaultExternalMethod.invoke(this, new Object[] {userSession, request, response});
          } else {
            LogController.write(this, "Unable to perform default external action.");
          }
        }
      } else {
        Method method = internalActions.get(action);

        if (method != null) {
          LogController.write(this, "Performing internal action: " + action);
          method.invoke(this, new Object[] {userSession, request, response});
        } else {
          if (defaultInternalMethod != null) {
            LogController.write(this, "Performing default internal action.");
            defaultInternalMethod.invoke(this, new Object[] {userSession, request, response});
          } else {
            LogController.write(this, "Unable to perform default internal action.");
          }
        }

        request.removeAttribute("application_action");
      }
    } catch (IllegalAccessException accessEx) {
      LogController.write(this, "Exception while processing request: " + accessEx.getMessage());
    } catch (InvocationTargetException invokeEx) {
      LogController.write(this, "Exception while processing request: " + invokeEx.toString());
      invokeEx.printStackTrace();
    } catch (Exception ex) {
      LogController.write(this, "Unknown exception: " + ex.toString());
    }
  }