After some experimentation and some help from DW on the eXist list, I've managed to figure out the following steps for making your single app (MoEML or whatever) available as the root thing on th Jetty server (i.e. localhost:8080 if you're running it locally), while maintaining access to the other bits and pieces if necessary (the Dashboard, eXide, Monex or whatever else you need. These are the steps:
- In
tools/jetty/webapps/exist-webapp-context.xml
, find the element<set name="contextPath">
and make sure it looks like this:<Set name="contextPath">/</Set>
i.e. not /exist. It may be that way already, or it may be /exist. - In
tools/jetty/standalone-webapps/exist-webapp-context.xml
(same filename, different place), make the same change if required. - In
tools/jetty/webapps/portal/WEB-INF/jetty-web.xml
, find the same element and set it to the same thing (again, it may already be correct). - In
webapp/WEB-INF/controller-config.xml
, find this:<root pattern=".*" path="/"/>
Comment it out and replace it with two lines like this:<!--<root pattern=".*" path="/"/>--> <root pattern="/apps/moeml/apps" path="xmldb:exist:///db/apps/"/> <root pattern="/" path="xmldb:exist:///db/apps/moeml/"/>
Where "moeml" is the name of your app. The second line makes the other apps (dashboard etc.) available using the "apps" subfolder of the root (which means you can't have anything in your app's controller that handles an "apps" subfolder).
Note that this was done with a fresh build of eXist 3.0 from the develop branch yesterday, with no use of the installer. We've learned to steer clear of the installer.
I've now built all this into a set of files, configure_exist.sh/xml/xsl. The first is a bash script which expects the path to the eXist instance, and (optionally) the name of the app to make the root. The second is an ant script which is run by bash using the ant which is inside the tools folder of the eXist instance; this parses out what it needs to know, and runs XSLT transforms using the Saxon version which is in the lib/endorsed folder. This means that you can run this deployment script even where neither ant nor Saxon are installed (such as Peach). It has a fragile dependency on the version numbers in filenames of ant and Saxon, but those are easy to update.