Author: snoopdave Date: Tue Jun 19 08:12:43 2007 New Revision: 548758 URL: http://svn.apache.org/viewvc?view=rev&rev=548758 Log: Refinements to Roller EZ install: - Moved bootstrap logic from BootstrapFilter to new Struts Install action - Replaced "please restart" messages with "click here to start using Roller" - Added unknown error page for unexpected errors - RollerContext is no longer a DatabaseScriptProvider - All Struts actions now extend UIAction, no need for ApplicationAware
Added: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Install.java roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/ServletContextDatabaseScriptProvider.java roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UnknownError.jsp Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/RollerFactory.java roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/CreateDatabase.java roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/DatabaseError.java roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/UpgradeDatabase.java roller/trunk/apps/weblogger/src/sql/droptables.sql roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties roller/trunk/apps/weblogger/web/WEB-INF/classes/struts.xml roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/CreateDatabase.jsp roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UpgradeDatabase.jsp roller/trunk/apps/weblogger/web/WEB-INF/tiles.xml Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/RollerFactory.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/RollerFactory.java?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/RollerFactory.java (original) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/RollerFactory.java Tue Jun 19 08:12:43 2007 @@ -21,6 +21,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; +import org.apache.roller.weblogger.business.utils.DatabaseCreator; +import org.apache.roller.weblogger.business.utils.DatabaseUpgrader; import org.apache.roller.weblogger.config.PingConfig; import org.apache.roller.weblogger.config.RollerConfig; @@ -58,7 +60,14 @@ /** * Bootstrap the Roller Weblogger business tier. */ - public static final void bootstrap() { + public static final void bootstrap() throws WebloggerException { + + if ("manual".equals(RollerConfig.getProperty("installation.type"))) { + if (DatabaseCreator.isCreationRequired() + || DatabaseUpgrader.isUpgradeRequired()) { + return; + } + } // This will cause instantiation and initialziation of Roller impl Roller roller = getRoller(); Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java (original) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerContext.java Tue Jun 19 08:12:43 2007 @@ -33,7 +33,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; -import org.apache.roller.weblogger.business.utils.DatabaseScriptProvider; import org.apache.roller.weblogger.business.utils.DatabaseUpgrader; import org.apache.roller.weblogger.config.RollerConfig; import org.apache.roller.weblogger.business.RollerFactory; @@ -42,6 +41,7 @@ import org.apache.roller.weblogger.ui.core.plugins.UIPluginManager; import org.apache.roller.weblogger.ui.core.plugins.UIPluginManagerImpl; import org.apache.roller.weblogger.ui.core.security.AutoProvision; +import org.apache.roller.weblogger.ui.struts2.core.ServletContextDatabaseScriptProvider; import org.apache.roller.weblogger.util.cache.CacheManager; import org.apache.velocity.runtime.RuntimeSingleton; import org.springframework.context.ApplicationContext; @@ -53,7 +53,7 @@ * Initialize the Roller web application/context. */ public class RollerContext extends ContextLoaderListener - implements ServletContextListener, DatabaseScriptProvider { + implements ServletContextListener { private static Log log = LogFactory.getLog(RollerContext.class); @@ -79,9 +79,6 @@ // Keep a reverence to ServletContext object this.servletContext = sce.getServletContext(); - // Save self to context as DatabaseScriptProvider - this.servletContext.setAttribute("DatabaseScriptProvider", this); - // Call Spring's context ContextLoaderListener to initialize all the // context files specified in web.xml. This is necessary because // listeners don't initialize in the order specified in 2.3 containers @@ -126,7 +123,8 @@ // If installation type is manual, then don't run migraton scripts if ("manual".equals(RollerConfig.getProperty("installation.type"))) { if (DatabaseUpgrader.isUpgradeRequired()) { - DatabaseUpgrader upgrader = new DatabaseUpgrader(this); + DatabaseUpgrader upgrader = new DatabaseUpgrader( + new ServletContextDatabaseScriptProvider()); upgrader.upgradeDatabase(false); } } @@ -288,14 +286,6 @@ return servletContext; } - - /** - * Get database script as stream, path is relative to dbscripts directory. - */ - public InputStream getDatabaseScript(String path) throws Exception { - return getServletContext().getResourceAsStream("/WEB-INF/dbscripts/" + path); - } - /** * Get an instance of AutoProvision, if available in roller.properties Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java (original) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/BootstrapFilter.java Tue Jun 19 08:12:43 2007 @@ -33,7 +33,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.roller.RollerException; import org.apache.roller.weblogger.business.DatabaseProvider; - +import org.apache.roller.weblogger.business.RollerFactory; import org.apache.roller.weblogger.config.RollerConfig; import org.apache.roller.weblogger.business.utils.DatabaseCreator; import org.apache.roller.weblogger.business.utils.DatabaseUpgrader; @@ -58,55 +58,27 @@ log.debug("Entered "+request.getRequestURI()); - if ("auto".equals(RollerConfig.getProperty("installation.type"))) { - + if ("auto".equals(RollerConfig.getProperty("installation.type"))) { // an auto-install is in progress, do some checks and if necessary // redirect to error, db create or db upgrade page // only do this if Roller is configured for auto-install and - // only if request is NOT for install page or a style/script file - + // only if request is NOT for install page or a style/script file String requestURI = request.getRequestURI(); if ( requestURI != null - && !requestURI.startsWith("/roller/roller-ui/install") + && requestURI.indexOf("/roller-ui/install") < 0 && !requestURI.endsWith(".js") && !requestURI.endsWith(".css")) { - - // if cannot connect to database - try { - DatabaseProvider dp = DatabaseProvider.getDatabaseProvider(); - } catch (RollerException e) { - // we doing an install, so forward to informative database error page - RequestDispatcher rd = - context.getRequestDispatcher("/roller-ui/install/databaseError.rol"); + + if (!RollerFactory.isBootstrapped()) { + // we doing an install, so forward to installer + RequestDispatcher rd = context.getRequestDispatcher( + "/roller-ui/install/install.rol"); rd.forward(req, res); return; - } - - // if installation type 'auto' then check if upgrade required - try { - if (DatabaseCreator.isCreationRequired()) { - // forward to database create page - RequestDispatcher rd = context.getRequestDispatcher( - "/roller-ui/install/createDatabase.rol"); - rd.forward(req, res); - return; - } - if (DatabaseUpgrader.isUpgradeRequired()) { - // forward to database upgrade page - RequestDispatcher rd = context.getRequestDispatcher( - "/roller-ui/install/upgradeDatabase.rol"); - rd.forward(req, res); - return; - } - } catch (Throwable t) { - // Exception at this point indicates something is - // horribly wrong and there is no way to recover. - throw new RuntimeException("FATAL error checking database status", t); } } } - chain.doFilter(request, response); log.debug("Exiting "+request.getRequestURI()); } Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java (original) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/PersistenceSessionFilter.java Tue Jun 19 08:12:43 2007 @@ -60,11 +60,15 @@ chain.doFilter(request, response); } finally { log.debug("Releasing Roller Session"); - RollerFactory.getRoller().release(); + if (RollerFactory.getRoller() != null) { + RollerFactory.getRoller().release(); + } // if planet is enabled then release planet backend as well - if(RollerConfig.getBooleanProperty("planet.aggregator.enabled")) { - PlanetFactory.getPlanet().release(); + if (RollerConfig.getBooleanProperty("planet.aggregator.enabled")) { + if (PlanetFactory.getPlanet() != null) { + PlanetFactory.getPlanet().release(); + } } } Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/CreateDatabase.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/CreateDatabase.java?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/CreateDatabase.java (original) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/CreateDatabase.java Tue Jun 19 08:12:43 2007 @@ -18,26 +18,21 @@ package org.apache.roller.weblogger.ui.struts2.core; -import com.opensymphony.xwork2.ActionSupport; import java.sql.Connection; import java.util.List; -import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; import org.apache.roller.weblogger.business.DatabaseProvider; import org.apache.roller.weblogger.business.utils.DatabaseCreator; -import org.apache.roller.weblogger.business.utils.DatabaseScriptProvider; import org.apache.roller.weblogger.config.RollerConfig; -import org.apache.struts2.interceptor.ApplicationAware; +import org.apache.roller.weblogger.ui.struts2.util.UIAction; /** * Walk user through database auto-creation process. */ -public class CreateDatabase extends ActionSupport implements ApplicationAware { - private static Log log = LogFactory.getLog(CreateDatabase.class); - - private DatabaseScriptProvider scripts = null; +public class CreateDatabase extends UIAction { + private static Log log = LogFactory.getLog(CreateDatabase.class); private boolean error = false; private List<String> messages = null; @@ -46,17 +41,17 @@ return SUCCESS; } - /** - * Looks for DatabaseScriptProvider via key 'DatabaseScriptProvider' - */ - public void setApplication(Map map) { - if (map.get("DatabaseScriptProvider") != null) { - scripts = (DatabaseScriptProvider)map.get("DatabaseScriptProvider"); - } + public boolean isUserRequired() { + return false; } - + + public boolean isWeblogRequired() { + return false; + } + public String create() { - DatabaseCreator creator = new DatabaseCreator(scripts); + DatabaseCreator creator = new DatabaseCreator( + new ServletContextDatabaseScriptProvider()); try { creator.createDatabase(); } catch (Exception ex) { Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/DatabaseError.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/DatabaseError.java?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/DatabaseError.java (original) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/DatabaseError.java Tue Jun 19 08:12:43 2007 @@ -18,20 +18,28 @@ package org.apache.roller.weblogger.ui.struts2.core; -import com.opensymphony.xwork2.ActionSupport; import java.io.StringWriter; import java.util.List; import org.apache.roller.RollerException; import org.apache.roller.weblogger.business.DatabaseProvider; import org.apache.roller.weblogger.config.RollerConfig; +import org.apache.roller.weblogger.ui.struts2.util.UIAction; /** * Display error message about database. */ -public class DatabaseError extends ActionSupport { +public class DatabaseError extends UIAction { public String execute() { return SUCCESS; + } + + public boolean isUserRequired() { + return false; + } + + public boolean isWeblogRequired() { + return false; } public String getProp(String key) { Added: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Install.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Install.java?view=auto&rev=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Install.java (added) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Install.java Tue Jun 19 08:12:43 2007 @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. 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. For additional information regarding + * copyright in this work, please see the NOTICE file in the top level + * directory of this distribution. + */ + +package org.apache.roller.weblogger.ui.struts2.core; + +import java.io.PrintWriter; +import java.io.StringWriter; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.roller.RollerException; +import org.apache.roller.weblogger.business.DatabaseProvider; +import org.apache.roller.weblogger.business.RollerFactory; +import org.apache.roller.weblogger.business.utils.DatabaseCreator; +import org.apache.roller.weblogger.business.utils.DatabaseUpgrader; +import org.apache.roller.weblogger.ui.struts2.util.UIAction; + +/** + * Walk user through install process. + */ +public class Install extends UIAction { + private static Log log = LogFactory.getLog(Install.class); + private static final String DATABASE_ERROR = "database_error"; + private static final String CREATE_DATABASE = "create_database"; + private static final String UPGRADE_DATABASE = "upgrade_database"; + private static final String UNKNOWN_ERROR = "unknown_error"; + private Throwable rootCauseException = null; + + public String execute() { + + try { + DatabaseProvider dp = DatabaseProvider.getDatabaseProvider(); + } catch (RollerException e) { + return DATABASE_ERROR; + } + + try { + if (DatabaseCreator.isCreationRequired()) { + log.info("Forwarding to database table creation page"); + return CREATE_DATABASE; + } + if (DatabaseUpgrader.isUpgradeRequired()) { + log.info("Forwarding to database table upgrade page"); + return UPGRADE_DATABASE; + } + } catch (Throwable t) { + rootCauseException = t; + log.error("ERROR checking database status", t); + return UNKNOWN_ERROR; + } + + try { + log.info("Attempting to bootstrap Roller"); + RollerFactory.bootstrap(); + } catch (Throwable t) { + rootCauseException = t; + log.error("ERROR bootstrapping Roller", t); + return UNKNOWN_ERROR; + } + + return SUCCESS; + } + + public boolean isUserRequired() { + return false; + } + + public boolean isWeblogRequired() { + return false; + } + + public Throwable getRootCauseException() { + return rootCauseException; + } + + public String getRootCauseStackTrace() { + String stackTrace = ""; + if (getRootCauseException() != null) { + StringWriter sw = new StringWriter(); + getRootCauseException().printStackTrace(new PrintWriter(sw)); + stackTrace = sw.toString().trim(); + } + return stackTrace; + } +} + Added: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/ServletContextDatabaseScriptProvider.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/ServletContextDatabaseScriptProvider.java?view=auto&rev=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/ServletContextDatabaseScriptProvider.java (added) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/ServletContextDatabaseScriptProvider.java Tue Jun 19 08:12:43 2007 @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. 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. For additional information regarding + * copyright in this work, please see the NOTICE file in the top level + * directory of this distribution. + */ +package org.apache.roller.weblogger.ui.struts2.core; + +import java.io.InputStream; +import org.apache.roller.weblogger.business.utils.DatabaseScriptProvider; +import org.apache.roller.weblogger.ui.core.RollerContext; + +/** + * Reads script from ServletContext. + */ +public class ServletContextDatabaseScriptProvider implements DatabaseScriptProvider { + + public InputStream getDatabaseScript(String path) throws Exception { + return RollerContext.getServletContext().getResourceAsStream( + "/WEB-INF/dbscripts/" + path); + } +} Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/UpgradeDatabase.java URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/UpgradeDatabase.java?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/UpgradeDatabase.java (original) +++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/UpgradeDatabase.java Tue Jun 19 08:12:43 2007 @@ -18,44 +18,40 @@ package org.apache.roller.weblogger.ui.struts2.core; -import com.opensymphony.xwork2.ActionSupport; import java.sql.Connection; import java.util.List; -import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.roller.weblogger.WebloggerException; import org.apache.roller.weblogger.business.DatabaseProvider; -import org.apache.roller.weblogger.business.utils.DatabaseScriptProvider; import org.apache.roller.weblogger.business.utils.DatabaseUpgrader; import org.apache.roller.weblogger.config.RollerConfig; -import org.apache.struts2.interceptor.ApplicationAware; +import org.apache.roller.weblogger.ui.struts2.util.UIAction; /** * Walk user through database auto-upgrade process. */ -public class UpgradeDatabase extends ActionSupport implements ApplicationAware { - private static Log log = LogFactory.getLog(UpgradeDatabase.class); - - private DatabaseScriptProvider scripts = null; +public class UpgradeDatabase extends UIAction { + private static Log log = LogFactory.getLog(UpgradeDatabase.class); private boolean error = false; private List<String> messages = null; + public String execute() { return SUCCESS; + } + + public boolean isUserRequired() { + return false; } - /** - * Looks for DatabaseScriptProvider via key 'DatabaseScriptProvider' - */ - public void setApplication(Map map) { - if (map.get("DatabaseScriptProvider") != null) { - scripts = (DatabaseScriptProvider)map.get("DatabaseScriptProvider"); - } + public boolean isWeblogRequired() { + return false; } public String upgrade() { - DatabaseUpgrader upgrader = new DatabaseUpgrader(scripts); + DatabaseUpgrader upgrader = new DatabaseUpgrader( + new ServletContextDatabaseScriptProvider()); try { upgrader.upgradeDatabase(true); } catch (Exception ex) { Modified: roller/trunk/apps/weblogger/src/sql/droptables.sql URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/sql/droptables.sql?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/src/sql/droptables.sql (original) +++ roller/trunk/apps/weblogger/src/sql/droptables.sql Tue Jun 19 08:12:43 2007 @@ -21,6 +21,7 @@ drop table rag_group; drop table rag_planet; drop table rag_properties; +drop table rag_config; -- non-associated tables drop table newsfeed; Modified: roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties (original) +++ roller/trunk/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties Tue Jun 19 08:12:43 2007 @@ -733,10 +733,14 @@ installer.bannerTitleLeft=Apache Roller Weblogger installer.bannerTitleRight=Auto-Installer +# database error installer.cannotConnectToDatabase=Cannot connect to database installer.whatHappened=What happened? installer.whatHappenedDatabaseConnectionError=\ -Here's what happened when Roller tried to establish a connection: +A database error occurred, probably because your database connection is \ +misconfigured. You will have to fix this problem and then restart or redeploy \ +Roller before you can proceed. Here's what happened when Roller \ +tried to establish a connection: installer.whyDidThatHappen=Why did that happen? installer.aboutTheException=In case the clues above are not enough to help you \ figure out what is going wrong, here are some more details. The root cause of \ @@ -744,7 +748,17 @@ installer.heresTheStackTrace=\ To help you debug the problem, here is the stack trace for that exception: +# unknown error +installer.unknownError=An unknown error has occurred +installer.whatHappenedUnknown=An unknown and unexpected error occured when \ +Roller tried to check database status or bootstrap itself. Roller can't \ +determine what happened so you will have to look at your servers log files \ +and diagnose the problem yourself. Follow the instructons on the Roller wiki \ +and seek help from the <a href=\ +"http://cwiki.apache.org/confluence/display/ROLLER/Roller+Mailing+Lists"> \ +Roller user mailing list. +# create tables installer.noDatabaseTablesFound=No database tables found installer.noDatabaseTablesExplanation=\ Roller is able to connect to your database of type [{0}], but found no tables. @@ -753,10 +767,17 @@ installer.tablesCreated=Tables created successfully installer.tablesCreatedExplanation=Database tables were created successfully \ as you can see below. -installer.pleaseRestart=Before you start using Roller please restart or \ -redeploy the Roller web application. +installer.tryBootstrapping=Database tables are present and up-to-date. \ +Click <a href="{0}">here</a> to complete the installation process and start \ +using Roller. installer.errorCreatingTables=Error creating tables +installer.errorCreatingTablesExplanation=Error creating tables, possibly due \ +to an error in the database creation script or because you are using an \ +unsupported database. You will have to fix this problem and then restart or \ +redeploy Roller before you can proceed. Below are the success/error messages \ +issued during the creation process: +# upgrade tables installer.databaseUpgradeNeeded=Database tables need to be upgraded installer.databaseUpgradeNeededExplanation=\ Roller is able to connect to your database of type [{0}] and found tables, \ @@ -767,6 +788,11 @@ installer.tablesUpgradedExplanation=\ Database tables were upgraded successfully as you can see below. installer.errorUpgradingTables=Error upgrading tables +installer.errorUpgradingTablesExplanation=Error upgrading tables, possibly due \ +to an error in the database creation script or because you are using an \ +unsupported database. You will have to fix this problem and then restart or \ +redeploy Roller before you can proceed. Below are the success/error messages \ +issued during the upgrade process: # ----------------------------------------------------------------------- Login Modified: roller/trunk/apps/weblogger/web/WEB-INF/classes/struts.xml URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/classes/struts.xml?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/web/WEB-INF/classes/struts.xml (original) +++ roller/trunk/apps/weblogger/web/WEB-INF/classes/struts.xml Tue Jun 19 08:12:43 2007 @@ -122,7 +122,7 @@ </package> - <!-- Weblogger Admin UI (includes planet) --> + <!-- Weblogger install/bootstrap actions --> <package name="weblogger-install" namespace="/roller-ui/install" extends="weblogger"> <action name="databaseError" @@ -130,6 +130,11 @@ <result name="success" type="tiles">.DatabaseError</result> </action> + <action name="unknownError" + class="org.apache.roller.weblogger.ui.struts2.core.UpgradeDatabase"> + <result name="success" type="tiles">.UnknownError</result> + </action> + <action name="createDatabase!*" method="{1}" class="org.apache.roller.weblogger.ui.struts2.core.CreateDatabase"> <result name="success" type="tiles">.CreateDatabase</result> @@ -140,6 +145,15 @@ <result name="success" type="tiles">.UpgradeDatabase</result> </action> + <action name="install" + class="org.apache.roller.weblogger.ui.struts2.core.Install"> + <result name="database_error" type="chain">databaseError</result> + <result name="create_database" type="chain">createDatabase</result> + <result name="upgrade_database" type="chain">upgradeDatabase</result> + <result name="unknown_error" type="tiles">.UnknownError</result> + <result name="success" type="chain">home</result> + </action> + </package> Modified: roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/CreateDatabase.jsp URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/CreateDatabase.jsp?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/CreateDatabase.jsp (original) +++ roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/CreateDatabase.jsp Tue Jun 19 08:12:43 2007 @@ -20,10 +20,9 @@ <s:if test="error"> <h2><s:text name="installer.errorCreatingTables" /></h2> + <p><s:text name="installer.errorCreatingTablesExplanation" /></p> <pre> -<s:iterator value="messages"> -<s:property/> -</s:iterator> +<s:iterator value="messages"><s:property/><br /></s:iterator> </pre> </s:if> @@ -48,7 +47,11 @@ <h2><s:text name="installer.tablesCreated" /></h2> <p><s:text name="installer.tablesCreatedExplanation" /></p> - <p><s:text name="installer.pleaseRestart" /></p> + <p> + <s:text name="installer.tryBootstrapping"> + <s:param><s:url value="/"/></s:param> + </s:text> + </p> <pre> <s:iterator value="messages"><s:property/><br /></s:iterator> Added: roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UnknownError.jsp URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UnknownError.jsp?view=auto&rev=548758 ============================================================================== --- roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UnknownError.jsp (added) +++ roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UnknownError.jsp Tue Jun 19 08:12:43 2007 @@ -0,0 +1,39 @@ +<%-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. 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. For additional information regarding + copyright in this work, please see the NOTICE file in the top level + directory of this distribution. +--%> +<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> + +<h2><s:text name="installer.unknownError" /></h2> + +<h3><s:text name="installer.whatHappened" /></h3> + +<p><s:text name="installer.whatHappenedUnknown" /></p> + +<h3><s:text name="installer.whyDidThatHappen" /></h3> + +<p> + <s:text name="installer.aboutTheException" /> + [<s:property value="getRootCauseException().getClass().getName()" />] +</p> + +<p><s:text name="installer.heresTheStackTrace" /></p> +<pre> + [<s:property value="getRootCauseStackTrace()" />] +</pre> + +<br /> +<br /> Modified: roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UpgradeDatabase.jsp URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UpgradeDatabase.jsp?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UpgradeDatabase.jsp (original) +++ roller/trunk/apps/weblogger/web/WEB-INF/jsps/core/UpgradeDatabase.jsp Tue Jun 19 08:12:43 2007 @@ -21,10 +21,9 @@ <s:if test="error"> <h2><s:text name="installer.errorUpgradingTables" /></h2> + <p><s:text name="installer.errorUpgradingTablesExplanation" /></p> <pre> -<s:iterator value="messages"> -<s:property/> -</s:iterator> +<s:iterator value="messages"><s:property/><br /></s:iterator> </pre> </s:if> @@ -49,7 +48,11 @@ <h2><s:text name="installer.tablesUpgraded" /></h2> <p><s:text name="installer.tablesUpgradedExplanation" /></p> - <p><s:text name="installer.pleaseRestart" /></p> + <p> + <s:text name="installer.tryBootstrapping"> + <s:param><s:url value="/"/></s:param> + </s:text> + </p> <pre> <s:iterator value="messages"><s:property/><br /></s:iterator> Modified: roller/trunk/apps/weblogger/web/WEB-INF/tiles.xml URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/web/WEB-INF/tiles.xml?view=diff&rev=548758&r1=548757&r2=548758 ============================================================================== --- roller/trunk/apps/weblogger/web/WEB-INF/tiles.xml (original) +++ roller/trunk/apps/weblogger/web/WEB-INF/tiles.xml Tue Jun 19 08:12:43 2007 @@ -122,6 +122,12 @@ <put name="banner" value="/WEB-INF/jsps/tiles/bannerInstallation.jsp" /> </definition> + <definition name=".UnknownError" extends=".tiles-errorpage" > + <put name="content" value="/WEB-INF/jsps/core/UnknownError.jsp" /> + <put name="footer" value="/WEB-INF/jsps/tiles/empty.jsp" /> + <put name="banner" value="/WEB-INF/jsps/tiles/bannerInstallation.jsp" /> + </definition> + <!-- global admin pages (and associates) --> <definition name=".GlobalConfig" extends=".tiles-tabbedpage" >