<?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>camel-parent</artifactId>
            <version>2.6-SNAPSHOT</version>
	</parent>

	<artifactId>camel-itest-activemq-highvolume</artifactId>
	<packaging>bundle</packaging>
	<name>Camel :: ITest :: ActiveMq :: High Volume</name>
	<description>Integration Test using ActiveMq with Camel to generate high volume messages</description>
	
	<properties>
        <camel.osgi.import.pkg>
            org.apache.activemq.broker,
            org.apache.activemq.broker.region.policy,
            org.apache.activemq.broker.region.virtual,
            org.apache.activemq.usage,
            org.apache.activemq.util,
            org.apache.activemq.xbean,
            org.springframework.jms.connection;version="3.0.3.RELEASE",
            *
        </camel.osgi.import.pkg>
        <camel.osgi.private.pkg>
        	org.apache.camel.itest.highvolume
        </camel.osgi.private.pkg>
        <camel.osgi.dynamic>
            *
        </camel.osgi.dynamic>
    </properties>

	<dependencies>
		<!-- Camel -->
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-spring</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-core-xml</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-jms</artifactId>
		</dependency>
		
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
		</dependency>
		
		<!--  ActiveMq & activemq - camel -->
		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-core</artifactId>
	      <!-- <version>5.4.0</version> -->
		</dependency>
		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-core</artifactId>
	      <!-- <version>5.4.0</version> -->
		</dependency>
	    <dependency>
	      <groupId>org.apache.activemq</groupId>
	      <artifactId>activemq-pool</artifactId>
	      <version>5.3.2</version>
	    </dependency>
	    <dependency>
	      <groupId>org.apache.xbean</groupId>
	      <artifactId>xbean-spring</artifactId>
	    </dependency>
		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-camel</artifactId>
		</dependency>
	</dependencies>
	
   <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>
          <includePluginDependencies>false</includePluginDependencies>
        </configuration>
      </plugin>

      <!-- Allows the routes to be run via 'mvn camel:run' -->
      <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
	
</project>
