📄 opencmscore.java
字号:
// the loop has to be interrupted when the exception is thrown!
} catch (CmsResourceInitException e) {
break;
}
}
// file is still null and not found exception was thrown, so throw original exception
if (resource == null && tmpException != null) {
throw tmpException;
}
// return the resource read from the VFS
return resource;
}
/**
* Initializes the system with the OpenCms servlet.<p>
*
* This is the final step that is called on the servlets "init()" method.
* It registers the servlets request handler and also outputs the final
* startup message. The servlet should auto-load since the <load-on-startup>
* parameter is set in the 'web.xml' by default.<p>
*
* @param servlet the OpenCms servlet
*/
protected void initServlet(OpenCmsServlet servlet) {
synchronized (LOCK) {
// add the servlets request handler
addRequestHandler(servlet);
// output the final 'startup is finished' message
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_SYSTEM_RUNNING_1,
CmsStringUtil.formatRuntime(getSystemInfo().getRuntime())));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_LINE_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
}
}
}
/**
* This method adds an Object to the OpenCms runtime properties.
* The runtime properties can be used to store Objects that are shared
* in the whole system.<p>
*
* @param key the key to add the Object with
* @param value the value of the Object to add
*/
protected void setRuntimeProperty(Object key, Object value) {
m_runtimeProperties.put(key, value);
}
/**
* Sets the session manager.<p>
*
* @param sessionManager the session manager to set
*/
protected void setSessionManager(CmsSessionManager sessionManager) {
m_sessionManager = sessionManager;
}
/**
* Displays a resource from the OpenCms by writing the result to the provided
* Servlet response output stream.<p>
*
* @param req the current servlet request
* @param res the current servlet response
*/
protected void showResource(HttpServletRequest req, HttpServletResponse res) {
CmsObject cms = null;
try {
cms = initCmsObject(req, res);
// user is initialized, now deliver the requested resource
CmsResource resource = initResource(cms, cms.getRequestContext().getUri(), req, res);
if (resource != null) {
// a file was read, go on process it
m_resourceManager.loadResource(cms, resource, req, res);
updateUserSessionData(cms, req);
}
} catch (Throwable t) {
errorHandling(cms, req, res, t);
}
}
/**
* Destroys this OpenCms instance, called if the servlet (or shell) is shut down.<p>
*/
protected void shutDown() {
synchronized (LOCK) {
if (getRunLevel() > OpenCms.RUNLEVEL_0_OFFLINE) {
System.err.println(Messages.get().getBundle().key(
Messages.LOG_SHUTDOWN_CONSOLE_NOTE_2,
getSystemInfo().getVersionName(),
getSystemInfo().getWebApplicationName()));
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_LINE_0));
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_SHUTDOWN_START_1,
getSystemInfo().getVersionName()));
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_CURRENT_RUNLEVEL_1,
new Integer(getRunLevel())));
CmsLog.INIT.info(Messages.get().getBundle().key(
Messages.INIT_SHUTDOWN_TIME_1,
new Date(System.currentTimeMillis())));
}
// take the system offline
setRunLevel(OpenCms.RUNLEVEL_0_OFFLINE);
if (LOG.isDebugEnabled()) {
// log exception to see which method did call the shutdown
LOG.debug(Messages.get().getBundle().key(Messages.LOG_SHUTDOWN_TRACE_0), new Exception());
}
try {
if (m_staticExportManager != null) {
m_staticExportManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_EXPORT_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_moduleManager != null) {
m_moduleManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_MODULE_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_scheduleManager != null) {
m_scheduleManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_SCHEDULE_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_resourceManager != null) {
m_resourceManager.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_RESOURCE_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_securityManager != null) {
m_securityManager.destroy();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_SECURITY_SHUTDOWN_1,
e.getMessage()), e);
}
try {
if (m_threadStore != null) {
m_threadStore.shutDown();
}
} catch (Throwable e) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_ERROR_THREAD_SHUTDOWN_1,
e.getMessage()), e);
}
String runtime = CmsStringUtil.formatRuntime(getSystemInfo().getRuntime());
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_OPENCMS_STOPPED_1, runtime));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_LINE_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DOT_0));
}
System.err.println(Messages.get().getBundle().key(Messages.LOG_CONSOLE_TOTAL_RUNTIME_1, runtime));
}
m_instance = null;
}
}
/**
* Upgrades to runlevel {@link OpenCms#RUNLEVEL_3_SHELL_ACCESS},
* this is shell access to the database but no Servlet context.<p>
*
* To upgrade the runlevel, the system must be in runlevel {@link OpenCms#RUNLEVEL_1_CORE_OBJECT},
* otherwise an exception is thrown.<p>
*
* @param configuration the configuration
* @throws CmsInitException in case OpenCms can not be initialized
* @return the initialized OpenCmsCore
*/
protected OpenCmsCore upgradeRunlevel(ExtendedProperties configuration) throws CmsInitException {
synchronized (LOCK) {
if ((m_instance != null) && (getRunLevel() >= OpenCms.RUNLEVEL_2_INITIALIZING)) {
// instance already in runlevel 3 or 4
return m_instance;
}
if (getRunLevel() != OpenCms.RUNLEVEL_1_CORE_OBJECT) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_WRONG_INIT_SEQUENCE_2,
new Integer(3),
new Integer(getRunLevel())));
return m_instance;
}
// set the runlevel to "initializing OpenCms"
setRunLevel(OpenCms.RUNLEVEL_2_INITIALIZING);
// initialize the configuration
m_instance.initConfiguration(configuration);
// upgrade the runlevel - OpenCms shell is available
setRunLevel(OpenCms.RUNLEVEL_3_SHELL_ACCESS);
return m_instance;
}
}
/**
* Upgrades to runlevel {@link OpenCms#RUNLEVEL_4_SERVLET_ACCESS},
* this is the final runlevel with an initialized database and Servlet context.<p>
*
* To upgrade the runlevel, the system must be in runlevel {@link OpenCms#RUNLEVEL_1_CORE_OBJECT},
* otherwise an exception is thrown.<p>
*
* @param context the current servlet context
* @throws CmsInitException in case OpenCms can not be initialized
* @return the initialized OpenCmsCore
*/
protected OpenCmsCore upgradeRunlevel(ServletContext context) throws CmsInitException {
synchronized (LOCK) {
if ((m_instance != null) && (getRunLevel() >= OpenCms.RUNLEVEL_4_SERVLET_ACCESS)) {
// instance already in runlevel 5 or 6
return m_instance;
}
if (getRunLevel() != OpenCms.RUNLEVEL_1_CORE_OBJECT) {
CmsLog.INIT.error(Messages.get().getBundle().key(
Messages.LOG_WRONG_INIT_SEQUENCE_2,
new Integer(4),
new Integer(getRunLevel())));
return m_instance;
}
// set the runlevel to "initializing OpenCms"
setRunLevel(OpenCms.RUNLEVEL_2_INITIALIZING);
// initialize the servlet context
m_instance.initContext(context);
// initialization successfully finished - OpenCms servlet is online
// the runlevel will change from 2 directly to 4, this is on purpose
setRunLevel(OpenCms.RUNLEVEL_4_SERVLET_ACCESS);
return m_instance;
}
}
/**
* Writes the XML configuration for the provided configuration class.<p>
*
* @param clazz the configuration class to write the XML for
*/
protected void writeConfiguration(Class clazz) {
// exception handling is provided here to ensure identical log messages
try {
m_configurationManager.writeConfiguration(clazz);
} catch (IOException e) {
CmsLog.getLog(CmsConfigurationManager.class).error(
Messages.get().getBundle().key(Messages.LOG_ERROR_WRITING_CONFIG_1, clazz.getName()),
e);
} catch (CmsConfigurationException e) {
CmsLog.getLog(CmsConfigurationManager.class).error(
Messages.get().getBundle().key(Messages.LOG_ERROR_WRITING_CONFIG_1, clazz.getName()),
e);
}
}
/**
* Adds the given set of export points to the list of all configured export points.<p>
*
* @param exportPoints the export points to add
*/
private void addExportPoints(Set exportPoints) {
// create a new immutable set of export points
HashSet newSet = new HashSet(m_exportPoints.size() + exportPoints.size());
newSet.addAll(exportPoints);
newSet.addAll(m_exportPoints);
m_exportPoints = Collections.unmodifiableSet(newSet);
}
/**
* Checks if the current request contains http basic authentication information in
* the headers, if so tries to log in the user identified.<p>
*
* @param cms the current cms context
* @param req the current http request
* @param res the current http response
* @throws IOException in case of errors reading from the streams
*/
private void checkBasicAuthorization(CmsObject cms, HttpServletRequest req, HttpServletResponse res)
throws IOException {
// no user identified from the session and basic authentication is enabled
String auth = req.getHeader("Authorization")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -