Author: markt
Date: Mon Feb 22 20:19:15 2016
New Revision: 1731734
URL: http://svn.apache.org/viewvc?rev=1731734&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=48674
Implement an option within the Host Manager web pplication to persist the
current configuration.
Based on a patch by Coty Sutherland.
Modified:
tomcat/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
tomcat/trunk/java/org/apache/catalina/manager/host/LocalStrings.properties
tomcat/trunk/webapps/docs/changelog.xml
Modified:
tomcat/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java?rev=1731734&r1=1731733&r2=1731734&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
Mon Feb 22 20:19:15 2016
@@ -94,7 +94,8 @@ public final class HTMLHostManagerServle
} else if (command.equals("/list")) {
// Nothing to do - always generate list
} else if (command.equals("/add") || command.equals("/remove") ||
- command.equals("/start") || command.equals("/stop")) {
+ command.equals("/start") || command.equals("/stop") ||
+ command.equals("/persist")) {
message = smClient.getString(
"hostManagerServlet.postCommand", command);
} else {
@@ -143,6 +144,8 @@ public final class HTMLHostManagerServle
message = start(name, smClient);
} else if (command.equals("/stop")) {
message = stop(name, smClient);
+ } else if (command.equals("/persist")) {
+ message = persist(smClient);
} else {
//Try GET
doGet(request, response);
@@ -227,6 +230,22 @@ public final class HTMLHostManagerServle
/**
+ * Persist the current configuration to server.xml.
+ *
+ * @param smClient i18n resources localized for the client
+ */
+ protected String persist(StringManager smClient) {
+
+ StringWriter stringWriter = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(stringWriter);
+
+ super.persist(printWriter, smClient);
+
+ return stringWriter.toString();
+ }
+
+
+ /**
* Render a HTML list of the currently active Contexts in our virtual host,
* and memory and server status information.
*
@@ -341,7 +360,7 @@ public final class HTMLHostManagerServle
writer.print
(MessageFormat.format(HOSTS_ROW_DETAILS_SECTION, args));
- args = new Object[4];
+ args = new Object[6];
if (host.getState().isAvailable()) {
args[0] = response.encodeURL
(request.getContextPath() +
@@ -362,10 +381,10 @@ public final class HTMLHostManagerServle
args[3] = hostsRemove;
if (host == this.installedHost) {
writer.print(MessageFormat.format(
- MANAGER_HOST_ROW_BUTTON_SECTION, args));
+ MANAGER_HOST_ROW_BUTTON_SECTION, args));
} else {
writer.print(MessageFormat.format(
- HOSTS_ROW_BUTTON_SECTION, args));
+ HOSTS_ROW_BUTTON_SECTION, args));
}
}
}
@@ -413,6 +432,14 @@ public final class HTMLHostManagerServle
args[0] = smClient.getString("htmlHostManagerServlet.addButton");
writer.print(MessageFormat.format(ADD_SECTION_END, args));
+ // Persist Configuration Section
+ args = new Object[4];
+ args[0] = smClient.getString("htmlHostManagerServlet.persistTitle");
+ args[1] = response.encodeURL(request.getContextPath() +
"/html/persist");
+ args[2] =
smClient.getString("htmlHostManagerServlet.persistAllButton");
+ args[3] = smClient.getString("htmlHostManagerServlet.persistAll");
+ writer.print(MessageFormat.format(PERSIST_SECTION, args));
+
// Server Header Section
args = new Object[7];
args[0] = smClient.getString("htmlHostManagerServlet.serverTitle");
@@ -483,6 +510,9 @@ public final class HTMLHostManagerServle
" <form class=\"inline\" method=\"POST\" action=\"{2}\">" +
" <small><input type=\"submit\" value=\"{3}\"></small>" +
" </form>\n" +
+ " <form class=\"inline\" method=\"POST\" action=\"{4}\">" +
+ " <small><input type=\"submit\" value=\"{5}\"></small>" +
+ " </form>\n" +
" </td>\n" +
"</tr>\n";
@@ -552,4 +582,20 @@ public final class HTMLHostManagerServle
"<br>\n" +
"\n";
+ private static final String PERSIST_SECTION =
+ "<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
+ "<tr>\n" +
+ " <td class=\"title\">{0}</td>\n" +
+ "</tr>\n" +
+ "<tr>\n" +
+ " <td class=\"row-left\">\n" +
+ " <form class=\"inline\" method=\"POST\" action=\"{1}\">" +
+ " <small><input type=\"submit\" value=\"{2}\"></small>" +
+ " </form> {3}\n" +
+ " </td>\n" +
+ "</tr>\n" +
+ "</table>\n" +
+ "<br>\n" +
+ "\n";
+
}
Modified:
tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java?rev=1731734&r1=1731733&r2=1731734&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
Mon Feb 22 20:19:15 2016
@@ -20,10 +20,14 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
+import java.lang.management.ManagementFactory;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.StringTokenizer;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
@@ -42,7 +46,6 @@ import org.apache.catalina.startup.HostC
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.res.StringManager;
-
/**
* Servlet that enables remote management of the virtual hosts installed
* on the server. Normally, this functionality will be protected by
@@ -218,6 +221,8 @@ public class HostManagerServlet
start(writer, name, smClient);
} else if (command.equals("/stop")) {
stop(writer, name, smClient);
+ } else if (command.equals("/persist")) {
+ persist(writer, smClient);
} else {
writer.println(sm.getString("hostManagerServlet.unknownCommand",
command));
@@ -229,7 +234,6 @@ public class HostManagerServlet
}
-
/**
* Add host with the given parameters.
*
@@ -652,8 +656,39 @@ public class HostManagerServlet
}
- // -------------------------------------------------------- Support Methods
+ /**
+ * Persist the current configuration to server.xml.
+ *
+ * @param writer Writer to render to
+ * @param smClient i18n resources localized for the client
+ */
+ protected void persist(PrintWriter writer, StringManager smClient) {
+
+ if (debug >= 1) {
+ log(sm.getString("hostManagerServlet.persist"));
+ }
+ try {
+ MBeanServer platformMBeanServer =
ManagementFactory.getPlatformMBeanServer();
+ ObjectName oname = new ObjectName(engine.getDomain() +
":type=StoreConfig");
+ platformMBeanServer.invoke(oname, "storeConfig", null, null);
+ writer.println(smClient.getString("hostManagerServlet.persisted"));
+ } catch (Exception e) {
+
getServletContext().log(sm.getString("hostManagerServlet.persistFailed"), e);
+
writer.println(smClient.getString("hostManagerServlet.persistFailed"));
+ // catch InstanceNotFoundException when StoreConfig is not enabled
instead of printing
+ // the failure message
+ if (e instanceof InstanceNotFoundException) {
+ writer.println("Please enable StoreConfig to use this
feature.");
+ } else {
+
writer.println(smClient.getString("hostManagerServlet.exception",
e.toString()));
+ }
+ return;
+ }
+ }
+
+
+ // -------------------------------------------------------- Support Methods
/**
* Get config base.
Modified:
tomcat/trunk/java/org/apache/catalina/manager/host/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/host/LocalStrings.properties?rev=1731734&r1=1731733&r2=1731734&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/manager/host/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/catalina/manager/host/LocalStrings.properties
Mon Feb 22 20:19:15 2016
@@ -44,6 +44,9 @@ hostManagerServlet.remove=remove: Removi
hostManagerServlet.list=list: Listing hosts for engine [{0}]
hostManagerServlet.start=start: Starting host with name [{0}]
hostManagerServlet.stop=stop: Stopping host with name [{0}]
+hostManagerServlet.persist=persist: Persisting current configuration
+hostManagerServlet.persisted=OK - Configuration persisted
+hostManagerServlet.persistFailed=FAIL - Failed to persist configuration
htmlHostManagerServlet.title=Tomcat Virtual Host Manager
htmlHostManagerServlet.messageLabel=Message:
@@ -59,6 +62,7 @@ htmlHostManagerServlet.hostTasks=Command
htmlHostManagerServlet.hostsStart=Start
htmlHostManagerServlet.hostsStop=Stop
htmlHostManagerServlet.hostsRemove=Remove
+htmlHostManagerServlet.hostsPersist=Persist
htmlHostManagerServlet.hostThis=Host Manager installed - commands disabled
htmlHostManagerServlet.addTitle=Add Virtual Host
htmlHostManagerServlet.addHost=Host
@@ -79,6 +83,9 @@ htmlHostManagerServlet.serverJVMVendor=J
htmlHostManagerServlet.serverOSName=OS Name
htmlHostManagerServlet.serverOSVersion=OS Version
htmlHostManagerServlet.serverOSArch=OS Architecture
+htmlHostManagerServlet.persistTitle=Persist configuration
+htmlHostManagerServlet.persistAll=Save current configuration (including
virtual hosts) to server.xml and per web application context.xml files
+htmlHostManagerServlet.persistAllButton=All
statusServlet.title=Server Status
statusServlet.complete=Complete Server Status
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1731734&r1=1731733&r2=1731734&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Feb 22 20:19:15 2016
@@ -145,6 +145,11 @@
the WAR if <code>unpackWARs</code> is <code>true</code>. (markt)
</fix>
<fix>
+ <bug>48674</bug>: Implement an option within the Host Manager web
+ application to persist the current configuration. Based on a patch by
+ Coty Sutherland. (markt)
+ </fix>
+ <fix>
<bug>58935</bug>: Remove incorrect references in the documentation to
using <code>jar:file:</code> URLs with the Manager application. (markt)
</fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]