<?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</artifactId>
		<version>0.0.3</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<groupId>org.apache.aries.tx-control</groupId>
	<artifactId>tx-control-provider-jpa-local</artifactId>
	<name>OSGi Transaction Control JPA Resource Provider - Local Transactions</name>
	<version>0.0.3</version>

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

	<scm>
		<connection>
            scm:svn:http://svn.apache.org/repos/asf/aries/tags/tx-control-0.0.3/tx-control-provider-jpa-local
        </connection>
		<developerConnection>
            scm:svn:https://svn.apache.org/repos/asf/aries/tags/tx-control-0.0.3/tx-control-provider-jpa-local
        </developerConnection>
		<url>
            http://svn.apache.org/viewvc/aries/tags/tx-control-0.0.3/tx-control-provider-jpa-local
        </url>
	</scm>

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

		<!-- OSGi API dependencies -->
		<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.geronimo.specs</groupId>
            <artifactId>geronimo-jpa_2.1_spec</artifactId>
        </dependency>

		<!-- Hikari CP dependency -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
		</dependency>

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

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

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