<?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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.aries.tx-control</groupId>
		<artifactId>tx-control-provider-jpa-parent</artifactId>
		<version>1.0.1-SNAPSHOT</version>
		<relativePath>../tx-control-provider-jpa-parent/pom.xml</relativePath>
	</parent>
	<groupId>org.apache.aries.tx-control</groupId>
	<artifactId>tx-control-provider-jpa-xa</artifactId>
	<name>OSGi Transaction Control JPA Resource Provider - XA Transactions</name>
	<version>1.0.1-SNAPSHOT</version>

	<description>
        This bundle contains a JPA resource provider for use with the OSGi Transaction Control Service that supports XA transactions.
    </description>

	<dependencies>
		<!-- 
		    Hikari CP dependency 
		    This must come before the JDBC dependency to ensure
		    we embed the dependent version not whatever is
		    repackaged in the jdbc-xa bundle we depend on
		-->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
		</dependency>

		<!-- Internal Aries project dependencies -->
		<dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-common</artifactId>
        </dependency>
		<dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-jpa-common</artifactId>
            <version>${project.parent.version}</version>
            <scope>provided</scope>
        </dependency>
		<dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-jdbc-common</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-jdbc-xa</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>

		<!-- OSGi API dependencies -->
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.transaction.control</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.util.tracker</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.cm</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.service.jpa</artifactId>
		</dependency>
		<dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.metatype.annotations</artifactId>
        </dependency>

		<!-- JPA API dependency -->
		<dependency>
			<groupId>org.apache.aries.jpa.javax.persistence</groupId>
			<artifactId>javax.persistence_2.1</artifactId>
		</dependency>
		
		<!-- JPA Provider Plugin dependencies -->
		<dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-jpa-xa-plugin-eclipselink</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>
		<dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-jpa-xa-plugin-hibernate-5_0</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>
		<dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-jpa-xa-plugin-hibernate-5_2</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>
		<dependency>
            <groupId>org.apache.aries.tx-control</groupId>
            <artifactId>tx-control-provider-jpa-xa-plugin-openjpa</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>


		<!-- Logging dependencies -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</dependency>

		<!-- Test dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-all</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>biz.aQute.bnd</groupId>
				<artifactId>bnd-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>