#    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.*, \
                 org.apache.aries.tx.control.resource.common.impl, \
                 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, \
                !com.zaxxer.hikari.metrics.micrometer, \
                !io.micrometer.core.instrument, \
                !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"