<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
    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.
-->

<!-- $Rev: 590482 $ $Date: 2007-10-30 14:51:54 -0700 (Tue, 30 Oct 2007) $ -->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.geronimo.plugins</groupId>
        <artifactId>tomcat</artifactId>
        <version>3.0-M1</version>
    </parent>

    <groupId>org.apache.geronimo.configs</groupId>
    <artifactId>tomcat7-clustering-builder-wadi</artifactId>
    <name>Geronimo Plugins, Tomcat :: Clustering Builder for WADI</name>
    <packaging>car</packaging>

    <description>Deployment for WADI clustering on Tomcat 6.</description>

    <dependencies>
        <dependency>
            <groupId>org.apache.geronimo.configs</groupId>
            <artifactId>tomcat7-deployer</artifactId>
            <version>${project.version}</version>
            <type>car</type>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.modules</groupId>
            <artifactId>geronimo-tomcat7-clustering-builder-wadi</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.configs</groupId>
            <artifactId>tomcat7-clustering-wadi</artifactId>
            <version>${project.version}</version>
            <type>car</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.geronimo.buildsupport</groupId>
                <artifactId>car-maven-plugin</artifactId>
                <configuration>
                    <category>Tomcat</category>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.geronimo.configs</groupId>
                            <artifactId>tomcat7-clustering-wadi</artifactId>
                            <version>${project.version}</version>
                            <type>car</type>
                            <import>classes</import>
                        </dependency>
                    </dependencies>
                    <instance>
                        <plugin-artifact>
                            <config-xml-content>
                                <gbean name="TomcatClusteringBuilder">
                                    <attribute name="defaultSweepInterval">${DefaultWadiSweepInterval}</attribute>
                                    <attribute name="defaultNumPartitions">${DefaultWadiNumPartitions}</attribute>
                                </gbean>
                             </config-xml-content>
                            <config-substitution key="DefaultWadiSweepInterval">36000</config-substitution>
                            <config-substitution key="DefaultWadiNumPartitions">24</config-substitution>
                        </plugin-artifact>
                    </instance>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
