| Method from org.apache.catalina.manager.ManagerServlet Detail: |
protected void addServiced(String name) throws Exception {
String[] params = { name };
String[] signature = { "java.lang.String" };
mBeanServer.invoke(oname, "addServiced", params, signature);
}
Invoke the addServiced method on the deployer. |
protected void check(String name) throws Exception {
String[] params = { name };
String[] signature = { "java.lang.String" };
mBeanServer.invoke(oname, "check", params, signature);
}
Invoke the check method on the deployer. |
public static boolean copy(File src,
File dest) {
boolean result = false;
try {
if( src != null &&
!src.getCanonicalPath().equals(dest.getCanonicalPath()) ) {
result = copyInternal(src, dest, new byte[4096]);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
Copy the specified file or directory to the destination. |
public static boolean copyInternal(File src,
File dest,
byte[] buf) {
boolean result = true;
String files[] = null;
if (src.isDirectory()) {
files = src.list();
result = dest.mkdir();
} else {
files = new String[1];
files[0] = "";
}
if (files == null) {
files = new String[0];
}
for (int i = 0; (i < files.length) && result; i++) {
File fileSrc = new File(src, files[i]);
File fileDest = new File(dest, files[i]);
if (fileSrc.isDirectory()) {
result = copyInternal(fileSrc, fileDest, buf);
} else {
FileInputStream is = null;
FileOutputStream os = null;
try {
is = new FileInputStream(fileSrc);
os = new FileOutputStream(fileDest);
int len = 0;
while (true) {
len = is.read(buf);
if (len == -1)
break;
os.write(buf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
result = false;
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
}
}
}
}
}
return result;
}
Copy the specified file or directory to the destination. |
protected void deploy(PrintWriter writer,
String path,
String tag) {
// Validate the requested context path
if ((path == null) || path.length() == 0 || !path.startsWith("/")) {
writer.println(sm.getString("managerServlet.invalidPath", path));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
// Calculate the base path
File deployedPath = versioned;
if (tag != null) {
deployedPath = new File(deployedPath, tag);
}
// Find the local WAR file
File localWar = new File(deployedPath, getDocBase(path) + ".war");
// Find the local context deployment file (if any)
File localXml = new File(configBase, getConfigFile(path) + ".xml");
// Check if app already exists, or undeploy it if updating
Context context = (Context) host.findChild(path);
if (context != null) {
undeploy(writer, displayPath);
}
// Copy WAR to appBase
try {
if (!isServiced(path)) {
addServiced(path);
try {
copy(localWar, new File(getAppBase(), getDocBase(path) + ".war"));
// Perform new deployment
check(path);
} finally {
removeServiced(path);
}
}
} catch (Exception e) {
log("managerServlet.check[" + displayPath + "]", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
context = (Context) host.findChild(path);
if (context != null && context.getConfigured()) {
writer.println(sm.getString("managerServlet.deployed", displayPath));
} else {
// Something failed
writer.println(sm.getString("managerServlet.deployFailed", displayPath));
}
}
Install an application for the specified path from the specified
web application archive. |
protected synchronized void deploy(PrintWriter writer,
String path,
String tag,
boolean update,
HttpServletRequest request) {
if (debug >= 1) {
log("deploy: Deploying web application at '" + path + "'");
}
// Validate the requested context path
if ((path == null) || path.length() == 0 || !path.startsWith("/")) {
writer.println(sm.getString("managerServlet.invalidPath", path));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
String basename = getDocBase(path);
// Check if app already exists, or undeploy it if updating
Context context = (Context) host.findChild(path);
if (update) {
if (context != null) {
undeploy(writer, displayPath);
}
context = (Context) host.findChild(path);
}
if (context != null) {
writer.println
(sm.getString("managerServlet.alreadyContext",
displayPath));
return;
}
// Calculate the base path
File deployedPath = deployed;
if (tag != null) {
deployedPath = new File(versioned, tag);
deployedPath.mkdirs();
}
// Upload the web application archive to a local WAR file
File localWar = new File(deployedPath, basename + ".war");
if (debug >= 2) {
log("Uploading WAR file to " + localWar);
}
// Copy WAR to appBase
try {
if (!isServiced(path)) {
addServiced(path);
try {
// Upload WAR
uploadWar(request, localWar);
// Copy WAR and XML to the host app base if needed
if (tag != null) {
deployedPath = deployed;
File localWarCopy = new File(deployedPath, basename + ".war");
copy(localWar, localWarCopy);
localWar = localWarCopy;
copy(localWar, new File(getAppBase(), basename + ".war"));
}
// Perform new deployment
check(path);
} finally {
removeServiced(path);
}
}
} catch (Exception e) {
log("managerServlet.check[" + displayPath + "]", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
context = (Context) host.findChild(path);
if (context != null && context.getConfigured()) {
writer.println(sm.getString("managerServlet.deployed", displayPath));
} else {
// Something failed
writer.println(sm.getString("managerServlet.deployFailed", displayPath));
}
}
Deploy a web application archive (included in the current request)
at the specified context path. |
protected void deploy(PrintWriter writer,
String config,
String path,
String war,
boolean update) {
if (config != null && config.length() == 0) {
config = null;
}
if (war != null && war.length() == 0) {
war = null;
}
if (debug >= 1) {
if (config != null && config.length() > 0) {
if (war != null) {
log("install: Installing context configuration at '" +
config + "' from '" + war + "'");
} else {
log("install: Installing context configuration at '" +
config + "'");
}
} else {
if (path != null && path.length() > 0) {
log("install: Installing web application at '" + path +
"' from '" + war + "'");
} else {
log("install: Installing web application from '" + war + "'");
}
}
}
if (path == null || path.length() == 0 || !path.startsWith("/")) {
writer.println(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
return;
}
String displayPath = path;
if("/".equals(path)) {
path = "";
}
// Check if app already exists, or undeploy it if updating
Context context = (Context) host.findChild(path);
if (update) {
if (context != null) {
undeploy(writer, displayPath);
}
context = (Context) host.findChild(path);
}
if (context != null) {
writer.println
(sm.getString("managerServlet.alreadyContext",
displayPath));
return;
}
if (config != null && (config.startsWith("file:"))) {
config = config.substring("file:".length());
}
if (war != null && (war.startsWith("file:"))) {
war = war.substring("file:".length());
}
try {
if (!isServiced(path)) {
addServiced(path);
try {
if (config != null) {
configBase.mkdirs();
copy(new File(config),
new File(configBase, getConfigFile(path) + ".xml"));
}
if (war != null) {
if (war.endsWith(".war")) {
copy(new File(war),
new File(getAppBase(), getDocBase(path) + ".war"));
} else {
copy(new File(war),
new File(getAppBase(), getDocBase(path)));
}
}
// Perform new deployment
check(path);
} finally {
removeServiced(path);
}
}
context = (Context) host.findChild(path);
if (context != null && context.getConfigured()) {
writer.println(sm.getString("managerServlet.deployed", displayPath));
} else {
// Something failed
writer.println(sm.getString("managerServlet.deployFailed", displayPath));
}
} catch (Throwable t) {
log("ManagerServlet.install[" + displayPath + "]", t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
Install an application for the specified path from the specified
web application archive. |
public void destroy() {
; // No actions necessary
}
|
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
// Verify that we were not accessed using the invoker servlet
if (request.getAttribute(Globals.INVOKED_ATTR) != null)
throw new UnavailableException
(sm.getString("managerServlet.cannotInvoke"));
// Identify the request parameters that we need
String command = request.getPathInfo();
if (command == null)
command = request.getServletPath();
String config = request.getParameter("config");
String path = request.getParameter("path");
String type = request.getParameter("type");
String war = request.getParameter("war");
String tag = request.getParameter("tag");
boolean update = false;
if ((request.getParameter("update") != null)
&& (request.getParameter("update").equals("true"))) {
update = true;
}
// Prepare our output writer to generate the response message
response.setContentType("text/plain; charset=" + Constants.CHARSET);
PrintWriter writer = response.getWriter();
// Process the requested command (note - "/deploy" is not listed here)
if (command == null) {
writer.println(sm.getString("managerServlet.noCommand"));
} else if (command.equals("/deploy")) {
if (war != null || config != null) {
deploy(writer, config, path, war, update);
} else {
deploy(writer, path, tag);
}
} else if (command.equals("/install")) {
// Deprecated
deploy(writer, config, path, war, false);
} else if (command.equals("/list")) {
list(writer);
} else if (command.equals("/reload")) {
reload(writer, path);
} else if (command.equals("/remove")) {
// Deprecated
undeploy(writer, path);
} else if (command.equals("/resources")) {
resources(writer, type);
} else if (command.equals("/roles")) {
roles(writer);
} else if (command.equals("/save")) {
save(writer, path);
} else if (command.equals("/serverinfo")) {
serverinfo(writer);
} else if (command.equals("/expire")) {
expireSessions(writer, path, request);
} else if (command.equals("/start")) {
start(writer, path);
} else if (command.equals("/stop")) {
stop(writer, path);
} else if (command.equals("/undeploy")) {
undeploy(writer, path);
} else {
writer.println(sm.getString("managerServlet.unknownCommand",
command));
}
// Finish up the response
writer.flush();
writer.close();
}
Process a GET request for the specified resource. |
public void doPut(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
// Verify that we were not accessed using the invoker servlet
if (request.getAttribute(Globals.INVOKED_ATTR) != null)
throw new UnavailableException
(sm.getString("managerServlet.cannotInvoke"));
// Identify the request parameters that we need
String command = request.getPathInfo();
if (command == null)
command = request.getServletPath();
String path = request.getParameter("path");
String tag = request.getParameter("tag");
boolean update = false;
if ((request.getParameter("update") != null)
&& (request.getParameter("update").equals("true"))) {
update = true;
}
// Prepare our output writer to generate the response message
response.setContentType("text/plain;charset="+Constants.CHARSET);
PrintWriter writer = response.getWriter();
// Process the requested command
if (command == null) {
writer.println(sm.getString("managerServlet.noCommand"));
} else if (command.equals("/deploy")) {
deploy(writer, path, tag, update, request);
} else {
writer.println(sm.getString("managerServlet.unknownCommand",
command));
}
// Finish up the response
writer.flush();
writer.close();
}
Process a PUT request for the specified resource. |
protected void expireSessions(PrintWriter writer,
String path,
HttpServletRequest req) {
int idle = -1;
String idleParam = req.getParameter("idle");
if (idleParam != null) {
try {
idle = Integer.parseInt(idleParam);
} catch (NumberFormatException e) {
log("Could not parse idle parameter to an int: " + idleParam);
}
}
sessions(writer, path, idle);
}
Extract the expiration request parameter |
protected File getAppBase() {
if (appBase != null) {
return appBase;
}
File file = new File(host.getAppBase());
if (!file.isAbsolute())
file = new File(System.getProperty("catalina.base"),
host.getAppBase());
try {
appBase = file.getCanonicalFile();
} catch (IOException e) {
appBase = file;
}
return (appBase);
}
Return a File object representing the "application root" directory
for our associated Host. |
protected String getConfigFile(String path) {
String basename = null;
if (path.equals("")) {
basename = "ROOT";
} else {
basename = path.substring(1).replace('/", '#");
}
return (basename);
}
Given a context path, get the config file name. |
protected String getDocBase(String path) {
String basename = null;
if (path.equals("")) {
basename = "ROOT";
} else {
basename = path.substring(1);
}
return (basename);
}
Given a context path, get the config file name. |
public Wrapper getWrapper() {
// ----------------------------------------------- ContainerServlet Methods
return (this.wrapper);
}
Return the Wrapper with which we are associated. |
public void init() throws ServletException {
// Ensure that our ContainerServlet properties have been set
if ((wrapper == null) || (context == null))
throw new UnavailableException
(sm.getString("managerServlet.noWrapper"));
// Verify that we were not accessed using the invoker servlet
String servletName = getServletConfig().getServletName();
if (servletName == null)
servletName = "";
if (servletName.startsWith("org.apache.catalina.INVOKER."))
throw new UnavailableException
(sm.getString("managerServlet.cannotInvoke"));
// Set our properties from the initialization parameters
String value = null;
try {
value = getServletConfig().getInitParameter("debug");
debug = Integer.parseInt(value);
} catch (Throwable t) {
;
}
// Acquire global JNDI resources if available
Server server = ServerFactory.getServer();
if ((server != null) && (server instanceof StandardServer)) {
global = ((StandardServer) server).getGlobalNamingContext();
}
// Calculate the directory into which we will be deploying applications
versioned = (File) getServletContext().getAttribute
("javax.servlet.context.tempdir");
// Identify the appBase of the owning Host of this Context
// (if any)
String appBase = ((Host) context.getParent()).getAppBase();
deployed = new File(appBase);
if (!deployed.isAbsolute()) {
deployed = new File(System.getProperty("catalina.base"),
appBase);
}
configBase = new File(System.getProperty("catalina.base"), "conf");
Container container = context;
Container host = null;
Container engine = null;
while (container != null) {
if (container instanceof Host)
host = container;
if (container instanceof Engine)
engine = container;
container = container.getParent();
}
if (engine != null) {
configBase = new File(configBase, engine.getName());
}
if (host != null) {
configBase = new File(configBase, host.getName());
}
// Note: The directory must exist for this to work.
// Log debugging messages as necessary
if (debug >= 1) {
log("init: Associated with Deployer '" +
oname + "'");
if (global != null) {
log("init: Global resources are available");
}
}
}
|
protected boolean isDeployed(String name) throws Exception {
String[] params = { name };
String[] signature = { "java.lang.String" };
Boolean result =
(Boolean) mBeanServer.invoke(oname, "isDeployed", params, signature);
return result.booleanValue();
}
Invoke the isDeployed method on the deployer. |
protected boolean isServiced(String name) throws Exception {
String[] params = { name };
String[] signature = { "java.lang.String" };
Boolean result =
(Boolean) mBeanServer.invoke(oname, "isServiced", params, signature);
return result.booleanValue();
}
Invoke the isServiced method on the deployer. |
protected void list(PrintWriter writer) {
if (debug >= 1)
log("list: Listing contexts for virtual host '" +
host.getName() + "'");
writer.println(sm.getString("managerServlet.listed",
host.getName()));
Container[] contexts = host.findChildren();
for (int i = 0; i < contexts.length; i++) {
Context context = (Context) contexts[i];
String displayPath = context.getPath();
if( displayPath.equals("") )
displayPath = "/";
if (context != null ) {
if (context.getAvailable()) {
writer.println(sm.getString("managerServlet.listitem",
displayPath,
"running",
"" + context.getManager().findSessions().length,
context.getDocBase()));
} else {
writer.println(sm.getString("managerServlet.listitem",
displayPath,
"stopped",
"0",
context.getDocBase()));
}
}
}
}
Render a list of the currently active Contexts in our virtual host. |
protected void printResources(PrintWriter writer,
String prefix,
Context namingContext,
String type,
Class clazz) {
try {
NamingEnumeration items = namingContext.listBindings("");
while (items.hasMore()) {
Binding item = (Binding) items.next();
if (item.getObject() instanceof javax.naming.Context) {
printResources
(writer, prefix + item.getName() + "/",
(javax.naming.Context) item.getObject(), type, clazz);
} else {
if ((clazz != null) &&
(!(clazz.isInstance(item.getObject())))) {
continue;
}
writer.print(prefix + item.getName());
writer.print(':");
writer.print(item.getClassName());
// Do we want a description if available?
writer.println();
}
}
} catch (Throwable t) {
log("ManagerServlet.resources[" + type + "]", t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
List the resources of the given context. |
protected void reload(PrintWriter writer,
String path) {
if (debug >= 1)
log("restart: Reloading web application at '" + path + "'");
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
writer.println(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
try {
Context context = (Context) host.findChild(path);
if (context == null) {
writer.println(sm.getString
("managerServlet.noContext",
RequestUtil.filter(displayPath)));
return;
}
// It isn't possible for the manager to reload itself
if (context.getPath().equals(this.context.getPath())) {
writer.println(sm.getString("managerServlet.noSelf"));
return;
}
context.reload();
writer.println
(sm.getString("managerServlet.reloaded", displayPath));
} catch (Throwable t) {
log("ManagerServlet.reload[" + displayPath + "]", t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
Reload the web application at the specified context path. |
protected void removeServiced(String name) throws Exception {
String[] params = { name };
String[] signature = { "java.lang.String" };
mBeanServer.invoke(oname, "removeServiced", params, signature);
}
Invoke the removeServiced method on the deployer. |
protected void resources(PrintWriter writer,
String type) {
if (debug >= 1) {
if (type != null) {
log("resources: Listing resources of type " + type);
} else {
log("resources: Listing resources of all types");
}
}
// Is the global JNDI resources context available?
if (global == null) {
writer.println(sm.getString("managerServlet.noGlobal"));
return;
}
// Enumerate the global JNDI resources of the requested type
if (type != null) {
writer.println(sm.getString("managerServlet.resourcesType",
type));
} else {
writer.println(sm.getString("managerServlet.resourcesAll"));
}
Class clazz = null;
try {
if (type != null) {
clazz = Class.forName(type);
}
} catch (Throwable t) {
log("ManagerServlet.resources[" + type + "]", t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
return;
}
printResources(writer, "", global, type, clazz);
}
Render a list of available global JNDI resources. |
protected void roles(PrintWriter writer) {
if (debug >= 1) {
log("roles: List security roles from user database");
}
// Look up the UserDatabase instance we should use
UserDatabase database = null;
try {
InitialContext ic = new InitialContext();
database = (UserDatabase) ic.lookup("java:comp/env/users");
} catch (NamingException e) {
writer.println(sm.getString("managerServlet.userDatabaseError"));
log("java:comp/env/users", e);
return;
}
if (database == null) {
writer.println(sm.getString("managerServlet.userDatabaseMissing"));
return;
}
// Enumerate the available roles
writer.println(sm.getString("managerServlet.rolesList"));
Iterator roles = database.getRoles();
if (roles != null) {
while (roles.hasNext()) {
Role role = (Role) roles.next();
writer.print(role.getRolename());
writer.print(':");
if (role.getDescription() != null) {
writer.print(role.getDescription());
}
writer.println();
}
}
}
Render a list of security role names (and corresponding descriptions)
from the org.apache.catalina.UserDatabase resource that is
connected to the users resource reference. Typically, this
will be the global user database, but can be adjusted if you have
different user databases for different virtual hosts. |
protected synchronized void save(PrintWriter writer,
String path) {
Server server = ServerFactory.getServer();
if (!(server instanceof StandardServer)) {
writer.println(sm.getString("managerServlet.saveFail", server));
return;
}
if ((path == null) || path.length() == 0 || !path.startsWith("/")) {
try {
((StandardServer) server).storeConfig();
writer.println(sm.getString("managerServlet.saved"));
} catch (Exception e) {
log("managerServlet.storeConfig", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
} else {
String contextPath = path;
if (path.equals("/")) {
contextPath = "";
}
Context context = (Context) host.findChild(contextPath);
if (context == null) {
writer.println(sm.getString("managerServlet.noContext", path));
return;
}
try {
((StandardServer) server).storeContext(context);
writer.println(sm.getString("managerServlet.savedContext",
path));
} catch (Exception e) {
log("managerServlet.save[" + path + "]", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
}
}
Store server configuration. |
protected void serverinfo(PrintWriter writer) {
if (debug >= 1)
log("serverinfo");
try {
StringBuffer props = new StringBuffer();
props.append("OK - Server info");
props.append("\nTomcat Version: ");
props.append(ServerInfo.getServerInfo());
props.append("\nOS Name: ");
props.append(System.getProperty("os.name"));
props.append("\nOS Version: ");
props.append(System.getProperty("os.version"));
props.append("\nOS Architecture: ");
props.append(System.getProperty("os.arch"));
props.append("\nJVM Version: ");
props.append(System.getProperty("java.runtime.version"));
props.append("\nJVM Vendor: ");
props.append(System.getProperty("java.vm.vendor"));
writer.println(props.toString());
} catch (Throwable t) {
getServletContext().log("ManagerServlet.serverinfo",t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
Writes System OS and JVM properties. |
protected void sessions(PrintWriter writer,
String path) {
sessions(writer, path, -1);
}
Session information for the web application at the specified context path.
Displays a profile of session lastAccessedTime listing number
of sessions for each 10 minute interval up to 10 hours. |
protected void sessions(PrintWriter writer,
String path,
int idle) {
if (debug >= 1) {
log("sessions: Session information for web application at '" + path + "'");
if (idle >= 0)
log("sessions: Session expiration for " + idle + " minutes '" + path + "'");
}
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
writer.println(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
try {
Context context = (Context) host.findChild(path);
if (context == null) {
writer.println(sm.getString("managerServlet.noContext",
RequestUtil.filter(displayPath)));
return;
}
Manager manager = context.getManager() ;
if(manager == null) {
writer.println(sm.getString("managerServlet.noManager",
RequestUtil.filter(displayPath)));
return;
}
int maxCount = 60;
int maxInactiveInterval = manager.getMaxInactiveInterval()/60;
int histoInterval = maxInactiveInterval / maxCount;
if ( histoInterval * maxCount < maxInactiveInterval )
histoInterval++;
maxCount = maxInactiveInterval / histoInterval;
if ( histoInterval * maxCount < maxInactiveInterval )
maxCount++;
writer.println(sm.getString("managerServlet.sessions", displayPath));
writer.println(sm.getString("managerServlet.sessiondefaultmax",
"" + maxInactiveInterval));
Session [] sessions = manager.findSessions();
int [] timeout = new int[maxCount];
int notimeout = 0;
int expired = 0;
long now = System.currentTimeMillis();
for (int i = 0; i < sessions.length; i++) {
int time = (int)((now-sessions[i].getLastAccessedTimeInternal())/1000);
if (idle >= 0 && time >= idle*60) {
sessions[i].expire();
idle++;
}
time=time/60/histoInterval;
if (time < 0)
notimeout++;
else if (time >= maxCount)
timeout[maxCount-1]++;
else
timeout[time]++;
}
if (timeout[0] > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
"< " + histoInterval, "" + timeout[0]));
for (int i = 1; i < maxCount-1; i++) {
if (timeout[i] > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
"" + (i)*histoInterval + " - < " + (i+1)*histoInterval,
"" + timeout[i]));
}
if (timeout[maxCount-1] > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
" >=" + maxCount*histoInterval,
"" + timeout[maxCount-1]));
if (notimeout > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
"unlimited","" + notimeout));
if (idle >= 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
"" + idle,"expired " + expired));
} catch (Throwable t) {
log("ManagerServlet.sessions[" + displayPath + "]", t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
Session information for the web application at the specified context path.
Displays a profile of session lastAccessedTime listing number
of sessions for each 10 minute interval up to 10 hours. |
public void setWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
if (wrapper == null) {
context = null;
host = null;
oname = null;
} else {
context = (Context) wrapper.getParent();
host = (Host) context.getParent();
Engine engine = (Engine) host.getParent();
try {
oname = new ObjectName(engine.getName()
+ ":type=Deployer,host=" + host.getName());
} catch (Exception e) {
// ?
}
}
// Retrieve the MBean server
mBeanServer = Registry.getRegistry(null, null).getMBeanServer();
}
Set the Wrapper with which we are associated. |
protected void start(PrintWriter writer,
String path) {
if (debug >= 1)
log("start: Starting web application at '" + path + "'");
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
writer.println(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
try {
Context context = (Context) host.findChild(path);
if (context == null) {
writer.println(sm.getString("managerServlet.noContext",
RequestUtil.filter(displayPath)));
return;
}
((Lifecycle) context).start();
if (context.getAvailable())
writer.println
(sm.getString("managerServlet.started", displayPath));
else
writer.println
(sm.getString("managerServlet.startFailed", displayPath));
} catch (Throwable t) {
getServletContext().log
(sm.getString("managerServlet.startFailed", displayPath), t);
writer.println
(sm.getString("managerServlet.startFailed", displayPath));
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
Start the web application at the specified context path. |
protected void stop(PrintWriter writer,
String path) {
if (debug >= 1)
log("stop: Stopping web application at '" + path + "'");
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
writer.println(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
try {
Context context = (Context) host.findChild(path);
if (context == null) {
writer.println(sm.getString("managerServlet.noContext",
RequestUtil.filter(displayPath)));
return;
}
// It isn't possible for the manager to stop itself
if (context.getPath().equals(this.context.getPath())) {
writer.println(sm.getString("managerServlet.noSelf"));
return;
}
((Lifecycle) context).stop();
writer.println(sm.getString("managerServlet.stopped", displayPath));
} catch (Throwable t) {
log("ManagerServlet.stop[" + displayPath + "]", t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
Stop the web application at the specified context path. |
protected void undeploy(PrintWriter writer,
String path) {
if (debug >= 1)
log("undeploy: Undeploying web application at '" + path + "'");
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
writer.println(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
try {
// Validate the Context of the specified application
Context context = (Context) host.findChild(path);
if (context == null) {
writer.println(sm.getString("managerServlet.noContext",
RequestUtil.filter(displayPath)));
return;
}
// Identify the appBase of the owning Host of this Context (if any)
String appBase = null;
File appBaseDir = null;
if (context.getParent() instanceof Host) {
appBase = ((Host) context.getParent()).getAppBase();
appBaseDir = new File(appBase);
if (!appBaseDir.isAbsolute()) {
appBaseDir = new File(System.getProperty("catalina.base"),
appBase);
}
}
if (!isDeployed(path)) {
writer.println(sm.getString("managerServlet.notDeployed",
RequestUtil.filter(displayPath)));
return;
}
if (!isServiced(path)) {
addServiced(path);
try {
// Try to stop the context first to be nicer
((Lifecycle) context).stop();
} catch (Throwable t) {
// Ignore
}
try {
File war = new File(getAppBase(), getDocBase(path) + ".war");
File dir = new File(getAppBase(), getDocBase(path));
File xml = new File(configBase, getConfigFile(path) + ".xml");
if (war.exists()) {
war.delete();
} else if (dir.exists()) {
undeployDir(dir);
} else {
xml.delete();
}
// Perform new deployment
check(path);
} finally {
removeServiced(path);
}
}
writer.println(sm.getString("managerServlet.undeployed",
displayPath));
} catch (Throwable t) {
log("ManagerServlet.undeploy[" + displayPath + "]", t);
writer.println(sm.getString("managerServlet.exception",
t.toString()));
}
}
Undeploy the web application at the specified context path. |
protected void undeployDir(File dir) {
String files[] = dir.list();
if (files == null) {
files = new String[0];
}
for (int i = 0; i < files.length; i++) {
File file = new File(dir, files[i]);
if (file.isDirectory()) {
undeployDir(file);
} else {
file.delete();
}
}
dir.delete();
}
Delete the specified directory, including all of its contents and
subdirectories recursively. |
protected void uploadWar(HttpServletRequest request,
File war) throws IOException {
war.delete();
ServletInputStream istream = null;
BufferedOutputStream ostream = null;
try {
istream = request.getInputStream();
ostream =
new BufferedOutputStream(new FileOutputStream(war), 1024);
byte buffer[] = new byte[1024];
while (true) {
int n = istream.read(buffer);
if (n < 0) {
break;
}
ostream.write(buffer, 0, n);
}
ostream.flush();
ostream.close();
ostream = null;
istream.close();
istream = null;
} catch (IOException e) {
war.delete();
throw e;
} finally {
if (ostream != null) {
try {
ostream.close();
} catch (Throwable t) {
;
}
ostream = null;
}
if (istream != null) {
try {
istream.close();
} catch (Throwable t) {
;
}
istream = null;
}
}
}
Upload the WAR file included in this request, and store it at the
specified file location. |