<netbeans-deployment>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
    <!--
    The icon element contains a path to the icon to be used to present the server
    in the server registry.
    -->
    <icon>org/netbeans/modules/payara/common/resources/server</icon>
    
    <!--
    The disconnected-string element contains the String parameter to DeploymentFactory.getDisconnectedDeploymentManager()
    -->
    <disconnected-string>deployer:pfv5ee8</disconnected-string>
    
    <!--
    The container-limitation element modifies a plugin to say that not all j2ee deployments are valid.
    For example, a web-only server would include
    <container-limitation> <war-deploy/> </container-limitation>
    to indicate that only war deployments are accepted.
    If a container-limitation element is not present, all j2ee deployments are assumed valid.
    If a container-limitation element is present, then only j2ee deployment types explicitly
    mentioned are allowed.
    -->
    <!-- v3 ee6 has no limitations...
    <container-limitation>
        <ear-deploy/>
        <war-deploy/>
        <ejbjar-deploy/>
    </container-limitation>
    -->
    <web-context-root>
        <xpath>/</xpath>
        <prop-name>contextRoot</prop-name>
    </web-context-root>
    
</netbeans-deployment>
