Index: java/org/apache/catalina/ant/catalina.tasks
===================================================================
--- java/org/apache/catalina/ant/catalina.tasks (revision 1754315)
+++ java/org/apache/catalina/ant/catalina.tasks (working copy)
@@ -20,6 +20,7 @@
reload=org.apache.catalina.ant.ReloadTask
stop=org.apache.catalina.ant.StopTask
undeploy=org.apache.catalina.ant.UndeployTask
+redeploy=org.apache.catalina.ant.RedeployTask
resources=org.apache.catalina.ant.ResourcesTask
sessions=org.apache.catalina.ant.SessionsTask
validator=org.apache.catalina.ant.ValidatorTask
Index: java/org/apache/catalina/manager/HTMLManagerServlet.java
===================================================================
--- java/org/apache/catalina/manager/HTMLManagerServlet.java (revision 1754315)
+++ java/org/apache/catalina/manager/HTMLManagerServlet.java (working copy)
@@ -147,7 +147,7 @@
} else if (command.equals("/upload") || command.equals("/deploy") ||
command.equals("/reload") || command.equals("/undeploy") ||
command.equals("/expire") || command.equals("/start") ||
- command.equals("/stop")) {
+ command.equals("/stop") || command.equals("/redeploy") ) {
message =
smClient.getString("managerServlet.postCommand", command);
} else {
@@ -209,6 +209,8 @@
smClient);
} else if (command.equals("/reload")) {
message = reload(cn, smClient);
+ } else if (command.equals("/redeploy")) {
+ message = redeploy(cn, smClient);
} else if (command.equals("/undeploy")) {
message = undeploy(cn, smClient);
} else if (command.equals("/expire")) {
@@ -397,6 +399,7 @@
String appsStart = smClient.getString("htmlManagerServlet.appsStart");
String appsStop = smClient.getString("htmlManagerServlet.appsStop");
String appsReload = smClient.getString("htmlManagerServlet.appsReload");
+ String appsRedeploy = smClient.getString("htmlManagerServlet.appsRedeploy");
String appsUndeploy =
smClient.getString("htmlManagerServlet.appsUndeploy");
String appsExpire = smClient.getString("htmlManagerServlet.appsExpire");
@@ -472,7 +475,7 @@
writer.print
(MessageFormat.format(APPS_ROW_DETAILS_SECTION, args));
- args = new Object[14];
+ args = new Object[16];
args[0] = RequestUtil.filter(response.encodeURL(request
.getContextPath() + "/html/start?" + pathVersion));
args[1] = appsStart;
@@ -486,16 +489,19 @@
.getContextPath() + "/html/undeploy?" + pathVersion));
args[7] = appsUndeploy;
args[8] = RequestUtil.filter(response.encodeURL(request
+ .getContextPath() + "/html/redeploy?" + pathVersion));
+ args[9] = appsRedeploy;
+ args[10] = RequestUtil.filter(response.encodeURL(request
.getContextPath() + "/html/expire?" + pathVersion));
- args[9] = appsExpire;
- args[10] = smClient.getString("htmlManagerServlet.expire.explain");
+ args[11] = appsExpire;
+ args[12] = smClient.getString("htmlManagerServlet.expire.explain");
if (manager == null) {
- args[11] = smClient.getString("htmlManagerServlet.noManager");
+ args[13] = smClient.getString("htmlManagerServlet.noManager");
} else {
- args[11] = Integer.valueOf(ctxt.getSessionTimeout());
+ args[13] = Integer.valueOf(ctxt.getSessionTimeout());
}
- args[12] = smClient.getString("htmlManagerServlet.expire.unit");
- args[13] = highlightColor;
+ args[14] = smClient.getString("htmlManagerServlet.expire.unit");
+ args[15] = highlightColor;
if (ctxt.getName().equals(this.context.getName())) {
writer.print(MessageFormat.format(
@@ -610,6 +616,26 @@
}
/**
+ * Redeploy the web application at the specified context path.
+ *
+ * @see ManagerServlet#redeploy(PrintWriter, ContextName, StringManager)
+ *
+ * @param cn Name of the application to be redeployed
+ * @param smClient StringManager for the client's locale
+ * @return message String
+ */
+ protected String redeploy(ContextName cn, StringManager smClient) {
+
+ StringWriter stringWriter = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(stringWriter);
+
+ super.redeploy(printWriter, cn, smClient);
+
+ return stringWriter.toString();
+ }
+
+
+ /**
* Undeploy the web application at the specified context path.
*
* @see ManagerServlet#undeploy(PrintWriter, ContextName, StringManager)
@@ -1114,19 +1140,20 @@
"{5}\n";
private static final String MANAGER_APP_ROW_BUTTON_SECTION =
- "
\n" +
+ " | \n" +
" \n" +
" {1} \n" +
" {3} \n" +
" {5} \n" +
" {7} \n" +
+ " {9} \n" +
" \n" +
" | \n" +
"\n" +
- " \n" +
- " |
\n";
private static final String STARTED_DEPLOYED_APPS_ROW_BUTTON_SECTION =
- " \n" +
+ " | \n" +
" {1} \n" +
" \n" +
+ " \n" +
" | \n" +
" \n" +
- " \n" +
- " |
\n";
private static final String STOPPED_DEPLOYED_APPS_ROW_BUTTON_SECTION =
- " \n" +
+ " | \n" +
" " +
" " +
" \n" +
" {3} \n" +
" {5} \n" +
- " " +
- " " +
+ " {7} \n" +
+ " " +
+ " " +
" \n" +
" | \n" +
"\n
\n";
@@ -1177,13 +1208,16 @@
" " +
" " +
" \n" +
- " {7} \n" +
+ " " +
+ " " +
+ " \n" +
+ " {9} \n" +
" \n" +
" \n" +
- " \n" +
- " \n" +
+ " \n" +
+ " \n" +
" \n" +
- " {10} {12} \n" +
+ " {12} {14} \n" +
" \n" +
" \n" +
" | \n" +
@@ -1190,7 +1224,7 @@
" |
\n";
private static final String STOPPED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION =
- " \n" +
+ " | \n" +
" " +
" " +
" \n" +
@@ -1197,6 +1231,7 @@
" {3} \n" +
" {5} \n" +
" {7} \n" +
+ " {9} \n" +
" | \n" +
"\n
\n";
Index: java/org/apache/catalina/manager/LocalStrings.properties
===================================================================
--- java/org/apache/catalina/manager/LocalStrings.properties (revision 1754315)
+++ java/org/apache/catalina/manager/LocalStrings.properties (working copy)
@@ -17,6 +17,7 @@
htmlManagerServlet.appsName=Display Name
htmlManagerServlet.appsPath=Path
htmlManagerServlet.appsReload=Reload
+htmlManagerServlet.appsRedeploy=Redeploy
htmlManagerServlet.appsUndeploy=Undeploy
htmlManagerServlet.appsVersion=Version
htmlManagerServlet.appsExpire=Expire sessions
@@ -97,6 +98,7 @@
managerServlet.objectNameFail=FAIL - Unable to register object name [{0}] for Manager Servlet
managerServlet.postCommand=FAIL - Tried to use command {0} via a GET request but POST is required
managerServlet.reloaded=OK - Reloaded application at context path {0}
+managerServlet.redeployed=OK - Redeployed application at context path {0}
managerServlet.resourcesAll=OK - Listed global resources of all types
managerServlet.resourcesType=OK - Listed global resources of type {0}
managerServlet.saveFail=FAIL - Configuration save failed: {0}
Index: java/org/apache/catalina/manager/ManagerServlet.java
===================================================================
--- java/org/apache/catalina/manager/ManagerServlet.java (revision 1754315)
+++ java/org/apache/catalina/manager/ManagerServlet.java (working copy)
@@ -359,6 +359,8 @@
stop(writer, cn, smClient);
} else if (command.equals("/undeploy")) {
undeploy(writer, cn, smClient);
+ } else if (command.equals("/redeploy")) {
+ redeploy(writer, cn, smClient);
} else if (command.equals("/findleaks")) {
findleaks(statusLine, writer, smClient);
} else if (command.equals("/vminfo")) {
@@ -1006,7 +1008,6 @@
}
-
/**
* Render a list of available global JNDI resources.
*
@@ -1425,6 +1426,67 @@
}
+ /**
+ * Redeploy the web application at the specified context path.
+ *
+ * @param writer Writer to render to
+ * @param cn Name of the application to be redeployed
+ */
+ protected void redeploy(PrintWriter writer, ContextName cn,
+ StringManager smClient) {
+
+ if (debug >= 1)
+ log("redeploy: Redeploying web application '" + cn + "'");
+
+ if (!validateContextName(cn, writer, smClient)) {
+ return;
+ }
+
+ String name = cn.getName();
+ String displayPath = cn.getDisplayName();
+
+ try {
+
+ // Validate the Context of the specified application
+ Context context = (Context) host.findChild(name);
+ if (context == null) {
+ writer.println(smClient.getString("managerServlet.noContext",
+ RequestUtil.filter(displayPath)));
+ return;
+ }
+
+ if (!isDeployed(name)) {
+ writer.println(smClient.getString("managerServlet.notDeployed",
+ RequestUtil.filter(displayPath)));
+ return;
+ }
+
+ if (isServiced(name)) {
+ writer.println(smClient.getString("managerServlet.inService", displayPath));
+ } else {
+ addServiced(name);
+ try {
+ // Undeploy without touching files
+ undeployInPlace(name);
+ // Perform redeployment
+ check(name);
+ } finally {
+ removeServiced(name);
+ }
+ }
+
+ writer.println(smClient.getString("managerServlet.redeployed",
+ cn.getDisplayName()));
+ } catch (Throwable t) {
+ ExceptionUtils.handleThrowable(t);
+ log("ManagerServlet.redeploy[" + cn.getDisplayName() + "]", t);
+ writer.println(smClient.getString("managerServlet.exception",
+ t.toString()));
+ }
+
+ }
+
+
// -------------------------------------------------------- Support Methods
@@ -1453,6 +1515,17 @@
/**
+ * Invoke the undeploy method on the deployer.
+ */
+ protected void undeployInPlace(String name)
+ throws Exception {
+ String[] params = { name };
+ String[] signature = { "java.lang.String" };
+ mBeanServer.invoke(oname, "undeploy", params, signature);
+ }
+
+
+ /**
* Invoke the isServiced method on the deployer.
*/
protected boolean isServiced(String name)
Index: java/org/apache/catalina/startup/HostConfig.java
===================================================================
--- java/org/apache/catalina/startup/HostConfig.java (revision 1754315)
+++ java/org/apache/catalina/startup/HostConfig.java (working copy)
@@ -1667,6 +1667,20 @@
}
/**
+ * Undeploy a specific web application. If autoDeploy is enabled, this
+ * method does nothing to prevent the web application from being
+ * automatically deployed again.
+ *
+ * @param name The name of the web application to undeploy
+ */
+ public void undeploy(String name){
+ DeployedApplication app = deployed.get(name);
+ if(app != null){
+ undeploy(app);
+ }
+ }
+
+ /**
* Add a new Context to be managed by us.
* Entry point for the admin webapp, and other JMX Context controllers.
*/
Index: java/org/apache/catalina/startup/mbeans-descriptors.xml
===================================================================
--- java/org/apache/catalina/startup/mbeans-descriptors.xml (revision 1754315)
+++ java/org/apache/catalina/startup/mbeans-descriptors.xml (working copy)
@@ -111,6 +111,15 @@
returnType="void">
+
+
+
+
+
+
+
+