<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:pfv3ee6wc</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>
