//  ========================================================================
//  Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
//  ========================================================================
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================

[[setting-deployment-bindings]]
=== Setting Deployment Bindings

Jetty provides __deployment bindings__, which allows access to the application lifecycle of `DeploymentManager`.

There are a handful of bindings that exist within the core distribution of Jetty:

* `StandardDeployer` (deploying)–Standard binding that deals with deploying a webapp.
* `StandardStarter` (starting)–Standard binding that deals with starting a webapp.
* `StandardStopper` (stopping)–Standard binding that deals with stopping a webapp.
* `StandardUndeployer` (undeploying)–Standard undeployer that deals with undeploying a webapp.
* `DebugBinding` (any specified)–Attaches a binding and prints logging information of a context going through the specified binding target.
* `GlobalWebappConfigBinding` (deploying)–Allows the user to override various settings of a webapp's context globally for all contexts.
+
[source, xml, subs="{sub-order}"]
----
        <Call name="addLifeCycleBinding">
          <Arg>
            <New class="org.eclipse.jetty.deploy.bindings.GlobalWebappConfigBinding" >
              <Set name="jettyXml">file://<Property name="jetty.home" default="." />/etc/global-webapp-context-config.xml</Set>
            </New>
          </Arg>
        </Call>

----
* OrderedGroupBinding (any specified)–Allows the user to set a specific order for bindings to process in a given binding target.
