/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License.
*/ package org.apache.catalina.storeconfig;
/** * Get server.xml location * * @return The server file name
*/ public String getServerFilename() { return serverFilename;
}
/** * Set new server.xml location. * * @param string The server.xml location
*/ publicvoid setServerFilename(String string) {
serverFilename = string;
}
/** * Get the StoreRegistry with all factory to generate the * server.xml/context.xml files. * * @see org.apache.catalina.storeconfig.IStoreConfig#getRegistry()
*/
@Override public StoreRegistry getRegistry() { return registry;
}
@Override publicvoid setServer(Server aServer) {
server = aServer;
}
@Override public Server getServer() { return server;
}
/** * Store current Server.
*/
@Override publicvoid storeConfig() {
store(server);
}
/** * Store Server from Object Name (Catalina:type=Server). * * @param aServerName Server ObjectName * @param backup <code>true</code> to backup existing configuration files * before rewriting them * @param externalAllowed <code>true</code> to allow saving webapp * configuration for webapps that are not inside the host's app * directory * @throws MalformedObjectNameException Bad MBean name
*/ publicsynchronizedvoid storeServer(String aServerName, boolean backup, boolean externalAllowed) throws MalformedObjectNameException { if (aServerName == null || aServerName.length() == 0) {
log.error(sm.getString("config.emptyObjectName")); return;
}
MBeanServer mserver = MBeanUtils.createServer();
ObjectName objectName = new ObjectName(aServerName); if (mserver.isRegistered(objectName)) { try {
Server aServer = (Server) mserver.getAttribute(objectName, "managedResource");
StoreDescription desc = null;
desc = getRegistry().findDescription(StandardContext.class); if (desc != null) { boolean oldSeparate = desc.isStoreSeparate(); boolean oldBackup = desc.isBackup(); boolean oldExternalAllowed = desc.isExternalAllowed(); try {
desc.setStoreSeparate(true);
desc.setBackup(backup);
desc.setExternalAllowed(externalAllowed);
store(aServer);
} finally {
desc.setStoreSeparate(oldSeparate);
desc.setBackup(oldBackup);
desc.setExternalAllowed(oldExternalAllowed);
}
} else {
store(aServer);
}
} catch (Exception e) {
log.error(sm.getString("config.storeServerError"), e);
}
} else {
log.info(sm.getString("config.objectNameNotFound", aServerName));
}
}
/** * Store a Context from ObjectName. * * @param aContextName MBean ObjectName * @param backup <code>true</code> to backup existing configuration files * before rewriting them * @param externalAllowed <code>true</code> to allow saving webapp * configuration for webapps that are not inside the host's app * directory * @throws MalformedObjectNameException Bad MBean name
*/ publicsynchronizedvoid storeContext(String aContextName, boolean backup, boolean externalAllowed) throws MalformedObjectNameException { if (aContextName == null || aContextName.length() == 0) {
log.error(sm.getString("config.emptyObjectName")); return;
}
MBeanServer mserver = MBeanUtils.createServer();
ObjectName objectName = new ObjectName(aContextName); if (mserver.isRegistered(objectName)) { try {
Context aContext = (Context) mserver.getAttribute(objectName, "managedResource");
URL configFile = aContext.getConfigFile(); if (configFile != null) {
StoreDescription desc = null;
desc = getRegistry().findDescription(
aContext.getClass()); if (desc != null) { boolean oldSeparate = desc.isStoreSeparate(); boolean oldBackup = desc.isBackup(); boolean oldExternalAllowed = desc
.isExternalAllowed(); try {
desc.setStoreSeparate(true);
desc.setBackup(backup);
desc.setExternalAllowed(externalAllowed);
desc.getStoreFactory()
.store(null, -2, aContext);
} finally {
desc.setStoreSeparate(oldSeparate);
desc.setBackup(oldBackup);
desc.setBackup(oldExternalAllowed);
}
}
} else {
log.error(sm.getString("config.missingContextFile", aContext.getPath()));
}
} catch (Exception e) {
log.error(sm.getString("config.storeContextError", aContextName), e);
}
} else {
log.info(sm.getString("config.objectNameNotFound", aContextName));
}
}
/** * Write the configuration information for this entire <code>Server</code> * out to the server.xml configuration file. * * @param aServer Server instance * @return <code>true</code> if the store operation was successful
*/
@Override publicsynchronizedboolean store(Server aServer) {
StoreFileMover mover = new StoreFileMover(Bootstrap.getCatalinaBase(),
getServerFilename(), getRegistry().getEncoding()); // Open an output writer for the new configuration file try { try (PrintWriter writer = mover.getWriter()) {
store(writer, -2, aServer);
}
mover.move(); returntrue;
} catch (Exception e) {
log.error(sm.getString("config.storeServerError"), e);
} returnfalse;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.