Title: The Aries Transaction Control Service
Notice:    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.

#The Transaction Control service

If you're new to the Transaction Control service then we suggest that you read the [Quick Start Page][1]
first.

###The Aries Transaction Control implementations

* [The Local Transaction Control Service][2]
* [The XA Transaction Control Service and Last Participant support][3]

###Configuring JDBC access

* TODO With Local Transactions
* TODO With XA Transactions

###Configuring JPA access

* TODO With Local Transactions
* TODO With XA Transactions

###Advanced topics

* [Custom Resource Providers][4]
* [Advanced Scope control][5]


  [1]: quickstart.html
  [2]: localTransactions.html
  [3]: xaTransactions
  [4]: advancedResourceProviders.html
  [5]: advancedScopes.html