message = start(path);
} else if (command.equals("/stop")) {
message = stop(path);
+ } else if (command.equals("/findleaks")) {
+ message = findleaks();
} else {
// Try GET
doGet(request,response);
args[4] = newNonce;
writer.print(MessageFormat.format(UPLOAD_SECTION, args));
+ // Diagnostics section
+ args = new Object[6];
+ args[0] = sm.getString("htmlManagerServlet.diagnosticsTitle");
+ args[1] = sm.getString("htmlManagerServlet.diagnosticsLeak");
+ args[2] = response.encodeURL(
+ request.getContextPath() + "/html/findleaks");
+ args[3] = newNonce;
+ args[4] = sm.getString("htmlManagerServlet.diagnosticsLeakWarning");
+ args[5] = sm.getString("htmlManagerServlet.diagnosticsLeakButton");
+ writer.print(MessageFormat.format(DIAGNOSTICS_SECTION, args));
+
// Server Header Section
args = new Object[7];
args[0] = sm.getString("htmlManagerServlet.serverTitle");
}
/**
+ * Find potential memory leaks caused by web application reload.
+ *
+ * @see ManagerServlet#findleaks(PrintWriter)
+ *
+ * @return message String
+ */
+ protected String findleaks() {
+
+ StringBuilder msg = new StringBuilder();
+
+ StringWriter stringWriter = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(stringWriter);
+
+ super.findleaks(printWriter);
+
+ if (stringWriter.getBuffer().length() > 0) {
+ msg.append(sm.getString("htmlManagerServlet.findleaksList"));
+ msg.append(stringWriter.toString());
+ } else {
+ msg.append(sm.getString("htmlManagerServlet.findleaksNone"));
+ }
+
+ return msg.toString();
+ }
+
+
+ /**
* @see javax.servlet.Servlet#getServletInfo()
*/
@Override
" <td class=\"row-left\" bgcolor=\"{13}\">\n" +
" <form method=\"POST\" action=\"{8}\">\n" +
" <small>\n" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <input type=\"submit\" value=\"{9}\"> {10} <input type=\"text\" name=\"idle\" size=\"5\" value=\"{11}\"> {12} \n" +
" </small>\n" +
" </form>\n" +
" <td class=\"row-left\" bgcolor=\"{13}\">\n" +
" <small>{1}</small> \n" +
" <form class=\"inline\" method=\"POST\" action=\"{2}\">" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <small><input type=\"submit\" value=\"{3}\"></small>" +
" </form>\n" +
" <form class=\"inline\" method=\"POST\" action=\"{4}\">" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <small><input type=\"submit\" value=\"{5}\"></small>" +
" </form>\n" +
" <form class=\"inline\" method=\"POST\" action=\"{6}\">" +
" <td class=\"row-left\" bgcolor=\"{13}\">\n" +
" <form method=\"POST\" action=\"{8}\">\n" +
" <small>\n" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <input type=\"submit\" value=\"{9}\"> {10} <input type=\"text\" name=\"idle\" size=\"5\" value=\"{11}\"> {12} \n" +
" </small>\n" +
" </form>\n" +
private static final String STOPPED_DEPLOYED_APPS_ROW_BUTTON_SECTION =
" <td class=\"row-left\" bgcolor=\"{13}\" rowspan=\"2\">\n" +
" <form class=\"inline\" method=\"POST\" action=\"{0}\">" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <small><input type=\"submit\" value=\"{1}\"></small>" +
" </form>\n" +
" <small>{3}</small> \n" +
" <small>{5}</small> \n" +
" <form class=\"inline\" method=\"POST\" action=\"{6}\">" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <small><input type=\"submit\" value=\"{7}\"></small>" +
" </form>\n" +
" </td>\n" +
" <td class=\"row-left\" bgcolor=\"{13}\" rowspan=\"2\">\n" +
" <small>{1}</small> \n" +
" <form class=\"inline\" method=\"POST\" action=\"{2}\">" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <small><input type=\"submit\" value=\"{3}\"></small>" +
" </form>\n" +
" <form class=\"inline\" method=\"POST\" action=\"{4}\">" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <small><input type=\"submit\" value=\"{5}\"></small>" +
" </form>\n" +
" <small>{7}</small> \n" +
private static final String STOPPED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION =
" <td class=\"row-left\" bgcolor=\"{13}\" rowspan=\"2\">\n" +
" <form class=\"inline\" method=\"POST\" action=\"{0}\">" +
- " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\"" +
+ " <input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{14}\">" +
" <small><input type=\"submit\" value=\"{1}\"></small>" +
" </form>\n" +
" <small>{3}</small> \n" +
"<tr>\n" +
" <td colspan=\"2\">\n" +
"<form method=\"post\" action=\"{2}\">\n" +
- "<input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{7}\"" +
+ "<input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{7}\" >" +
"<table cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td class=\"row-right\">\n" +
"<br>\n" +
"\n";
+ private static final String DIAGNOSTICS_SECTION =
+ "<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
+ "<tr>\n" +
+ " <td colspan=\"2\" class=\"title\">{0}</td>\n" +
+ "</tr>\n" +
+ "<tr>\n" +
+ " <td colspan=\"2\" class=\"header-left\"><small>{1}</small></td>\n" +
+ "</tr>\n" +
+ "<tr>\n" +
+ " <td colspan=\"2\">\n" +
+ "<form method=\"post\" action=\"{2}\">\n" +
+ "<input type=\"hidden\" name=\"" + NONCE_REQUEST + "\" value=\"{3}\" >" +
+ "<table cellspacing=\"0\" cellpadding=\"3\">\n" +
+ "<tr>\n" +
+ " <td class=\"row-left\">\n" +
+ " <input type=\"submit\" value=\"{5}\">\n" +
+ " </td>\n" +
+ " <td class=\"row-left\">\n" +
+ " <small>{4}</small>\n" +
+ " </td>\n" +
+ "</tr>\n" +
+ "</table>\n" +
+ "</form>\n" +
+ "</td>\n" +
+ "</tr>\n" +
+ "</table>\n" +
+ "<br>";
}
htmlManagerServlet.deployUploadNoFile=FAIL - File upload failed, no file
htmlManagerServlet.deployUploadWarExists=FAIL - War file \"{0}\" already exists on server
htmlManagerServlet.deployWar=WAR or Directory URL:
+htmlManagerServlet.diagnosticsLeak=Check to see if a web application has caused a memory leak on reload
+htmlManagerServlet.diagnosticsLeakButton=Find leaks
+htmlManagerServlet.diagnosticsLeakWarning=This diagnostic check will trigger a full garbage collection. Use it with extreme caution on production systems.
+htmlManagerServlet.diagnosticsTitle=Diagnostics
+htmlManagerServlet.findleaksList=The following web applications appear to have triggered a memory leak on reload (use a profiler to confirm):\n
+htmlManagerServlet.findleaksNone=No web applications appear to have triggered a memory leak on reload.
htmlManagerServlet.list=List Applications
htmlManagerServlet.manager=Manager
htmlManagerServlet.messageLabel=Message:
managerServlet.deployFailed=FAIL - Failed to deploy application at context path {0}
managerServlet.deployedButNotStarted=FAIL - Deployed application at context path {0} but context failed to start
managerServlet.exception=FAIL - Encountered exception {0}
+managerServlet.findleaksFail=FAIL - Find leaks failed: Host not instance of StandardHost
managerServlet.invalidPath=FAIL - Invalid context path {0} was specified
managerServlet.invalidWar=FAIL - Invalid application URL {0} was specified
managerServlet.listed=OK - Listed applications for virtual host {0}