You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2007/09/05 12:32:44 UTC

svn commit: r572931 - /ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java

Author: jonesde
Date: Wed Sep  5 03:32:30 2007
New Revision: 572931

URL: http://svn.apache.org/viewvc?rev=572931&view=rev
Log:
Some error handling improvements, especially for problems with ServerHit saving so it doesn't kill the server output, and to handle the rare case where response isCommitter and there is no session because of logout or whatever

Modified:
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java?rev=572931&r1=572930&r2=572931&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java Wed Sep  5 03:32:30 2007
@@ -230,9 +230,14 @@
                             response.getWriter().print(errorMessage);
                         }
                     } catch (Throwable t2) {
-                        int errorToSend = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
-                        Debug.logWarning("Error while trying to write error message using response.getOutputStream or response.getWriter: " + t.toString() + "; sending error code [" + errorToSend + "], and message [" + errorMessage + "]", module);
-                        response.sendError(errorToSend, errorMessage);
+                        try {
+                            int errorToSend = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
+                            Debug.logWarning("Error while trying to write error message using response.getOutputStream or response.getWriter: " + t.toString() + "; sending error code [" + errorToSend + "], and message [" + errorMessage + "]", module);
+                            response.sendError(errorToSend, errorMessage);
+                        } catch (Throwable t3) {
+                            // wow, still bad... just throw an IllegalStateException with the message and let the servlet container handle it
+                            throw new IllegalStateException(errorMessage);
+                        }
                     }
                 }
 
@@ -268,10 +273,19 @@
         }
 
         // run these two again before the ServerHitBin.countRequest call because on a logout this will end up creating a new visit
-        UtilHttp.setInitialRequestInfo(request);
-        VisitHandler.getVisitor(request, response);
-        
-        ServerHitBin.countRequest(webappName + "." + rname, request, requestStartTime, System.currentTimeMillis() - requestStartTime, userLogin, delegator);
+        if (response.isCommitted() && request.getSession(false) == null) {
+            // response committed and no session, and we can't get a new session, what to do!
+            // without a session we can't log the hit, etc; so just do nothing; this should NOT happen much!
+            Debug.logError("Error in ControlServlet output where response isCommitted and there is no session (probably because of a logout); not saving ServerHit/Bin information because there is no session and as the response isCommitted we can't get a new one. The output was successful, but we just can't save ServerHit/Bin info.", module);
+        } else {
+            try {
+                UtilHttp.setInitialRequestInfo(request);
+                VisitHandler.getVisitor(request, response);
+                ServerHitBin.countRequest(webappName + "." + rname, request, requestStartTime, System.currentTimeMillis() - requestStartTime, userLogin, delegator);
+            } catch (Throwable t) {
+                Debug.logError(t, "Error in ControlServlet saving ServerHit/Bin information; the output was successful, but can't save this tracking information. The error was: " + t.toString(), module);
+            }
+        }
         if (Debug.timingOn()) timer.timerString("[" + rname + "] Done rendering page, Servlet Finished", module);
     }