Hi devs, Current Situation =============
In the past we discussed this and even reached some conclusions but it wasn’t implemented. The relevant thread: * Original idea: http://markmail.org/message/yl77mvdtznii263l * Updated idea: http://markmail.org/message/6cvm5hocvtbqtgp6 This thread supersedes these old threads. In the meantime Thomas has also implemented https://jira.xwiki.org/browse/XWIKI-13867 (BTW I added several comments but didn’t get any answer from them ;)). So here’s an updated proposal: Use Cases: ========= - UC1: Easy install: no need to explode the WAR to install XWiki. - UC2: Easy upgrade: no need to take care about backupping specifically the configuration in WEB-INF so that it's not overwritten by an upgrade of the WAR - UC3: Should be possible to have multiple installs on the same machine and running at the same time - UC4: Should be possible to control the location of the configuration files for our automated functional tests (so that we control the configuration used) - UC5: (Future) Make XWiki work without configuration files - UC6: Allow our users of the Docker image to configure XWiki outside of the container (see https://jira.xwiki.org/browse/XDOCKER-20). Implementation Proposal: ==================== * Configuration files = xwiki.cfg, xwiki.poperties and hibernate.cfg.xml * Allow configuring the permanent directory with the XWIKI_DATA_DIR environment variable (in addition to the existing xwiki.data.dir system property, i.e. -Dxwiki.data.dir=…). In Java this is done by using System.getenv() * Load the configuration files in a specific order, each level overwriting the previous level, except for hibernate.cfg.xml since it’s harder to merge XML. The idea is that users will only need to define configuration properties that they want to override. * The order is the following: ** Load from WEB-INF/ ** Load from the location defined by the JNDI property ** Load from [permanent directory]/config/ * For xwiki.properties and xwiki.cfg, if the property is not found, then default to a value provided by the code. * Add some comments at the top of xwiki.cfg, xwiki.properties and hibernate.cfg.xml to explain to the user how they should customize them. Option 1: * Right now if the permanent dir is not defined, we default to using the servlet temporary directory (i.e. “javax.servlet.context.tempdir” system property). One option is check the OS and: ** If on unix, default to /etc/xwiki/ ** If on windows, default to the user home profile (using System.getProperty("user.home”) or System.getenv("USERPROFILE”)) Option 1bis: * Right now if the permanent dir is not defined, we default to using the servlet temporary directory (i.e. “javax.servlet.context.tempdir” system property). One option is to default to the user ome directory instead (using System.getProperty("user.home”)). Note that for UC5 my POV is that in the future: * We should move the database configuration to a step in an Installation Wizard that execues on XWiki’s first run. This would internally generate the Hibernate configuration. * Provide defaults for all xwiki.cfg properties (it’s already the case for xwiki.properties normally). Note: I don’t know where https://jira.xwiki.org/browse/XWIKI-13867 fits; it could maybe fit with Option 1 (which is why I wrote option 1 and 1bis actually). WDYT? Thanks -Vincent

