Install Apache Roller5
TweetPosted on Thursday May 15, 2014 at 11:54AM in Technology
Environment
- WildFly 8.1.0.CR1
- Oracle JDK8u5
- PostgreSQL 9.2.4
- roller-weblogger-5.0.3-for-javaee.tar.gz
- OS X 10.9.2
Preconditions
- Ensure appropriate JDBC driver is installed to WildFly.
Create a database for Roller
postgres=# create database roller owner kyle encoding 'UTF8' TEMPLATE template0; CREATE DATABASE postgres=#
Create a DataSource
- Using jboss-cli.
data-source add \ --name=RollerDS \ --driver-name=postgresql \ --connection-url=jdbc:postgresql://localhost:5432/roller \ --jndi-name=java:jboss/jdbc/RollerDS \ --user-name=postgres \ --password=postgres \ --jta=false \ --use-java-context=false
Create the WAR with modified persistence.xml
Why need this?
- Roller5 uses JPA, and defines its JNDI datasource name in persistence.xml as “jdbc/rollerdb”
- But, WildFly doesn't allow such JNDI name. datasource creation will fail like this:
JBAS010471: Jndi name have to start with java:/ or java:jboss/
- Also, Roller5 installation guide mentioned about installation procedure for JBoss6, but it seems obsoleted.
- If possible, I recommend you to use other application servers like Tomcat or GlassFish at the moment because it needs many additional procedures to getting work with WildFly.
Extract the WAR
kyle-no-MacBook:tmp kyle$ pwd /tmp kyle-no-MacBook:tmp kyle$ mkdir roller kyle-no-MacBook:tmp kyle$ cd roller kyle-no-MacBook:roller kyle$ mkdir war kyle-no-MacBook:roller kyle$ cd war kyle-no-MacBook:war kyle$ jar xvf ~/Downloads/tmp/roller-weblogger-5.0.3-javaee/webapp/roller-5.0.3-javaee.war
Extract roller-planet-business-5.0.3.jar
kyle-no-MacBook:war kyle$ cd ../ kyle-no-MacBook:roller kyle$ mkdir planet kyle-no-MacBook:roller kyle$ cd planet kyle-no-MacBook:planet kyle$ jar xvf ../war/WEB-INF/lib/roller-planet-business-5.0.3.jar
Modify persistence.xml inside roller-planet-business-5.0.3.jar
kyle-no-MacBook:planet kyle$ sed -i -e "s/jdbc\/rollerdb/java:jboss\/jdbc\/RollerDS/" META-INF/persistence.xml
- Now, persistence.xml like this:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <persistence-unit name ="PlanetPU" transaction-type = "RESOURCE_LOCAL"> <non-jta-data-source>java:jboss/jdbc/RollerDS</non-jta-data-source> <mapping-file>org/apache/roller/planet/pojos/RuntimeConfigProperty.orm.xml</mapping-file> <mapping-file>org/apache/roller/planet/pojos/Planet.orm.xml</mapping-file> <mapping-file>org/apache/roller/planet/pojos/PlanetGroup.orm.xml</mapping-file> <mapping-file>org/apache/roller/planet/pojos/Subscription.orm.xml</mapping-file> <mapping-file>org/apache/roller/planet/pojos/SubscriptionEntry.orm.xml</mapping-file> </persistence-unit> </persistence>
Extract roller-weblogger-business-5.0.3.jar
kyle-no-MacBook:planet kyle$ cd .. kyle-no-MacBook:roller kyle$ mkdir weblogger kyle-no-MacBook:roller kyle$ cd weblogger/ kyle-no-MacBook:weblogger kyle$ jar xvf ../war/WEB-INF/lib/roller-weblogger-business-5.0.3.jar
Modify persistence.xml inside roller-weblogger-business-5.0.3.jar
- Replace JNDI name
kyle-no-MacBook:weblogger kyle$ sed -i -e "s/jdbc\/rollerdb/java:jboss\/jdbc\/RollerDS/" META-INF/persistence.xml
- Add declaration of an additional property which enables bind EntityManagerFactory to JNDI. detail information: [3]
<properties> <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/jpa/RollerEMF" /> </properties>
- Also, trimming is needed.
kyle-no-MacBook:weblogger kyle$ sed -i -e "s/orm\.xml *</orm\.xml</g" META-INF/persistence.xml
- If skip this, WildFly will complains like this and deployment fails:
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: RollerPU] Unable to resolve named mapping-file [org/apache/roller/weblogger/pojos/TaskLock.orm.xml ]
- Now, persistence.xml is:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <persistence-unit name ="RollerPU" transaction-type="RESOURCE_LOCAL"> <non-jta-data-source>java:jboss/jdbc/RollerDS</non-jta-data-source> <mapping-file>org/apache/roller/weblogger/pojos/WeblogBookmark.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogEntryComment.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogEntryAttribute.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogBookmarkFolder.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogHitCount.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/PingQueueEntry.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/PingTarget.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogReferrer.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/UserRole.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/RuntimeConfigProperty.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/TaskLock.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/User.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogCategory.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogEntry.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogEntryTagAggregate.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogEntryTag.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogTemplate.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/ObjectPermission.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/WeblogPermission.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/Weblog.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/UserAttribute.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/OAuthConsumerRecord.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/OAuthAccessorRecord.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/MediaFile.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/MediaFileTag.orm.xml</mapping-file> <mapping-file>org/apache/roller/weblogger/pojos/MediaFileDirectory.orm.xml</mapping-file> <class>org.apache.roller.weblogger.pojos.AutoPing</class> <properties> <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/jpa/RollerEMF" /> </properties> </persistence-unit> </persistence>
Create jars
kyle-no-MacBook:roller kyle$ cd planet/ kyle-no-MacBook:planet kyle$ jar cvf ../roller-planet-business-5.0.3-for-wildfly.jar . kyle-no-MacBook:planet kyle$ cd ../weblogger/ kyle-no-MacBook:weblogger kyle$ jar cvf ../roller-weblogger-business-5.0.3-for-wildfly.jar .
Put jars into WEB-INF
kyle-no-MacBook:roller kyle$ pwd /tmp/roller kyle-no-MacBook:roller kyle$ cp roller-planet-business-5.0.3-for-wildfly.jar war/WEB-INF/lib/roller-planet-business-5.0.3.jar kyle-no-MacBook:roller kyle$ cp roller-weblogger-business-5.0.3-for-wildfly.jar war/WEB-INF/lib/roller-weblogger-business-5.0.3.jar
Put jboss-web.xml into WEB-INF
- Path:
kyle-no-MacBook:WEB-INF kyle$ pwd /tmp/roller/war/WEB-INF
- It goes like this:
<?xml version="1.0" encoding="UTF-8"?> <jboss-web> <resource-ref> <res-ref-name>jdbc/rollerdb</res-ref-name> <res-type>javax.sql.DataSource</res-type> <jndi-name>java:jboss/jdbc/RollerDS</jndi-name> </resource-ref> <resource-ref> <res-ref-name>jpa/rolleremf</res-ref-name> <res-type>javax.persistence.EntityManagerFactory</res-type> <jndi-name>java:jboss/jpa/RollerEMF</jndi-name> </resource-ref> <resource-ref> <res-ref-name>mail/Session</res-ref-name> <res-type>javax.mail.Session</res-type> <jndi-name>java:/mail/myMail</jndi-name> </resource-ref> </jboss-web>
- How to define a JavaMail session using CLI might be useful when do you want to define a JavaMail session into WildFly.
Put roller-custom.properties into WEB-INF/classes
- Path:
kyle-no-MacBook:classes kyle$ pwd /tmp/roller/war/WEB-INF/classes
- It goes like this:
jpa.configurationType=jndi jpa.emf.jndi.name=jpa/rolleremf installation.type=auto mediafiles.storage.dir=/Users/kyle/tmp/rollerdata/mediafiles search.index.dir=/Users/kyle/tmp/rollerdata/searchindex log4j.appender.roller.File=/Users/kyle/tmp/rollerdata/roller.log database.jndi.name=java:jboss/jdbc/RollerDS
Create the WAR
kyle-no-MacBook:roller kyle$ pwd /tmp/roller kyle-no-MacBook:roller kyle$ cd war kyle-no-MacBook:war kyle$ jar cvf ../roller.war .
Deploy
cp roller.war ~/apps/wildfly/standalone/deployments
- It goes like this:
2014-05-15 14:25:17,648 TRACE [org.hibernate.type.TypeFactory] (ServerService Thread Pool -- 311) Scoping types to session factory org.hibernate.internal.SessionFactoryImpl@5fcdf39a 2014-05-15 14:25:17,842 TRACE [org.hibernate.type.TypeFactory] (ServerService Thread Pool -- 310) Scoping types to session factory org.hibernate.internal.SessionFactoryImpl@745bcb72 2014-05-15 14:25:18,626 INFO [org.apache.roller.weblogger.business.DatabaseProvider] (MSC service thread 1-3) SUCCESS: Got parameters. Using configuration type JNDI_NAME 2014-05-15 14:25:18,626 INFO [org.apache.roller.weblogger.business.DatabaseProvider] (MSC service thread 1-3) -- Using JNDI datasource name: java:jboss/jdbc/RollerDS 2014-05-15 14:25:18,627 INFO [org.apache.roller.weblogger.business.DatabaseProvider] (MSC service thread 1-3) SUCCESS: located JNDI DataSource [java:jboss/jdbc/RollerDS] 2014-05-15 14:25:19,998 INFO [org.apache.roller.weblogger.ui.core.RollerContext] (MSC service thread 1-3) -------------------------------------------------------------- Roller Weblogger startup INCOMPLETE, user interaction required -------------------------------------------------------------- 2014-05-15 14:25:19,999 INFO [org.apache.roller.weblogger.ui.core.RollerContext] (MSC service thread 1-3) Remember Me enabled: true 2014-05-15 14:25:20,000 INFO [org.apache.roller.weblogger.ui.core.RollerContext] (MSC service thread 1-3) Password Encryption Algorithm set to 'SHA' 2014-05-15 14:25:20,000 INFO [org.apache.roller.weblogger.ui.core.RollerContext] (MSC service thread 1-3) Initializing Velocity 2014-05-15 14:25:20,136 INFO [org.apache.roller.weblogger.ui.rendering.servlets.SearchServlet] (MSC service thread 1-3) Initializing SearchServlet 2014-05-15 14:25:20,136 INFO [org.apache.roller.weblogger.ui.rendering.servlets.FeedServlet] (MSC service thread 1-3) Initializing FeedServlet 2014-05-15 14:25:20,137 INFO [org.apache.roller.weblogger.ui.rendering.util.cache.WeblogFeedCache] (MSC service thread 1-3) {size=200, id=cache.weblogfeed, timeout=3600, enabled=true} 2014-05-15 14:25:20,139 INFO [org.apache.roller.weblogger.util.cache.CacheManager] (MSC service thread 1-3) Cache Manager Initialized. 2014-05-15 14:25:20,139 INFO [org.apache.roller.weblogger.util.cache.CacheManager] (MSC service thread 1-3) Cache Factory = org.apache.roller.weblogger.util.cache.ExpiringLRUCacheFactoryImpl 2014-05-15 14:25:20,142 INFO [org.apache.roller.weblogger.ui.rendering.util.cache.SiteWideCache] (MSC service thread 1-3) {size=50, id=cache.sitewide, enabled=true, timeout=1800} 2014-05-15 14:25:20,142 INFO [org.apache.roller.weblogger.ui.rendering.servlets.ResourceServlet] (MSC service thread 1-3) Initializing ResourceServlet 2014-05-15 14:25:20,142 INFO [org.apache.roller.weblogger.ui.rendering.servlets.PageServlet] (MSC service thread 1-3) Initializing PageServlet 2014-05-15 14:25:20,143 INFO [org.apache.roller.weblogger.ui.rendering.util.cache.WeblogPageCache] (MSC service thread 1-3) {size=400, id=cache.weblogpage, enabled=true, timeout=3600} 2014-05-15 14:25:20,143 INFO [org.apache.roller.weblogger.ui.rendering.servlets.PageServlet] (MSC service thread 1-3) Referrer processing enabled = true 2014-05-15 14:25:20,143 INFO [org.apache.roller.weblogger.ui.rendering.servlets.MediaResourceServlet] (MSC service thread 1-3) Initializing ResourceServlet 2014-05-15 14:25:20,144 INFO [org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet] (MSC service thread 1-3) Initializing CommentServlet 2014-05-15 14:25:20,153 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured CommentValidator: ブラックリストコメント排除 / org.apache.roller.weblogger.ui.rendering.plugins.comments.BlacklistCommentValidator 2014-05-15 14:25:20,154 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured CommentValidator: 多すぎるリンクが入ったコメントバリケーダ / org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessLinksCommentValidator 2014-05-15 14:25:20,154 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured CommentValidator: コメントバリケーダ / org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessSizeCommentValidator 2014-05-15 14:25:20,155 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured 3 CommentValidators 2014-05-15 14:25:20,155 INFO [org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet] (MSC service thread 1-3) Comment Throttling DISABLED 2014-05-15 14:25:20,155 INFO [org.apache.roller.weblogger.ui.rendering.servlets.PlanetFeedServlet] (MSC service thread 1-3) Initializing PlanetRssServlet 2014-05-15 14:25:20,156 INFO [org.apache.roller.weblogger.ui.rendering.util.cache.PlanetCache] (MSC service thread 1-3) Planet cache = {size=10, id=cache.planet, timeout=1800, enabled=true} 2014-05-15 14:25:20,156 INFO [org.apache.roller.weblogger.ui.rendering.servlets.RSDServlet] (MSC service thread 1-3) Initializing RSDServlet 2014-05-15 14:25:20,157 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured CommentValidator: ブラックリストコメント排除 / org.apache.roller.weblogger.ui.rendering.plugins.comments.BlacklistCommentValidator 2014-05-15 14:25:20,157 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured CommentValidator: 多すぎるリンクが入ったコメントバリケーダ / org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessLinksCommentValidator 2014-05-15 14:25:20,158 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured CommentValidator: コメントバリケーダ / org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessSizeCommentValidator 2014-05-15 14:25:20,158 INFO [org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager] (MSC service thread 1-3) Configured 3 CommentValidators 2014-05-15 14:25:20,159 INFO [org.apache.roller.weblogger.ui.rendering.servlets.PreviewServlet] (MSC service thread 1-3) Initializing PreviewServlet 2014-05-15 14:25:20,160 INFO [org.apache.roller.weblogger.ui.rendering.servlets.PreviewThemeImageServlet] (MSC service thread 1-3) Initializing PreviewThemeImageServlet 2014-05-15 14:25:20,160 INFO [org.apache.roller.weblogger.ui.rendering.servlets.PreviewResourceServlet] (MSC service thread 1-3) Initializing PreviewResourceServlet
Access to the page
- Finally the top page is shown!
- The button triggers schema creation.
roller=# \d List of relations Schema | Name | Type | Owner --------+--------------------------+-------+---------- public | autoping | table | postgres public | bookmark | table | postgres public | entryattribute | table | postgres ...
- Finally I saw the welcome page!
Don't forget: Reset the installation.type flag
- Roller installation guide said:
Now that you're done with the installation you should turn off Roller's auto-installation system. Edit your roller-custom.properties file and set installation.type=manual. Then restart your server or Roller so that it accepts the new setting.
- So, you need to edit the roller-custom.properties and re-deploy.
References
Tags: wildfly