#    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.jpa.local.impl.Activator


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

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

# We embed Hikari CP to avoid dependency fanout

Private-Package: org.apache.aries.tx.control.jpa.*, \
                 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.transaction.control.jpa, \
                org.osgi.service.cm, \
                org.osgi.service.jdbc, \
                org.osgi.service.jpa, \
                *

Provide-Capability: \
                    osgi.service;objectClass="org.osgi.service.transaction.control.jpa.JPAEntityManagerProvider";osgi.local.enabled="true";uses:="org.osgi.service.transaction.control.jpa", \
                    osgi.service;objectClass="org.osgi.service.transaction.control.jpa.JPAEntityManagerProviderFactory";osgi.local.enabled="true";uses:="org.osgi.service.transaction.control.jpa"
                    
# This Resource Provider is able to work with JPA 2.0 or 2.1, but may need enhancement
# for future versions, hence we prohibit versions of the contract greater than 2.1.x
# Because of this complexity we can't just use -contract: JavaJPA.
Require-Capability: \
                    osgi.contract;filter:="(&(osgi.contract=JavaJPA)(|(version=2)(version=2.1))(!(version>=2.2)))",\
                    osgi.service;filter:="(objectClass=org.osgi.service.jdbc.DataSourceFactory)";resolution:="optional";effective:="active", \
                    osgi.service;filter:="(objectClass=org.osgi.service.jpa.EntityManagerFactoryBuilder)";resolution:="optional";effective:="active"

