From af84ec19c9479b312ef59b18d64b0feb9a6a6e01 Mon Sep 17 00:00:00 2001 From: hns Date: Thu, 18 Aug 2005 22:55:30 +0000 Subject: [PATCH] * Remaining public fields in RequestTrans converted to private, final where possible * Added setters/getters * Improved hashCode() implementation for RequestTrans --- src/helma/framework/RequestBean.java | 2 +- src/helma/framework/RequestTrans.java | 41 +++++++++++++++---- src/helma/framework/core/Application.java | 2 +- .../framework/core/RequestEvaluator.java | 13 +++--- src/helma/servlet/AbstractServletClient.java | 15 +++---- 5 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/helma/framework/RequestBean.java b/src/helma/framework/RequestBean.java index 4cae0abe..f5e7c176 100644 --- a/src/helma/framework/RequestBean.java +++ b/src/helma/framework/RequestBean.java @@ -128,7 +128,7 @@ public class RequestBean implements Serializable { * @return ... */ public String getPath() { - return req.path; + return req.getPath(); } /** diff --git a/src/helma/framework/RequestTrans.java b/src/helma/framework/RequestTrans.java index 5bf17525..1f97d22d 100644 --- a/src/helma/framework/RequestTrans.java +++ b/src/helma/framework/RequestTrans.java @@ -50,10 +50,10 @@ public class RequestTrans implements Serializable { final HttpServletResponse response; // the uri path of the request - public String path; + private final String path; // the request's session id - public String session; + private String session; // the map of form and cookie data private final Map values; @@ -78,8 +78,9 @@ public class RequestTrans implements Serializable { /** * Create a new Request transmitter with an empty data map. */ - public RequestTrans(String method) { + public RequestTrans(String method, String path) { this.method = method; + this.path = path; this.request = null; this.response = null; values = new SystemMap(); @@ -89,10 +90,12 @@ public class RequestTrans implements Serializable { /** * Create a new request transmitter with the given data map. */ - public RequestTrans(HttpServletRequest request, HttpServletResponse response) { + public RequestTrans(HttpServletRequest request, + HttpServletResponse response, String path) { this.method = request.getMethod(); this.request = request; this.response = response; + this.path = path; values = new SystemMap(); startTime = System.currentTimeMillis(); } @@ -143,7 +146,10 @@ public class RequestTrans implements Serializable { * detect multiple identic requests. */ public int hashCode() { - return (session == null) ? super.hashCode() : session.hashCode(); + if (session == null || path == null) + return super.hashCode(); + return 17 + (37 * session.hashCode()) + + (37 * path.hashCode()); } /** @@ -183,17 +189,38 @@ public class RequestTrans implements Serializable { return POST.equalsIgnoreCase(method); } + /** + * Get the request's session id + */ + public String getSession() { + return session; + } + + /** + * Set the request's session id + */ + public void setSession(String session) { + this.session = session; + } + + /** + * Get the request's path + */ + public String getPath() { + return path; + } + /** * Get the request's action. */ - public synchronized String getAction() { + public String getAction() { return action; } /** * Set the request's action. */ - public synchronized void setAction(String action) { + public void setAction(String action) { this.action = action; } diff --git a/src/helma/framework/core/Application.java b/src/helma/framework/core/Application.java index e4c294ad..64618bdd 100644 --- a/src/helma/framework/core/Application.java +++ b/src/helma/framework/core/Application.java @@ -620,7 +620,7 @@ public final class Application implements IPathElement, Runnable { requestCount += 1; // get user for this request's session - Session session = createSession(req.session); + Session session = createSession(req.getSession()); session.touch(); diff --git a/src/helma/framework/core/RequestEvaluator.java b/src/helma/framework/core/RequestEvaluator.java index 42faf452..dac87b0b 100644 --- a/src/helma/framework/core/RequestEvaluator.java +++ b/src/helma/framework/core/RequestEvaluator.java @@ -151,7 +151,7 @@ public final class RequestEvaluator implements Runnable { // Transaction name is used for logging etc. StringBuffer txname = new StringBuffer(app.getName()); txname.append(":").append(req.getMethod().toLowerCase()).append(":"); - txname.append((error == null) ? req.path : "error"); + txname.append((error == null) ? req.getPath() : "error"); // begin transaction localrtx.begin(txname.toString()); @@ -190,8 +190,8 @@ public final class RequestEvaluator implements Runnable { if (action == null) { throw new RuntimeException(error); } - } else if ((req.path == null) || - "".equals(req.path.trim())) { + } else if ((req.getPath() == null) || + "".equals(req.getPath().trim())) { currentElement = root; requestPath.add(null, currentElement); @@ -202,7 +202,7 @@ public final class RequestEvaluator implements Runnable { } } else { // march down request path... - StringTokenizer st = new StringTokenizer(req.path, + StringTokenizer st = new StringTokenizer(req.getPath(), "/"); int ntokens = st.countTokens(); @@ -674,7 +674,7 @@ public final class RequestEvaluator implements Runnable { wait(app.requestTimeout); if (reqtype != NONE) { - app.logEvent("Stopping Thread for Request " + app.getName() + "/" + req.path); + app.logEvent("Stopping Thread for Request " + app.getName() + "/" + req.getPath()); stopTransactor(); res.reset(); res.writeErrorReport(app.getName(), "Request timed out"); @@ -879,8 +879,7 @@ public final class RequestEvaluator implements Runnable { private void initObjects(String functionName, int reqtype, String reqtypeName) { this.functionName = functionName; this.reqtype = reqtype; - req = new RequestTrans(reqtypeName); - req.path = functionName; + req = new RequestTrans(reqtypeName, functionName); session = new Session(functionName, app); res = new ResponseTrans(app, req); result = null; diff --git a/src/helma/servlet/AbstractServletClient.java b/src/helma/servlet/AbstractServletClient.java index 45070132..db6123c0 100644 --- a/src/helma/servlet/AbstractServletClient.java +++ b/src/helma/servlet/AbstractServletClient.java @@ -134,7 +134,7 @@ public abstract class AbstractServletClient extends HttpServlet { protected void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - RequestTrans reqtrans = new RequestTrans(request, response); + RequestTrans reqtrans = new RequestTrans(request, response, getPathInfo(request)); try { // get the character encoding @@ -225,7 +225,7 @@ public abstract class AbstractServletClient extends HttpServlet { String nextPart = reqCookies[i].getValue(); if (sessionCookieName.equals(nextKey)) { - reqtrans.session = nextPart; + reqtrans.setSession(nextPart); } else { reqtrans.set(nextKey, nextPart); } @@ -301,9 +301,6 @@ public abstract class AbstractServletClient extends HttpServlet { reqtrans.set("authorization", authorization); } - // response.setHeader ("Server", "Helma/"+helma.main.Server.version); - reqtrans.path = getPathInfo(request); - ResponseTrans restrans = getApplication().execute(reqtrans); // if the response was already written and committed by the application @@ -559,10 +556,10 @@ public abstract class AbstractServletClient extends HttpServlet { addIPAddress(b, request.getRemoteAddr()); addIPAddress(b, request.getHeader("X-Forwarded-For")); addIPAddress(b, request.getHeader("Client-ip")); - if (reqtrans.session == null || !reqtrans.session.startsWith(b.toString())) { + if (reqtrans.getSession() == null || !reqtrans.getSession().startsWith(b.toString())) { response.addCookie(createSessionCookie(b, reqtrans, domain)); } - } else if (reqtrans.session == null) { + } else if (reqtrans.getSession() == null) { response.addCookie(createSessionCookie(new StringBuffer(), reqtrans, domain)); } } @@ -581,8 +578,8 @@ public abstract class AbstractServletClient extends HttpServlet { b.append (Long.toString(Math.round(Math.random() * Long.MAX_VALUE) - System.currentTimeMillis(), 36)); - reqtrans.session = b.toString(); - Cookie cookie = new Cookie(sessionCookieName, reqtrans.session); + reqtrans.setSession(b.toString()); + Cookie cookie = new Cookie(sessionCookieName, reqtrans.getSession()); cookie.setPath("/");