Jump to: navigation, search

Jetty/Feature/Hot Deployment



Introduction

Jetty provides capability to deploy an arbitrary context or web application by monitoring a directory for changes. If a web application or a context descriptor is added to the directory, a new context will be deployed. If a context descriptor is touched/updated then it's context will be stopped, reconfigured and redeployed. If a context descriptor is removed, then it's context will be stopped and removed from the server.

Feature

The deployment manager is an more state oriented mechanism suitable for developers and embedded users to customize to a variety of use cases. Below is an example of the jetty.xml that is used to create the basic deployment manager which is then used to plug in the ContextProvider and the WebAppProvider that back the Hot Deployment mechanism. Also provided in the example is how to go about adding in another node to the deployment state, in this case a debug binding. In the jetty distribution this xml can be found in the jetty-deploy.xml file which coupled with the jetty-contexts.xml and jetty-webapps.xml files comprise the stock jetty hot deployment mechanism.

<Configure id="Server" class="org.eclipse.jetty.server.Server">
 
    <Call name="addBean">
      <Arg>
        <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
          <Set name="contexts">
            <Ref id="Contexts" />
          </Set>
          <Call name="setContextAttribute">
            <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
            <Arg>.*/jsp-api-[^/]*\.jar$|.*/jsp-[^/]*\.jar$</Arg>
          </Call>
 
 
          <!-- Add a customize step to the deployment lifecycle -->
          <!-- uncomment and replace DebugBinding with your extended AppLifeCycle.Binding class 
          <Call name="insertLifeCycleNode">
            <Arg>deployed</Arg>
            <Arg>starting</Arg>
            <Arg>customise</Arg>
          </Call>
          <Call name="addLifeCycleBinding">
            <Arg>
              <New class="org.eclipse.jetty.deploy.bindings.DebugBinding">
                <Arg>customise</Arg>
              </New>
            </Arg>
          </Call>
          -->
 
        </New>
      </Arg>
    </Call>
</Configure>

Additional Resources

Previously, this feature has been implemented via ContextDeployer and WebappDeployer which have both been deprecated. Context Provider information is now available here. WebApp Provider information is available here.