|
|
Line 1: |
Line 1: |
| {{Jetty Feature | | {{Jetty Feature |
| | introduction = | | | introduction = |
− | Jetty provides capability to deploy an arbitrary context or web application with Jetty-specific configuration. This capability is implemented via ContextDeployer mechanism. | + | Jetty provides capability to deploy an arbitrary context or web application by monitoring a configuration directory for changes to the deployment descriptors. If a descriptor is added to the directory, a new context will be deployed. If a descriptor is touched/updated then it's context will be stopped, reconfigured and redeployed. If a descriptor is removed, then it's context will be stopped and removed from the server. This capability is implemented via [[Jetty/Feature/ContextDeployer|ContextDeployer]] mechanism. |
| + | |
| | body = | | | body = |
− | The [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/ContextDeployer.java?root=RT_JETTY&view=markup ContextDeployer] may be used to (hot)deploy an arbitrary Context or Web Application with Jetty specific configuration. To statically deploy only standard web applications at startup, use the [[JETTY/Feature/WebAppDeployer|WebApp Deployer]]. | + | The [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-deploy/src/main/java/org/eclipse/jetty/deploy/ContextDeployer.java?root=RT_JETTY&view=markup ContextDeployer] may be used to (hot)deploy an arbitrary Context or Web Application with Jetty specific configuration. The deployment descriptors are in [[Jetty/Reference/jetty.xml syntax|jetty xml]] format and define and configure individual contexts. If the scan interval is non-zero, the configuration directory is scanned at that interval (in seconds) for changes to the deployment descriptors. |
− | | + | |
− | ==Overview==
| + | |
− | | + | |
− | Typically a ContextDeployer is defined in a jetty.xml file:
| + | |
− | <source lang="xml">
| + | |
− | <Call name="addLifeCycle">
| + | |
− | <Arg>
| + | |
− | <New class="org.eclipse.jetty.deployer.ContextDeployer">
| + | |
− | <Set name="contexts"><Ref id="Contexts"</Set>
| + | |
− | <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
| + | |
− | <Set name="scanInterval">1</Set>
| + | |
− | </New>
| + | |
− | </Arg>
| + | |
− | </Call>
| + | |
− | </source>
| + | |
− | | + | |
− | The ContextDeployer will scan the '''configurationDir''' directory at intervals of '''scanInterval''' seconds for xml descriptors that define contexts. Any contexts found are deployed to the passed '''contexts''' reference to a HandlerContainer (this is normally an instance of ContextHandlerCollection).
| + | |
− | The deployment descriptors are in [[Jetty/Reference/jetty.xml syntax|jetty xml]] format and define and configure individual contexts. A minimal example is: | + | |
− | <source lang="xml">
| + | |
− | <?xml version="1.0" encoding="ISO-8859-1"?>
| + | |
− | <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
| + | |
− | <Configure class="org.eclipse.jetty.webapp.WebAppContext">
| + | |
− | <Set name="contextPath">/test</Set>
| + | |
− | <Set name="war"><SystemProperty name="jetty.home" default<nowiki>=</nowiki>"."/>/webapps/test</Set>
| + | |
− | </Configure>
| + | |
− | </source>
| + | |
− | | + | |
− | This example creates an instance of [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java?root=RT_JETTY&view=markup WebAppContext] and sets the '''contextPath''' to be "/test" and the '''resourceBase''' to be "$jetty.home/webapps/test". Because the context used is a standard web application context, when started it will inspect the resourceBase for a WEB-INF/web.xml for further configuration.
| + | |
− | | + | |
− | The ContextDeployer is added to the server as a LifeCycle. This simply means that the deployer will be started and stopped with the server. Ie when server.start() is called, then start will also be called on the deployer.
| + | |
− | | + | |
− | ===Property value substitution===
| + | |
− | | + | |
− | The ContextDeployer can automatically do property substitution on the context files that it deploys. You define a ConfigurationManager that manages the properties and pass this into the ContextDeployer. There is currently one implementation of the ConfigurationManager, and that is the <tt>org.mortbay.jetty.deployer.FileConfigurationManager</tt> that reads a properties file and makes available the property values to the ContextDeployer. Here's how you would configure the ContextDeployer:
| + | |
− | | + | |
− | <source lang="xml">
| + | |
− | <Call name="addLifeCycle">
| + | |
− | <Arg>
| + | |
− | <New class="org.mortbay.jetty.deployer.ContextDeployer">
| + | |
− | <Set name="contexts"><Ref id="Contexts"/></Set>
| + | |
− | <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
| + | |
− | <Set name="scanInterval">1</Set>
| + | |
− | <Set name="configurationManager">
| + | |
− | <New class="org.mortbay.jetty.deployer.FileConfigurationManager">
| + | |
− | <Set name="file"><SystemProperty name="jetty.home" default="."/>/foo.properties</Set>
| + | |
− | </New>
| + | |
− | </Set>
| + | |
− | </New>
| + | |
− | </Arg>
| + | |
− | </Call>
| + | |
− | </source>
| + | |
− | | + | |
− | </div></div>
| + | |
− | | + | |
− | Here's an example of the contents of the foo.properties file:
| + | |
− | <source lang="text">
| + | |
− | foo = /funkyapp
| + | |
− | </source>
| + | |
− | | + | |
− | Here's how you would use this in a context xml file:
| + | |
− | <source lang="xml">
| + | |
− | <?xml version="1.0" encoding="ISO-8859-1"?>
| + | |
− | <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
| + | |
− | <Configure class="org.mortbay.jetty.webapp.WebAppContext">
| + | |
− | <Set name="contextPath"><Property name="foo"/></Set>
| + | |
− | <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test</Set>
| + | |
− | </Configure>
| + | |
− | </source>
| + | |
− | | + | |
− | ==Contexts==
| + | |
− | | + | |
− | Because the class of the context is defined in the Configure clause, any type of ContextHandler may be deployed with this mechanism, included base [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java?root=RT_JETTY&view=markup ContextHandler], [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletContextHandler.java?root=RT_JETTY&view=markup ServletContextHandler], [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java?root=RT_JETTY&view=markup WebAppContext] or any class derived from them.
| + | |
− | | + | |
− | ==Hot deploy==
| + | |
− | | + | |
− | If the scan interval is non-zero, the configuration directory is scanned at that interval (in seconds) for changes to the deployment descriptors. If a descriptor is added to the directory, the new context will be deployed. If a descriptor is touched/updated then it's context will be stopped, reconfigured and redeployed. If a descriptor is removed, then it's context will be stopped and removed from the server. | + | |
| | | |
| + | To statically deploy only standard web applications at startup, use the [[JETTY/Feature/WebAppDeployer|WebApp Deployer]]. |
| If the scan interval is zero, then the directory is only scanned at startup. | | If the scan interval is zero, then the directory is only scanned at startup. |
| | | |
− | ==Other things to configure==
| |
− |
| |
− | This mechanism allows the most of the API available on [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java?root=RT_JETTY&view=markup ContextHandler] or its derived classes to be called to configure the web application. Useful things to configure include:
| |
− |
| |
− | * setAttribute
| |
− | * setClassLoader
| |
− | * setContextPath
| |
− | * setVirtualHosts
| |
− | * addServlet
| |
− | * setConfigurations
| |
− | * setExtraClassPath
| |
− | * setDefaultsDescriptor
| |
− | * setDescriptor
| |
− | * setOverrideDescriptor
| |
− | * setSystemClasses
| |
− | * setServerClasses
| |
| | category = [[Category:Jetty Feature]] | | | category = [[Category:Jetty Feature]] |
| }} | | }} |
Jetty provides capability to deploy an arbitrary context or web application by monitoring a configuration directory for changes to the deployment descriptors. If a descriptor is added to the directory, a new context will be deployed. If a descriptor is touched/updated then it's context will be stopped, reconfigured and redeployed. If a descriptor is removed, then it's context will be stopped and removed from the server. This capability is implemented via ContextDeployer mechanism.