You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2004/06/11 21:09:07 UTC
cvs commit: ws-axis/java/src/org/apache/axis/handlers/soap SOAPService.java
dims 2004/06/11 12:09:07
Modified: java/src/org/apache/axis/transport/http AdminServlet.java
AxisServletBase.java
java/src/org/apache/axis MessageContext.java
java/src/org/apache/axis/i18n resource.properties
java/src/org/apache/axis/handlers/soap SOAPService.java
Log:
Fix for AXIS-1389 - Ability to Suspend and Resume Specific Services
Notes:
- you need to switch on axis.development.system flag either in AdminServlet's init-param or in server-config.wsdd
- Updated the AdminServlet page to display list of current services and links to suspend/resume.
Revision Changes Path
1.27 +56 -1 ws-axis/java/src/org/apache/axis/transport/http/AdminServlet.java
Index: AdminServlet.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/AdminServlet.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- AdminServlet.java 25 Feb 2004 14:02:45 -0000 1.26
+++ AdminServlet.java 11 Jun 2004 19:09:07 -0000 1.27
@@ -19,12 +19,19 @@
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.server.AxisServer;
import org.apache.axis.utils.Messages;
+import org.apache.axis.AxisFault;
+import org.apache.axis.ConfigurationException;
+import org.apache.axis.handlers.soap.SOAPService;
+import org.apache.axis.description.ServiceDesc;
import org.apache.commons.logging.Log;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
import java.io.IOException;
+import java.util.Iterator;
+import java.util.ArrayList;
/**
* Proof-of-concept "management" servlet for Axis.
@@ -74,7 +81,19 @@
else if (cmd.equals("stop")) {
log.info(Messages.getMessage("adminServiceStop", callerIP));
server.stop();
- }
+ }
+ else if (cmd.equals("suspend")) {
+ String name = request.getParameter("service");
+ log.info(Messages.getMessage("adminServiceSuspend", name, callerIP));
+ SOAPService service = server.getConfig().getService(new QName("",name));
+ service.stop();
+ }
+ else if (cmd.equals("resume")) {
+ String name = request.getParameter("service");
+ log.info(Messages.getMessage("adminServiceResume", name, callerIP));
+ SOAPService service = server.getConfig().getService(new QName("",name));
+ service.start();
+ }
} else {
//in production we log a hostile probe. Remember: logs can be
//used for DoS attacks themselves.
@@ -84,15 +103,51 @@
// display status
if (server.isRunning()) {
+ buffer.append("<H2>");
buffer.append(Messages.getMessage("serverRun00"));
+ buffer.append("</H2>");
}
else {
+ buffer.append("<H2>");
buffer.append(Messages.getMessage("serverStop00"));
+ buffer.append("</H2>");
}
//add commands
if(isDevelopment()) {
buffer.append("<p><a href=\"AdminServlet?cmd=start\">start server</a>\n");
buffer.append("<p><a href=\"AdminServlet?cmd=stop\">stop server</a>\n");
+
+ Iterator i;
+ try {
+ i = server.getConfig().getDeployedServices();
+ } catch (ConfigurationException configException) {
+ //turn any internal configuration exceptions back into axis faults
+ //if that is what they are
+ if(configException.getContainedException() instanceof AxisFault) {
+ throw (AxisFault) configException.getContainedException();
+ } else {
+ throw configException;
+ }
+ }
+
+ buffer.append("<p><h2>Services</h2>");
+ buffer.append("<ul>");
+ while (i.hasNext()) {
+ ServiceDesc sd = (ServiceDesc)i.next();
+ StringBuffer sb = new StringBuffer();
+ sb.append("<li>");
+ String name = sd.getName();
+ sb.append(name);
+ SOAPService service = server.getConfig().getService(new QName("",name));
+ if(service.isRunning()) {
+ sb.append(" <a href=\"AdminServlet?cmd=suspend&service=" + name + "\">suspend</a>\n");
+ } else {
+ sb.append(" <a href=\"AdminServlet?cmd=resume&service=" + name + "\">resume</a>\n");
+ }
+ sb.append("</li>");
+ buffer.append(sb.toString());
+ }
+ buffer.append("</ul>");
}
//print load
buffer.append("<p>");
1.26 +6 -0 ws-axis/java/src/org/apache/axis/transport/http/AxisServletBase.java
Index: AxisServletBase.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/AxisServletBase.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- AxisServletBase.java 25 Feb 2004 14:02:45 -0000 1.25
+++ AxisServletBase.java 11 Jun 2004 19:09:07 -0000 1.26
@@ -366,6 +366,12 @@
if (value == null)
value = context.getInitParameter(param);
+ try {
+ AxisServer engine = getEngine(this);
+ if (value == null && engine != null)
+ value = (String) engine.getOption(param);
+ } catch (AxisFault axisFault) {
+ }
return (value != null) ? value : dephault;
}
1.144 +3 -0 ws-axis/java/src/org/apache/axis/MessageContext.java
Index: MessageContext.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/MessageContext.java,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -r1.143 -r1.144
--- MessageContext.java 26 Apr 2004 11:51:43 -0000 1.143
+++ MessageContext.java 11 Jun 2004 19:09:07 -0000 1.144
@@ -792,6 +792,9 @@
log.debug("MessageContext: setServiceHandler("+sh+")");
serviceHandler = sh;
if (sh != null) {
+ if(!sh.isRunning()) {
+ throw new AxisFault(Messages.getMessage("disabled00"));
+ }
targetService = sh.getName();
SOAPService service = sh;
TypeMappingRegistry tmr = service.getTypeMappingRegistry();
1.88 +2 -0 ws-axis/java/src/org/apache/axis/i18n/resource.properties
Index: resource.properties
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/i18n/resource.properties,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -r1.87 -r1.88
--- resource.properties 8 Jun 2004 19:44:56 -0000 1.87
+++ resource.properties 11 Jun 2004 19:09:07 -0000 1.88
@@ -21,6 +21,8 @@
adminServiceLoad=Current load = {0}
adminServiceStart=Starting service in response to admin request from {0}
adminServiceStop=Stopping service in response to admin request from {0}
+adminServiceSuspend=Starting {0} service in response to admin request from {1}
+adminServiceResume=Stopping {0} service in response to admin request from {1}
auth00=User ''{0}'' authenticated to server
auth01=User ''{0}'' authorized to ''{1}''
1.117 +14 -2 ws-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java
Index: SOAPService.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -r1.116 -r1.117
--- SOAPService.java 25 May 2004 19:41:44 -0000 1.116
+++ SOAPService.java 11 Jun 2004 19:09:07 -0000 1.117
@@ -114,6 +114,8 @@
*/
static private Hashtable sessions = new Hashtable();
+ private boolean isRunning = true;
+
/**
* Add this passed in Session to this Service's list of sessions
*/
@@ -432,18 +434,28 @@
*********************************************************************
*/
- /** Placeholder for "enable this service" method
+ /** Placeholder for "resume this service" method
*/
public void start()
{
+ isRunning = true;
}
- /** Placeholder for "disable this service" method
+ /** Placeholder for "suspend this service" method
*/
public void stop()
{
+ isRunning = false;
}
+ /**
+ * Is this service suspended?
+ * @return
+ */
+ public boolean isRunning() {
+ return isRunning;
+ }
+
/**
* Make this service available on a particular transport
*/