#    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.

Bundle-Activator: org.apache.aries.tx.control.jdbc.local.impl.Activator

# Export the APIs we use so that this is an easily deployable bundle 

Export-Package: org.osgi.service.transaction.control.jdbc, \
                org.osgi.service.cm, \
                org.osgi.service.jdbc


# We repackage the common JDBC code so that we can be deployed
# as a single bundle. We also embed Hikari CP to avoid dependency fanout

Private-Package: org.apache.aries.tx.control.jdbc.*, \
                 com.zaxxer.hikari, \
                 com.zaxxer.hikari.metrics, \
                 com.zaxxer.hikari.pool, \
                 com.zaxxer.hikari.util

# Ensure that the API is exported substitutably, and that we don't pull
# in any unused pieces of Hikari

Import-Package: !com.codahale.*, \
                !com.zaxxer.hikari.metrics.dropwizard, \
                !javassist.*, \
                org.osgi.service.transaction.control, \
                org.osgi.service.transaction.control.jdbc, \
                org.osgi.service.cm, \
                org.osgi.service.jdbc, \
                * 

Provide-Capability: osgi.service;objectClass="org.osgi.service.transaction.control.jdbc.JDBCConnectionProvider";osgi.local.enabled="true";uses:="org.osgi.service.transaction.control.jdbc", \
                    osgi.service;objectClass="org.osgi.service.transaction.control.jdbc.JDBCConnectionProviderFactory";osgi.local.enabled="true";uses:="org.osgi.service.transaction.control.jdbc"
                    
Require-Capability: osgi.service;filter:="(objectClass=org.osgi.service.jdbc.DataSourceFactory)";resolution:="optional";effective:="active"