
Jetty tips
Table of Contents [-]
Jetty 7 and deployment order #
Jetty 7 by default uses ContextProvider that monitors contexts folder for XMLs for all web apps that are deployed. However, there is no way to specify the order of deployment. Therefore, when you have Jetty with some plugins (e.g. analog-clock and marketplace), it may happens that on Jetty restart, only one of those plugins will be available. This is because Jetty on startup takes context xmls in its own order.
The only solution for Jetty 7 is not to use monitoring context provider, but to explicitly write down contexts that has to be loaded in configuration file. The order of context will be the deployment order. So, backup the original /etc/jetty-contexts.xml and write something like this:
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Set name="handler"> <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <Set name="handlers"> <Array type="org.eclipse.jetty.server.Handler"> <Item> <New class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/</Set> <Set name="extraClasspath"><SystemProperty name="jetty.home" />/lib/jetty-server-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar,<SystemProperty name="jetty.home" />/lib/jetty-util-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar,<SystemProperty name="jetty.home" />/lib/jetty-webapp-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar</Set> <Set name="resourceBase"><SystemProperty name="jetty.home" />/webapps/root</Set> <Get name="securityHandler"> <Set name="loginService"> <New class="org.eclipse.jetty.security.HashLoginService" id="defaultLoginService"> <Set name="name">Test Realm</Set> <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set> </New> </Set> </Get> </New> </Item> <Item> <New class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/analog-clock-portlet</Set> <Set name="extraClasspath"><SystemProperty name="jetty.home" />/lib/jetty-server-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar,<SystemProperty name="jetty.home" />/lib/jetty-util-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar,<SystemProperty name="jetty.home" />/lib/jetty-webapp-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar</Set> <Set name="resourceBase"><SystemProperty name="jetty.home" />/webapps/analog-clock-portlet</Set> <Get name="securityHandler"> <Set name="loginService"> <New class="org.eclipse.jetty.security.HashLoginService" id="defaultLoginService"> <Set name="name">Test Realm</Set> <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set> </New> </Set> </Get> </New> </Item> <Item> <New class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/marketplace-portlet</Set> <Set name="extraClasspath"><SystemProperty name="jetty.home" />/lib/jetty-server-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar,<SystemProperty name="jetty.home" />/lib/jetty-util-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar,<SystemProperty name="jetty.home" />/lib/jetty-webapp-<SystemProperty name="app.server.jetty.version" />.v<SystemProperty name="app.server.jetty.version.date" />.jar</Set> <Set name="resourceBase"><SystemProperty name="jetty.home" />/webapps/marketplace-portlet</Set> <Get name="securityHandler"> <Set name="loginService"> <New class="org.eclipse.jetty.security.HashLoginService" id="defaultLoginService"> <Set name="name">Test Realm</Set> <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set> </New> </Set> </Get> </New> </Item> </Array> </Set> </New> </Set> </Configure>
As you can see, each of 3 contexts are written here. The content of each section is equal to its context/.xml file.
Locked files on windows #
Jetty buffers static content for webapps such as HTML files, CSS files, images, etc. If you are using NIO connectors, Jetty uses memory-mapped files to do this. The problem is that on Windows, memory mapping a file causes the file to lock, so that you cannot update or replace the file. Effectively this means that you have to stop Jetty to update a file.
Jetty provides a configuration switch in the webdefault.xml file for the DefaultServlet that enables or disables the use of memory-mapped files. If you are running on Windows and are having file-locking problems, you should set this switch to disable memory-mapped file buffers. Edit it to change useFileMappedBuffer to false. The easiest option is to simply edit the default file contained in the jetty distribution itself.