<?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-parent</artifactId>
		<version>1.0.1-SNAPSHOT</version>
		<relativePath>../../tx-control-parent/pom.xml</relativePath>
	</parent>

	<groupId>org.apache.aries.tx-control</groupId>
	<artifactId>tx-control-provider-jpa</artifactId>
	<version>1.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<description>Apache Aries Transaction Control JPA Resource Providers.</description>

    <modules>
        <module>tx-control-provider-jpa-parent</module>
        <module>tx-control-provider-jpa-common</module>
        <module>tx-control-provider-jpa-local</module>
        <module>tx-control-provider-jpa-xa-plugin-eclipselink</module>
        <module>tx-control-provider-jpa-xa-plugin-hibernate-5_0</module>
        <module>tx-control-provider-jpa-xa-plugin-hibernate-5_2</module>
        <module>tx-control-provider-jpa-xa-plugin-openjpa</module>
        <module>tx-control-provider-jpa-xa</module>
        <module>tx-control-jpa-itests</module>
    </modules>

</project>
