Reviewing the installation doc, I thought I've already added the javax.mail jar. I must of forgot when I see that the activation is already included. I apologize for that. After creating the new user, it failed to create blog:
https://imgur.com/a/0xhckph The input validation seems to add a space before the handle. Thanks. On Sun, Feb 9, 2020 at 4:05 PM Tommy Pham <tommy...@gmail.com> wrote: > With some modifications to the code: > > package org.apache.roller.weblogger.business.startup; > > import ...; > public final class WebloggerStartup { > // ... > public static void prepare() throws StartupException { > > // setup database provider > try { > dbProvider = new DatabaseProvider(); > LOG.info(">>> setup database provider"); > } catch(StartupException ex) { > dbProviderException = ex; > throw ex; > } > > // setup mail provider, if configured > try { > mailProvider = new MailProvider(); > LOG.info(">>> setup mail provider"); > } catch(StartupException ex) { > LOG.warn("Failed to setup mail provider, continuing anyways.\n" > + "Reason: " + ex.getMessage()); > LOG.info("The cause of setting up mail provider error was: ", > ex); > } > > LOG.info(">>> installation.type: " + > WebloggerConfig.getProperty("installation.type")); > // now we need to deal with database install/upgrade logic > > if("manual".equals(WebloggerConfig.getProperty("installation.type"))) { > > LOG.info(">>> manual install mode"); > // if we are doing manual install then all that is needed is > the > // app handled database upgrade work, not the db scripts > DatabaseInstaller dbInstaller = getDatabaseInstaller(); > if (dbInstaller.isUpgradeRequired()) { > dbInstaller.upgradeDatabase(false); > } > > prepared = true; > > } else { > > LOG.info(">>> auto install mode"); > // we are in auto install mode, so see if there is any work to > do > DatabaseInstaller dbInstaller = getDatabaseInstaller(); > if (!dbInstaller.isCreationRequired() && > !dbInstaller.isUpgradeRequired()) { > prepared = true; > } > } > > } > } > > I think I've found the root cause. It appears to failed silently while > setting up the mail provider as seen in the logs:: > > INFO 2020-02-09 15:33:42,464 DatabaseProvider:successMessage - SUCCESS: > loaded JDBC driver class [org.mariadb.jdbc.Driver] > INFO 2020-02-09 15:33:42,826 DatabaseProvider:<init> - >>> testcon > succeeded. > INFO 2020-02-09 15:33:42,826 WebloggerStartup:prepare - >>> setup > database provider > DEBUG 2020-02-09 15:33:42,831 WebloggerConfig:getProperty - Fetching > property [mail.configurationType=properties] > DEBUG 2020-02-09 15:33:42,832 WebloggerConfig:getProperty - Fetching > property [mail.jndi.name=mail/Session] > DEBUG 2020-02-09 15:33:42,833 WebloggerConfig:getProperty - Fetching > property [mail.hostname=x.x.x] > DEBUG 2020-02-09 15:33:42,833 WebloggerConfig:getProperty - Fetching > property [mail.username=null] > DEBUG 2020-02-09 15:33:42,833 WebloggerConfig:getProperty - Fetching > property [mail.password=null] > DEBUG 2020-02-09 15:33:42,834 WebloggerConfig:getProperty - Fetching > property [mail.port=null] > DEBUG 2020-02-09 15:33:43,007 Digester:register - register('-//Apache > Software Foundation//DTD Tiles Configuration 3.0//EN', > 'jar:file:/usr/local/www/apache-tomcat/webapps/blog/WEB-INF/lib/tiles-core-3.0.8.jar!/org/apache/tiles/resources/tiles-config_3_0.dtd' > INFO 2020-02-09 15:33:43,446 TilesAccess:setContainer - Publishing > TilesContext for context: > org.apache.struts2.tiles.StrutsWildcardServletApplicationContext > INFO 2020-02-09 15:33:43,458 TilesAccess:setContainer - Removing > TilesContext for context: > org.apache.struts2.tiles.StrutsWildcardServletApplicationContext > > To be more precise with more code modification: > > package org.apache.roller.weblogger.business; > > import ...; > public class MailProvider { > > public MailProvider() throws StartupException { > > String connectionTypeString = > WebloggerConfig.getProperty("mail.configurationType"); > if ("properties".equals(connectionTypeString)) { > type = ConfigurationType.MAIL_PROPERTIES; > } > String jndiName = WebloggerConfig.getProperty("mail.jndi.name > "); > mailHostname = WebloggerConfig.getProperty("mail.hostname"); > mailUsername = WebloggerConfig.getProperty("mail.username"); > mailPassword = WebloggerConfig.getProperty("mail.password"); > try { > String portString = WebloggerConfig.getProperty("mail.port"); > if (portString != null) { > mailPort = Integer.parseInt(portString); > } > } catch (Exception e) { > LOG.warn("mail server port not a valid integer, ignoring"); > } > > // init and connect now so we fail early > if (type == ConfigurationType.JNDI_NAME) { > LOG.info(">>> ConfigurationType.JNDI_NAME"); > if (jndiName != null && !jndiName.startsWith("java:")) { > jndiName = "java:comp/env/" + jndiName; > } > try { > Context ctx = new InitialContext(); > session = (Session) ctx.lookup(jndiName); > LOG.info(">>> ConfigurationType.JNDI_NAME session > created"); > } catch (NamingException ex) { > throw new StartupException("ERROR looking up mail-session > with JNDI name: " + jndiName); > } > } else { > LOG.info(">>> ConfigurationType.MAIL_PROPERTIES"); > Properties props = new Properties(); > props.put("mail.smtp.host", mailHostname); > if (mailUsername != null && mailPassword != null) { > props.put("mail.smtp.auth", "true"); > } > if (mailPort != -1) { > props.put("mail.smtp.port", ""+mailPort); > } > session = Session.getDefaultInstance(props, null); > LOG.info(">>> ConfigurationType.MAIL_PROPERTIES session > created"); > } > > try { > Transport transport = getTransport(); > transport.close(); > LOG.info(">>> test transport succeeded."); > } catch (Exception e) { > throw new StartupException("ERROR connecting to mail server", > e); > } > > } > } > > and the resulting logs: > > INFO 2020-02-09 15:49:35,586 DatabaseProvider:successMessage - SUCCESS: > loaded JDBC driver class [org.mariadb.jdbc.Driver] > INFO 2020-02-09 15:49:35,900 DatabaseProvider:<init> - >>> testcon > succeeded. > INFO 2020-02-09 15:49:35,900 WebloggerStartup:prepare - >>> setup > database provider > DEBUG 2020-02-09 15:49:35,904 WebloggerConfig:getProperty - Fetching > property [mail.configurationType=properties] > DEBUG 2020-02-09 15:49:35,905 WebloggerConfig:getProperty - Fetching > property [mail.jndi.name=mail/Session] > DEBUG 2020-02-09 15:49:35,905 WebloggerConfig:getProperty - Fetching > property [mail.hostname=x.x.x] > DEBUG 2020-02-09 15:49:35,906 WebloggerConfig:getProperty - Fetching > property [mail.username=null] > DEBUG 2020-02-09 15:49:35,906 WebloggerConfig:getProperty - Fetching > property [mail.password=null] > DEBUG 2020-02-09 15:49:35,907 WebloggerConfig:getProperty - Fetching > property [mail.port=null] > INFO 2020-02-09 15:49:35,907 MailProvider:<init> - >>> > ConfigurationType.MAIL_PROPERTIES > DEBUG 2020-02-09 15:49:36,063 Digester:register - register('-//Apache > Software Foundation//DTD Tiles Configuration 3.0//EN', > 'jar:file:/usr/local/www/apache-tomcat/webapps/blog/WEB-INF/lib/tiles-core-3.0.8.jar!/org/apache/tiles/resources/tiles-config_3_0.dtd' > INFO 2020-02-09 15:49:36,485 TilesAccess:setContainer - Publishing > TilesContext for context: > org.apache.struts2.tiles.StrutsWildcardServletApplicationContext > INFO 2020-02-09 15:49:36,503 TilesAccess:setContainer - Removing > TilesContext for context: > org.apache.struts2.tiles.StrutsWildcardServletApplicationContext > > It seems to fail silently during getting a Session of the MailProvider > creation. The mail server FQDN is resolvable to IP in the same private > subnet and is also configured, without authentication required, to allow > any connection on the same subnet to send e-mail. > > Thanks, > Tommy > > On Sun, Feb 9, 2020 at 1:48 PM Tommy Pham <tommy...@gmail.com> wrote: > >> Hi Dave, >> >> Thanks for the clarification regarding the "make this work" and trying to >> duplicate the issue. >> >> Hi Anil, >> >> The Tomcat log was from catalina.out. I'll try to increase the log level >> for Tomcat as you suggested to see if it would provide some insight. >> >> @All, >> >> I've just tried a new install of the older version 5.2.4 and the context >> was able to startup. I was able to access the initial startup page for the >> New User Registration and etc.. even though there are a lot of >> IllegalArgumentException (null) for "unable to read class ..." in Tomcat: >> >> https://pastebin.com/n6wyutPk >> >> I've double check for file system permissions. All files are either 640 >> or 644 and the directories are 755. Both files and directories are owned >> by the www:www (user:group) recursively which was used to start the >> Tomcat service. The roller log is clean with more verbose information: >> >> INFO 2020-02-09 12:59:54,363 ContinuousWorkerThread:run - >> HitCountQueueProcessor Started. >> INFO 2020-02-09 12:59:54,364 ContinuousWorkerThread:run - >> HitCountQueueProcessor Done. >> INFO 2020-02-09 13:00:33,796 DatabaseProvider:successMessage - SUCCESS: >> Got parameters. Using configuration type JDBC_PROPERTIES >> INFO 2020-02-09 13:00:33,802 DatabaseProvider:successMessage - -- Using >> JDBC driver class: org.mariadb.jdbc.Driver >> INFO 2020-02-09 13:00:33,803 DatabaseProvider:successMessage - -- Using >> JDBC connection URL: >> jdbc:mysql://x.x.x.x:3306/roller?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8 >> INFO 2020-02-09 13:00:33,804 DatabaseProvider:successMessage - -- Using >> JDBC username: roller >> INFO 2020-02-09 13:00:33,804 DatabaseProvider:successMessage - -- Using >> JDBC password: [hidden] >> INFO 2020-02-09 13:00:33,811 DatabaseProvider:successMessage - SUCCESS: >> loaded JDBC driver class [org.mariadb.jdbc.Driver] >> INFO 2020-02-09 13:00:35,911 WebloggerFactory:bootstrap - Bootstrapping >> Roller Weblogger business tier >> INFO 2020-02-09 13:00:35,912 WebloggerFactory:bootstrap - Weblogger >> Provider = org.apache.roller.weblogger.business.GuiceWebloggerProvider >> INFO 2020-02-09 13:00:35,944 DatabaseProvider:successMessage - SUCCESS: >> Got parameters. Using configuration type JDBC_PROPERTIES >> INFO 2020-02-09 13:00:35,945 DatabaseProvider:successMessage - -- Using >> JDBC driver class: org.mariadb.jdbc.Driver >> INFO 2020-02-09 13:00:35,948 DatabaseProvider:successMessage - -- Using >> JDBC connection URL: >> jdbc:mysql://x.x.x.x:3306/roller?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8 >> INFO 2020-02-09 13:00:35,948 DatabaseProvider:successMessage - -- Using >> JDBC username: roller >> INFO 2020-02-09 13:00:35,951 DatabaseProvider:successMessage - -- Using >> JDBC password: [hidden] >> INFO 2020-02-09 13:00:35,966 DatabaseProvider:successMessage - SUCCESS: >> loaded JDBC driver class [org.mariadb.jdbc.Driver] >> INFO 2020-02-09 13:00:36,088 JPAPersistenceStrategy:<init> - >> hibernate.transaction.factory_class: >> org.hibernate.transaction.JTATransactionFactory >> INFO 2020-02-09 13:00:36,089 JPAPersistenceStrategy:<init> - >> eclipselink.persistence-context.flush-mode: auto >> INFO 2020-02-09 13:00:36,093 JPAPersistenceStrategy:<init> - >> hibernate.transaction.manager_lookup_class: >> org.hibernate.transaction.JBossTransactionManagerLookup >> INFO 2020-02-09 13:00:40,137 IndexManagerImpl:<init> - search enabled: >> true >> INFO 2020-02-09 13:00:40,142 IndexManagerImpl:<init> - index dir: >> /usr/local/www/_apps_/java/roller5_data/search-index >> INFO 2020-02-09 13:00:40,201 ThreadManagerImpl:<init> - Instantiating >> Thread Manager >> INFO 2020-02-09 13:00:40,212 WebloggerFactory:bootstrap - Roller >> Weblogger business tier successfully bootstrapped >> INFO 2020-02-09 13:00:40,213 WebloggerFactory:bootstrap - Version: >> 5.2.4 >> INFO 2020-02-09 13:00:40,213 WebloggerFactory:bootstrap - Revision: >> r8de816ea5bb8a2391855ec95192781669008927d >> INFO 2020-02-09 13:00:40,214 WebloggerImpl:initialize - Initializing >> Roller Weblogger business tier >> INFO 2020-02-09 13:00:41,565 ThemeManagerImpl:loadAllThemesFromDisk - >> Loading themes from /usr/local/www/apache-tomcat/webapps/blog5/themes... >> INFO 2020-02-09 13:00:41,606 ThemeManagerImpl:loadAllThemesFromDisk - >> Loaded theme 'basic' >> INFO 2020-02-09 13:00:41,651 ThemeManagerImpl:loadAllThemesFromDisk - >> Loaded theme 'basicmobile' >> INFO 2020-02-09 13:00:41,681 ThemeManagerImpl:loadAllThemesFromDisk - >> Loaded theme 'gaurav' >> INFO 2020-02-09 13:00:41,697 ThemeManagerImpl:loadAllThemesFromDisk - >> Loaded theme 'fauxcoly' >> INFO 2020-02-09 13:00:41,716 ThemeManagerImpl:loadAllThemesFromDisk - >> Loaded theme 'frontpage' >> INFO 2020-02-09 13:00:41,717 ThemeManagerImpl:initialize - Successfully >> loaded 5 themes from disk. >> ... >> >> I think I'll modify the code cloned from github to see if I can narrow >> down the point of failure. >> >> Thank you, >> Tommy >> >> >> >> On Sun, Feb 9, 2020 at 8:00 AM Anil Gangolli <a...@busybuddha.org> wrote: >> >>> >>> Tommy, >>> >>> Some suggestions that might help: >>> * If you have a catalina.out file, check it. >>> * You might need to adjust the Catalina log level. Catalina is the >>> "container" mentioned in the SEVERE listener startup error message. >>> This tip is old, but I think the config is the same in Tomcat 9: >>> >>> https://stackoverflow.com/questions/36617732/how-to-check-container-log-of-tomcat >>> >>> >>> --a. >>> >>> On 2/8/20 1:57 PM, Dave wrote: >>> > Hi Tommy, >>> > >>> > I tried to reproduce this problem by using the same Tomcat, MariaDB >>> server >>> > and client versions as you are using and could not. I used the >>> > installation.type=auto and database.configurationType=jdbc and started >>> with >>> > a fresh (empty) database. >>> > >>> > OS: MacOS 10.15.3 >>> > JDK: java version "11" 2018-09-25 >>> > Web Container: Tomcat 9.0.30 >>> > DB: MariaDB 10.4.12 >>> > JDBC client: MariaDB Java client 2.5.4 >>> > >>> > I guess there could be some problem that only occurs on OpenJDK but >>> not on >>> > Oracle JDK? But then again, I run my Roller site on Kubernetes using >>> Docker >>> > image created from tomcat:9.0.20-jre11-slim, which is OpenJDK. >>> > >>> > What's really odd is that you are getting no exceptions. Are there any >>> > exceptions in any of the other log files under tomcat/logs? >>> > >>> > Are you able to login to the MariaDB database using the mysql client >>> from >>> > the host that is running Tomcat? >>> > >>> > Dave >>> > >>> > >>> > >>> > >>> > On Fri, Feb 7, 2020 at 6:36 PM Dave <snoopd...@gmail.com> wrote: >>> > >>> >> That "make this work" comment is about the @AllowedMethods annotation. >>> >> Because the annotation did not work (at that time), we had to use >>> >> struts.xml to specify allowed methods. The comment does not mean the >>> class >>> >> does not work :-) >>> >> >>> >> The installation process should be working unless there is a new bug, >>> or >>> >> there is some issue with MariaDB vs MySQL. Let's get to the bottom of >>> this. >>> >> I will give MariaDB a try over the weekend. >>> >> >>> >> Thanks, >>> >> Dave >>> >> >>> >> >>> >> On Fri, Feb 7, 2020 at 6:07 PM Tommy Pham <tommy...@gmail.com> wrote: >>> >> >>> >>> After some review of the source code, I'm unable to locate where or >>> the >>> >>> conditions which would instantiate: >>> >>> >>> >>> org.apache.roller.weblogger.ui.struts2.core.Install >>> >>> >>> >>> Would you or someone else please confirm? Also, looking that the >>> source >>> >>> code for that same class: >>> >>> >>> >>> /** >>> >>> * Walk user through install process. >>> >>> */ >>> >>> // TODO: make this work >>> >>> @AllowedMethods({"execute","create","upgrade","bootstrap"}) >>> >>> public class Install extends UIAction { >>> >>> >>> >>> Am I correct to assume that the installation process isn't quite >>> complete? >>> >>> >>> >>> Thank you, >>> >>> Tommy >>> >>> >>> >>> >>> >>> On Fri, Feb 7, 2020 at 2:12 PM Tommy Pham <tommy...@gmail.com> >>> wrote: >>> >>> >>> >>>> Hi Dave, >>> >>>> >>> >>>> After some more thought about the application startup process, I >>> decided >>> >>>> to change the DB password to an invalid one to force an expected >>> error >>> >>>> which it did. I also tried changing the installation type from >>> auto to >>> >>>> manual and use the provided MySQL script in dbscripts to create the >>> >>>> schema. It still failed with the same error in Tomcat and no error >>> >>> within >>> >>>> the roller's log. I suspect that either or both of the: >>> >>>> >>> >>>> org.apache.roller.weblogger.business.startup.WebloggerStartup >>> >>>> org.apache.roller.weblogger.business.startup.DatabaseInstaller >>> >>>> >>> >>>> is/are failing because the schema was not created for auto >>> installation >>> >>>> type or it failed to detect the schema for manual despite the >>> successful >>> >>>> test DB connection within: >>> >>>> >>> >>>> org.apache.roller.weblogger.business.DatabaseProvider >>> >>>> >>> >>>> Thanks, >>> >>>> Tommy >>> >>>> >>> >>>> >>> >>>> On Fri, Feb 7, 2020 at 1:13 PM Tommy Pham <tommy...@gmail.com> >>> wrote: >>> >>>> >>> >>>>> Hi Dave, >>> >>>>> >>> >>>>> Thanks for the feedback. Here is the log for both Tomcat and >>> Roller: >>> >>>>> https://pastebin.com/PCjF024T >>> >>>>> >>> >>>>> I've just tried a clone from the current github with the same >>> result. >>> >>>>> The only thing I could think of is roller failing silently >>> somewhere >>> >>> but I >>> >>>>> don't know where to start checking. >>> >>>>> >>> >>>>> Thanks, >>> >>>>> Tommy >>> >>>>> >>> >>>>> On Fri, Feb 7, 2020 at 5:03 AM Dave <snoopd...@gmail.com> wrote: >>> >>>>> >>> >>>>>> Hi Tommy, >>> >>>>>> >>> >>>>>> I don't think this mailing list allows attachments. Can you please >>> >>> make >>> >>>>>> your logs available somewhere, like a GitHib gist or a past bin >>> so we >>> >>> can >>> >>>>>> see them. Both the Tomcat and roller.log logs might be useful. >>> >>>>>> >>> >>>>>> Thanks, >>> >>>>>> Dave >>> >>>>>> >>> >>>>>> >>> >>>>>> On Fri, Feb 7, 2020 at 1:52 AM Tommy Pham <tommy...@gmail.com> >>> wrote: >>> >>>>>> >>> >>>>>>> Hello everyone, >>> >>>>>>> >>> >>>>>>> I'm having problems installing Roller 6 in the new Tomcat >>> >>> environment: >>> >>>>>>> OS: FreeBSD 12.1-RELEASE >>> >>>>>>> JDK: OpenJDK 11.0.6 >>> >>>>>>> Web Container: Tomcat 9.0.30 >>> >>>>>>> DB: MariaDB 10.4.12 >>> >>>>>>> JDBC client: MariaDB Java client 2.5.4 >>> >>>>>>> >>> >>>>>>> My roller-custom.properties: >>> >>>>>>> >>> >>>>>>> installation.type=auto >>> >>>>>>> database.configurationType=jdbc >>> >>>>>>> database.jndi.name=jdbc/rollerdb >>> >>>>>>> database.jdbc.driverClass=org.mariadb.jdbc.Driver >>> >>>>>>> >>> >>>>>>> >>> >>> >>> database.jdbc.connectionURL=jdbc:mysql://x.x.x.x:3306/roller?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8 >>> >>>>>>> database.jdbc.username=roller >>> >>>>>>> database.jdbc.password=xxx >>> >>>>>>> mail.configurationType=properties >>> >>>>>>> mail.jndi.name=mail/Session >>> >>>>>>> mail.hostname=x.x.x >>> >>>>>>> >>> >>> >>> mediafiles.storage.dir=/usr/local/www/_apps_/java/roller6_data/mediafiles >>> >>> search.index.dir=/usr/local/www/_apps_/java/roller6_data/search-index >>> >>>>>>> log4j.rootLogger=DEBUG, roller >>> >>>>>>> log4j.logger.org.apache.roller=DEBUG >>> >>>>>>> log4j.logger.net.java.roller=DEBUG >>> >>>>>>> >>> >>>>>>> (log4j were added to troubleshoot this which didn't provide any >>> >>>>>> insight). >>> >>>>>>> Attached is the Tomcat + roller logs. Tomcat reports SEVERE >>> error >>> >>>>>> starting >>> >>>>>>> context /blogger and suggested to look inside the container's >>> log. >>> >>>>>>> However, roller's log didn't show any error. I've also check the >>> >>>>>> database >>> >>>>>>> logs for any errors but none found. Does anyone have any >>> >>> suggestions >>> >>>>>> on >>> >>>>>>> where I can look to investigate further? >>> >>>>>>> >>> >>>>>>> TIA, >>> >>>>>>> Tommy >>> >>>>>>> >>> >>>