<?xml version="1.0" encoding="UTF-8"?>

<!--
  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.
-->
<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.camel</groupId>
        <artifactId>examples</artifactId>
        <version>2.1.0</version>
    </parent>

    <artifactId>camel-example-spring-jms</artifactId>
    <packaging>bundle</packaging>
    <name>Camel :: Example :: Spring :: JMS</name>
    <description>An example using Spring XML to talk to the JMS server from different kind of client techniques
        and having AOP aspect to perform audit trails in the Camel Server
    </description>
    <properties>
        <camel.osgi.export.pkg>org.apache.camel.example.server.*</camel.osgi.export.pkg>
        <camel.osgi.import.additional>org.apache.activemq.xbean,org.apache.activemq.broker,org.apache.activemq.pool</camel.osgi.import.additional>
    </properties>

    <dependencies>
        <!-- START SNIPPET: e1 -->
        <!-- required by both client and server -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-camel</artifactId>
        </dependency>
        <!-- END SNIPPET: e1 -->

        <!-- START SNIPPET: e2 -->
        <!-- xbean is required for ActiveMQ broker configuration in the spring xml file -->
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-spring</artifactId>
        </dependency>
        <!-- END SNIPPET: e2 -->

        <!-- START SNIPPET: e3 -->
        <!-- required jars for aspectj AOP support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>2.1_3</version>
        </dependency>
        <!-- END SNIPPET: e3 -->

        <!-- for logging using log4j.properties in src/main/resources -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        
        <!-- for testing -->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <scope>test</scope>
        </dependency>

    </dependencies>
  
    <profiles>
        <profile>
            <id>CamelServer</id>
            <properties>
                <!-- we use Camel spring Main class as the server got all what it needs to start in the camel-server.xml file -->
                <target.main.class>org.apache.camel.spring.Main</target.main.class>
                <target.cmd.args>-ac META-INF/spring/camel-server.xml</target.cmd.args>
            </properties>
        </profile>
        <profile>
            <id>CamelServerAOP</id>
            <properties>
                <!-- we use Camel spring Main class as the server got all what it needs to start in the camel-server-aop.xml file -->
                <target.main.class>org.apache.camel.spring.Main</target.main.class>
                <target.cmd.args>-ac META-INF/spring/camel-server-aop.xml</target.cmd.args>
            </properties>
        </profile>
        <profile>
            <id>CamelClient</id>
            <properties>
                <!-- we start using our own class to control what we do in the main -->
                <target.main.class>org.apache.camel.example.client.CamelClient</target.main.class>
            </properties>
        </profile>
        <profile>
            <id>CamelClientRemoting</id>
            <properties>
                <!-- we start using our own class to control what we do in the main -->
                <target.main.class>org.apache.camel.example.client.CamelClientRemoting</target.main.class>
            </properties>
        </profile>
        <profile>
            <id>CamelClientEndpoint</id>
            <properties>
                <!-- we start using our own class to control what we do in the main -->
                <target.main.class>org.apache.camel.example.client.CamelClientEndpoint</target.main.class>
            </properties>
        </profile>
    </profiles>
    <build>
        <plugins>
            <!-- Allows the example to be run via 'mvn compile exec:java' -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <configuration>
                    <mainClass>${target.main.class}</mainClass>
                    <includePluginDependencies>false</includePluginDependencies>
                    <commandlineArgs>${target.cmd.args}</commandlineArgs>
                </configuration>
            </plugin>
            <plugin>
               <artifactId>maven-surefire-plugin</artifactId>
               <configuration>
                 <forkMode>pertest</forkMode>
                 <childDelegation>false</childDelegation>
                 <useFile>true</useFile>
                 <includes>
                   <include>**/*Test.*</include>
                 </includes>
               </configuration>
            </plugin>
        </plugins>
    </build>

</project>
