* Remaining public fields in RequestTrans converted to private, final where possible
* Added setters/getters * Improved hashCode() implementation for RequestTrans
This commit is contained in:
parent
3d6da7803d
commit
af84ec19c9
5 changed files with 48 additions and 25 deletions
|
@ -128,7 +128,7 @@ public class RequestBean implements Serializable {
|
||||||
* @return ...
|
* @return ...
|
||||||
*/
|
*/
|
||||||
public String getPath() {
|
public String getPath() {
|
||||||
return req.path;
|
return req.getPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -50,10 +50,10 @@ public class RequestTrans implements Serializable {
|
||||||
final HttpServletResponse response;
|
final HttpServletResponse response;
|
||||||
|
|
||||||
// the uri path of the request
|
// the uri path of the request
|
||||||
public String path;
|
private final String path;
|
||||||
|
|
||||||
// the request's session id
|
// the request's session id
|
||||||
public String session;
|
private String session;
|
||||||
|
|
||||||
// the map of form and cookie data
|
// the map of form and cookie data
|
||||||
private final Map values;
|
private final Map values;
|
||||||
|
@ -78,8 +78,9 @@ public class RequestTrans implements Serializable {
|
||||||
/**
|
/**
|
||||||
* Create a new Request transmitter with an empty data map.
|
* Create a new Request transmitter with an empty data map.
|
||||||
*/
|
*/
|
||||||
public RequestTrans(String method) {
|
public RequestTrans(String method, String path) {
|
||||||
this.method = method;
|
this.method = method;
|
||||||
|
this.path = path;
|
||||||
this.request = null;
|
this.request = null;
|
||||||
this.response = null;
|
this.response = null;
|
||||||
values = new SystemMap();
|
values = new SystemMap();
|
||||||
|
@ -89,10 +90,12 @@ public class RequestTrans implements Serializable {
|
||||||
/**
|
/**
|
||||||
* Create a new request transmitter with the given data map.
|
* 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.method = request.getMethod();
|
||||||
this.request = request;
|
this.request = request;
|
||||||
this.response = response;
|
this.response = response;
|
||||||
|
this.path = path;
|
||||||
values = new SystemMap();
|
values = new SystemMap();
|
||||||
startTime = System.currentTimeMillis();
|
startTime = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
@ -143,7 +146,10 @@ public class RequestTrans implements Serializable {
|
||||||
* detect multiple identic requests.
|
* detect multiple identic requests.
|
||||||
*/
|
*/
|
||||||
public int hashCode() {
|
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);
|
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.
|
* Get the request's action.
|
||||||
*/
|
*/
|
||||||
public synchronized String getAction() {
|
public String getAction() {
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the request's action.
|
* Set the request's action.
|
||||||
*/
|
*/
|
||||||
public synchronized void setAction(String action) {
|
public void setAction(String action) {
|
||||||
this.action = action;
|
this.action = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -620,7 +620,7 @@ public final class Application implements IPathElement, Runnable {
|
||||||
requestCount += 1;
|
requestCount += 1;
|
||||||
|
|
||||||
// get user for this request's session
|
// get user for this request's session
|
||||||
Session session = createSession(req.session);
|
Session session = createSession(req.getSession());
|
||||||
|
|
||||||
session.touch();
|
session.touch();
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,7 @@ public final class RequestEvaluator implements Runnable {
|
||||||
// Transaction name is used for logging etc.
|
// Transaction name is used for logging etc.
|
||||||
StringBuffer txname = new StringBuffer(app.getName());
|
StringBuffer txname = new StringBuffer(app.getName());
|
||||||
txname.append(":").append(req.getMethod().toLowerCase()).append(":");
|
txname.append(":").append(req.getMethod().toLowerCase()).append(":");
|
||||||
txname.append((error == null) ? req.path : "error");
|
txname.append((error == null) ? req.getPath() : "error");
|
||||||
|
|
||||||
// begin transaction
|
// begin transaction
|
||||||
localrtx.begin(txname.toString());
|
localrtx.begin(txname.toString());
|
||||||
|
@ -190,8 +190,8 @@ public final class RequestEvaluator implements Runnable {
|
||||||
if (action == null) {
|
if (action == null) {
|
||||||
throw new RuntimeException(error);
|
throw new RuntimeException(error);
|
||||||
}
|
}
|
||||||
} else if ((req.path == null) ||
|
} else if ((req.getPath() == null) ||
|
||||||
"".equals(req.path.trim())) {
|
"".equals(req.getPath().trim())) {
|
||||||
currentElement = root;
|
currentElement = root;
|
||||||
requestPath.add(null, currentElement);
|
requestPath.add(null, currentElement);
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ public final class RequestEvaluator implements Runnable {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// march down request path...
|
// march down request path...
|
||||||
StringTokenizer st = new StringTokenizer(req.path,
|
StringTokenizer st = new StringTokenizer(req.getPath(),
|
||||||
"/");
|
"/");
|
||||||
int ntokens = st.countTokens();
|
int ntokens = st.countTokens();
|
||||||
|
|
||||||
|
@ -674,7 +674,7 @@ public final class RequestEvaluator implements Runnable {
|
||||||
wait(app.requestTimeout);
|
wait(app.requestTimeout);
|
||||||
|
|
||||||
if (reqtype != NONE) {
|
if (reqtype != NONE) {
|
||||||
app.logEvent("Stopping Thread for Request " + app.getName() + "/" + req.path);
|
app.logEvent("Stopping Thread for Request " + app.getName() + "/" + req.getPath());
|
||||||
stopTransactor();
|
stopTransactor();
|
||||||
res.reset();
|
res.reset();
|
||||||
res.writeErrorReport(app.getName(), "Request timed out");
|
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) {
|
private void initObjects(String functionName, int reqtype, String reqtypeName) {
|
||||||
this.functionName = functionName;
|
this.functionName = functionName;
|
||||||
this.reqtype = reqtype;
|
this.reqtype = reqtype;
|
||||||
req = new RequestTrans(reqtypeName);
|
req = new RequestTrans(reqtypeName, functionName);
|
||||||
req.path = functionName;
|
|
||||||
session = new Session(functionName, app);
|
session = new Session(functionName, app);
|
||||||
res = new ResponseTrans(app, req);
|
res = new ResponseTrans(app, req);
|
||||||
result = null;
|
result = null;
|
||||||
|
|
|
@ -134,7 +134,7 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
protected void service (HttpServletRequest request, HttpServletResponse response)
|
protected void service (HttpServletRequest request, HttpServletResponse response)
|
||||||
throws ServletException, IOException {
|
throws ServletException, IOException {
|
||||||
|
|
||||||
RequestTrans reqtrans = new RequestTrans(request, response);
|
RequestTrans reqtrans = new RequestTrans(request, response, getPathInfo(request));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// get the character encoding
|
// get the character encoding
|
||||||
|
@ -225,7 +225,7 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
String nextPart = reqCookies[i].getValue();
|
String nextPart = reqCookies[i].getValue();
|
||||||
|
|
||||||
if (sessionCookieName.equals(nextKey)) {
|
if (sessionCookieName.equals(nextKey)) {
|
||||||
reqtrans.session = nextPart;
|
reqtrans.setSession(nextPart);
|
||||||
} else {
|
} else {
|
||||||
reqtrans.set(nextKey, nextPart);
|
reqtrans.set(nextKey, nextPart);
|
||||||
}
|
}
|
||||||
|
@ -301,9 +301,6 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
reqtrans.set("authorization", authorization);
|
reqtrans.set("authorization", authorization);
|
||||||
}
|
}
|
||||||
|
|
||||||
// response.setHeader ("Server", "Helma/"+helma.main.Server.version);
|
|
||||||
reqtrans.path = getPathInfo(request);
|
|
||||||
|
|
||||||
ResponseTrans restrans = getApplication().execute(reqtrans);
|
ResponseTrans restrans = getApplication().execute(reqtrans);
|
||||||
|
|
||||||
// if the response was already written and committed by the application
|
// 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.getRemoteAddr());
|
||||||
addIPAddress(b, request.getHeader("X-Forwarded-For"));
|
addIPAddress(b, request.getHeader("X-Forwarded-For"));
|
||||||
addIPAddress(b, request.getHeader("Client-ip"));
|
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));
|
response.addCookie(createSessionCookie(b, reqtrans, domain));
|
||||||
}
|
}
|
||||||
} else if (reqtrans.session == null) {
|
} else if (reqtrans.getSession() == null) {
|
||||||
response.addCookie(createSessionCookie(new StringBuffer(), reqtrans, domain));
|
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) -
|
b.append (Long.toString(Math.round(Math.random() * Long.MAX_VALUE) -
|
||||||
System.currentTimeMillis(), 36));
|
System.currentTimeMillis(), 36));
|
||||||
|
|
||||||
reqtrans.session = b.toString();
|
reqtrans.setSession(b.toString());
|
||||||
Cookie cookie = new Cookie(sessionCookieName, reqtrans.session);
|
Cookie cookie = new Cookie(sessionCookieName, reqtrans.getSession());
|
||||||
|
|
||||||
cookie.setPath("/");
|
cookie.setPath("/");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue