Digging some deeper in the environment, I saw that it exists a bundle
(ID=84) that should provide the missing service, so I cannot understand why
this service does not result suitable for other bundles:

karaf@test()>  classes 84 | grep -i JPAEntityManagerProvider
org/apache/aries/tx/control/jpa/common/impl/AbstractJPAEntityManagerProvider.class
org/apache/aries/tx/control/jpa/common/impl/DelayedJPAEntityManagerProvider.class
org/apache/aries/tx/control/jpa/common/impl/InternalJPAEntityManagerProviderFactory.class
org/apache/aries/tx/control/jpa/common/impl/ResourceTrackingJPAEntityManagerProviderFactory.class
org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl$1.class
org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl$EnlistingDataSource.class
org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl.class
org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderImpl.class
org/osgi/service/transaction/control/jpa/JPAEntityManagerProvider.class
org/osgi/service/transaction/control/jpa/JPAEntityManagerProviderFactory.class


karaf@test()> headers 84

OSGi Transaction Control JPA Resource Provider - XA Transactions (84)
---------------------------------------------------------------------
Archiver-Version = Plexus Archiver
Bnd-LastModified = 1525104456341
Build-Jdk = 1.8.0_152
Built-By = timothyjward
Created-By = 1.8.0_152 (Oracle Corporation)
Implementation-Title = OSGi Transaction Control JPA Resource Provider - XA
Transactions
Implementation-Vendor = The Apache Software Foundation
Implementation-Vendor-Id = org.apache.aries.tx-control
Implementation-Version = 1.0.0
Manifest-Version = 1.0
Specification-Title = OSGi Transaction Control JPA Resource Provider - XA
Transactions
Specification-Vendor = The Apache Software Foundation
Specification-Version = 1.0.0
Tool = Bnd-3.3.0.201609221906

Bundle-Activator = org.apache.aries.tx.control.jpa.xa.impl.Activator
Bundle-ManifestVersion = 2
Bundle-Name = OSGi Transaction Control JPA Resource Provider - XA
Transactions
Bundle-SymbolicName = tx-control-provider-jpa-xa
Bundle-Version = 1.0.0

Provide-Capability =
        osgi.service;
                uses:=org.osgi.service.transaction.control.jpa;

objectClass=org.osgi.service.transaction.control.jpa.JPAEntityManagerProvider;
                osgi.xa.enabled=true,
        osgi.service;
                uses:=org.osgi.service.transaction.control.jpa;

objectClass=org.osgi.service.transaction.control.jpa.JPAEntityManagerProviderFactory;
                osgi.xa.enabled=true
....
karaf@test()> services 84

OSGi Transaction Control JPA Resource Provider - XA Transactions (84)
provides:
-------------------------------------------------------------------------------
[org.osgi.service.transaction.control.jpa.JPAEntityManagerProviderFactory]
[org.osgi.service.cm.ManagedServiceFactory]




2018-08-19 8:42 GMT+02:00 Piero <[email protected]>:

> Hi,
>
> I would like to receive some help about a non resolving provider service
> in a very simple test bundle I wrote to test TransactionControl with
> JPAEntityManagerProvider usage with Hibernate on Karaf 4.2.
>
> The core of the program is a "DAO Service" and both interface and
> implementation are reported below.
>
> It seems the bundle hangs waiting for this missing service provider:
>     @Reference(target = "(osgi.unit.name=tasklist)")
>     void setProvider(JPAEntityManagerProvider provider)
>
> Is anyone so kind to explain me what is missing?
>
> I included the list of features and bundle installed on karaf as well.
>
> I created the datasource this way:
>     jdbc:ds-create -dbName reactive -dn mysql -dc com.mysql.jdbc.Driver -u
> root -p root -url "jdbc:mysql://localhost:3306/reactive" reactive
>
> Thanks in advance
>
>
> API-------------------------------------------------------------------
>
> package fake.test.xa.api;
>
> import java.util.Collection;
>
> import javax.jws.WebService;
>
> public interface TaskService {
>     Task getTask(Integer id);
>
>     void addTask(Task task) throws Exception;
>
>     void updateTask(Task task)  throws Exception;
>
>     void deleteTask(Integer id)  throws Exception;
>
>     Collection<Task> getTasks();
> }
>
> IMPL--------------------------------------------------------
> -----------------------------
>
> package fake.test.xa.internal;
>
> import java.util.Collection;
> import java.util.Date;
>
> import javax.persistence.EntityManager;
> import javax.persistence.criteria.CriteriaQuery;
>
> import org.osgi.framework.BundleContext;
> import org.osgi.service.component.annotations.Activate;
> import org.osgi.service.component.annotations.Component;
> import org.osgi.service.component.annotations.Deactivate;
> import org.osgi.service.component.annotations.Reference;
> import org.osgi.service.transaction.control.TransactionControl;
> import org.osgi.service.transaction.control.jpa.JPAEntityManagerProvider;
>
> import fake.test.xa.api.Task;
> import fake.test.xa.api.TaskService;
>
> @Component(immediate=true)
> public class TaskServiceImpl implements TaskService {
>
> TransactionControl txControl;
>
> EntityManager em;
>     @Reference
>     void setTxControl(TransactionControl txControl) {
> this.txControl = txControl;
> }
>     void unsetTxControl(TransactionControl txControl) {
> this.txControl = null;
> }
>
>     @Reference(target = "(osgi.unit.name=tasklist)")
>     void setProvider(JPAEntityManagerProvider provider) {
>         em = provider.getResource(txControl);
>     }
>
> @Activate
> private void activate(BundleContext ctx) {
>         System.out.println("Starting the service "+ getClass().getName()
> +" at "+new Date());
> }
> @Deactivate
> private void deactivate(BundleContext ctx) {
>         System.out.println("Stopping the service"+ getClass().getName() +"
> at "+new Date());
> }
>
>     @Override
>     public Task getTask(Integer id) {
>         return  txControl.supports(() -> em.find(Task.class, id));
>     }
>
>     @Override
>     public void addTask(Task task) throws Exception {
>         if (task.getId() == null) {
>             throw new Exception("Id property must be set");
>         }
>         System.err.println("Adding task " + task.getId());
>
>         txControl.required(()-> {
>             em.persist(task);
>             em.flush();
>         return null;
>         });
>
>     }
>
>     public Collection<Task> getTasks() {
>     return txControl.supports(() -> {
>             CriteriaQuery<Task> query = em.getCriteriaBuilder().
> createQuery(Task.class);
>             return em.createQuery(query.select(query.from(Task.class))).
> getResultList();
>         });
>     }
>
>     @Override
>     public void updateTask(Task task) throws Exception{
>         if (task.getId() == null) {
>             throw new Exception("Id property must be set");
>         }
>         System.err.println("Updating task " + task.getId());
>
>         if(null==getTask(task.getId())) {
>         throw new Exception("Task never registered before");
>         }
>
>         txControl.required(() -> {
>         em.merge(task);
>         em.flush();
>         return null;
>         });
>
>     }
>
>     @Override
>    public void deleteTask(Integer id) throws Exception {
>         System.err.println("Deleting task " + id);
>
>         txControl.required(() -> {
>     Task task = getTask(id);
>             if (task  == null) {
>             throw new RuntimeException("Task with id="+id+" not found");
>             }
>             em.remove(task);
>     em.flush();
>         return null;
>         });
>
>     }
>
>
> }
>
> PERSISTENCE.XML----------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence";
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd";>
>
>     <persistence-unit name="tasklist" transaction-type="JTA">
>         <provider>org.hibernate.jpa.HibernatePersistenceProvider</
> provider>
>         <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.
> jndi.service.name=reactive)</jta-data-source>
>         <properties>
>             <property name="hibernate.dialect"
> value="org.hibernate.dialect.MySQLDialect"/>
>             <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
>         </properties>
>     </persistence-unit>
>
> </persistence>
>
>
> POM.XML----------------------------------------------------
>
> <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>
>
> <groupId>fake</groupId>
> <artifactId>test.xa</artifactId>
> <version>0.0.1-SNAPSHOT</version>
> <name>fake.test.xa</name>
> <packaging>bundle</packaging>
>
> <properties>
> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>
> <java.version>1.8</java.version>
> <osgi.version>6.0.0</osgi.version>
> <osgi.compendium.version>5.0.0</osgi.compendium.version>
>
> <aries.jpa.version>2.2.0</aries.jpa.version>
>
> <dosgi.version>2.3.0</dosgi.version>
> <aQute.version>1.50.0</aQute.version>
> <enroute.version>2.0.0</enroute.version>
>
> <karaf.shell.console.version>4.0.3</karaf.shell.console.version>
>
> <maven.bundle.plugin.version>3.3.0</maven.bundle.plugin.version>
> <maven-resources-plugin.version>3.0.2</maven-resources-plugin.version>
>
> <transaction.version>2.0.0</transaction.version>
> <transaction-api.version>1.2</transaction-api.version>
> <jdbc.version>1.2.1</jdbc.version>
> <aries.tx.control.version>1.0.0</aries.tx.control.version>
>
> <baseline.skip>true</baseline.skip>
>
> <topDirectoryLocation>..</topDirectoryLocation>
> </properties>
>
> <dependencies>
> <dependency>
> <groupId>org.osgi</groupId>
> <artifactId>osgi.core</artifactId>
> <version>${osgi.version}</version>
> </dependency>
>
> <dependency>
> <groupId>org.osgi</groupId>
> <artifactId>osgi.cmpn</artifactId>
> <version>${osgi.compendium.version}</version>
> </dependency>
>
> <dependency>
> <groupId>biz.aQute</groupId>
> <artifactId>bndlib</artifactId>
> <version>${aQute.version}</version>
> </dependency>
>
> <dependency>
> <groupId>org.osgi</groupId>
> <artifactId>osgi.enroute.base.api</artifactId>
> <version>${enroute.version}</version>
> </dependency>
>
> <dependency>
> <groupId>org.apache.karaf.shell</groupId>
> <artifactId>org.apache.karaf.shell.console</artifactId>
> <version>${karaf.shell.console.version}</version>
> </dependency>
>
> <dependency>
> <groupId>javax.transaction</groupId>
> <artifactId>javax.transaction-api</artifactId>
> <version>${transaction-api.version}</version>
> </dependency>
>
> <dependency>
> <groupId>org.apache.aries.jpa</groupId>
> <artifactId>org.apache.aries.jpa.api</artifactId>
> <version>${aries.jpa.version}</version>
> </dependency>
> <dependency>
> <groupId>org.apache.aries.jpa</groupId>
> <artifactId>org.apache.aries.jpa.support</artifactId>
> <version>${aries.jpa.version}</version>
> </dependency>
>
>
> <dependency>
> <groupId>org.hibernate.javax.persistence</groupId>
> <artifactId>hibernate-jpa-2.1-api</artifactId>
> <version>1.0.0.Final</version>
> </dependency>
>
> <dependency>
> <groupId>org.apache.aries.tx-control</groupId>
> <artifactId>tx-control-service-xa</artifactId>
> <version>${aries.tx.control.version}</version>
> </dependency>
> <dependency>
> <groupId>org.apache.aries.tx-control</groupId>
> <artifactId>tx-control-provider-jpa-xa</artifactId>
> <version>${aries.tx.control.version}</version>
> </dependency>
> </dependencies>
>
>
>
>
> <build>
> <resources>
> <resource>
> <directory>src/main/resources</directory>
> <filtering>true</filtering>
> </resource>
> </resources>
>
> <pluginManagement>
> <plugins>
>
> <plugin>
> <groupId>org.apache.felix</groupId>
> <artifactId>maven-bundle-plugin</artifactId>
> <version>${maven.bundle.plugin.version}</version>
> </plugin>
>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-resources-plugin</artifactId>
> <version>${maven-resources-plugin.version}</version>
> </plugin>
> </plugins>
> </pluginManagement>
>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-compiler-plugin</artifactId>
> <configuration>
> <source>${java.version}</source>
> <target>${java.version}</target>
> </configuration>
> </plugin>
>
> <plugin>
> <groupId>org.apache.felix</groupId>
> <artifactId>maven-bundle-plugin</artifactId>
> <extensions>true</extensions>
> <configuration>
> <instructions>
> <_include>-bnd.bnd</_include>
> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
> <Bundle-Version>${project.version}</Bundle-Version>
> <Service-Component>*</Service-Component>
> <Bundle-Activator>fake.test.xa.internal.Activator</Bundle-Activator>
> <!-- <Export-Package>fake.test.xa.*;version=${project.version}
> </Export-Package> -->
> <Import-Package>*</Import-Package>
> <Meta-Persistence>META-INF/persistence.xml</Meta-Persistence>
> </instructions>
> </configuration>
> </plugin>
>
> </plugins>
> </build>
> </project>
>
> -----------------------------------------------------------------
>
>
> karaf@test()> diag 98
> fake.test.xa (98)
> -----------------
> Status: Waiting
> Declarative Services
> xa.command (9)
>   missing references: TaskService
> fake.test.xa.internal.TaskServiceImpl (8)
>   missing references: Provider
>
>
>
> karaf@test()> feature:list -i
> Name                         | Version     | Required | State   |
> Repository               | Description
> -----------------------------+-------------+----------+-----
> ----+--------------------------+----------------------------
> ----------------------
> aries-proxy                  | 4.2.0.M1    |          | Started |
> standard-4.2.0.M1        | Aries Proxy
> feature                      | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Features Support
> shell                        | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Karaf Shell
> deployer                     | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Karaf Deployer
> bundle                       | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide Bundle support
> config                       | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide OSGi ConfigAdmin support
> diagnostic                   | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide Diagnostic support
> instance                     | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide Instance support
> jaas                         | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide JAAS support
> log                          | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide Log support
> package                      | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Package commands and mbeans
> service                      | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide Service support
> system                       | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide System support
> kar                          | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide KAR (KARaf archive) support
> ssh                          | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide a SSHd server on Karaf
> management                   | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Provide a JMX MBeanServer and a set of MBeans in
> eventadmin                   | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | OSGi Event Admin service specification for event-
> scr                          | 4.2.0.M1    | x        | Started |
> standard-4.2.0.M1        | Declarative Service support
> wrap                         | 2.5.3       | x        | Started |
> standard-4.2.0.M1        | Wrap URL handler
> pax-transx-tm-api            | 0.2.0       |          | Started |
> pax-transx-0.2.0         |
> pax-transx-tm-geronimo       | 0.2.0       |          | Started |
> pax-transx-0.2.0         |
> hibernate-orm                | 5.2.8.Final |          | Started |
> hibernate-osgi           | Combines all Hibernate core dependencies and requ
> transaction-api              | 1.2.0       |          | Started |
> enterprise-4.2.0.M1      |
> transaction-manager-geronimo | 3.1.3       |          | Started |
> enterprise-4.2.0.M1      | Geronimo Transaction Manager
> transaction                  | 2.0.0       | x        | Started |
> enterprise-4.2.0.M1      | OSGi Transaction Manager
> hibernate                    | 5.2.8.Final | x        | Started |
> enterprise-4.2.0.M1      | Hibernate JPA engine support
> jndi                         | 4.2.0.M1    | x        | Started |
> enterprise-4.2.0.M1      | OSGi Service Registry JNDI access
> jdbc                         | 4.2.0.M1    | x        | Started |
> enterprise-4.2.0.M1      | JDBC service and commands
> pax-jdbc-spec                | 1.2.0       |          | Started |
> org.ops4j.pax.jdbc-1.2.0 | Provides OSGi JDBC Service spec
> pax-jdbc                     | 1.2.0       |          | Started |
> org.ops4j.pax.jdbc-1.2.0 | Provides JDBC Service support
> pax-jdbc-config              | 1.2.0       |          | Started |
> org.ops4j.pax.jdbc-1.2.0 | Provides JDBC Config support
> pax-jdbc-mysql               | 1.2.0       | x        | Started |
> org.ops4j.pax.jdbc-1.2.0 | Provides JDBC MySQL DataSourceFactory
> pax-jdbc-pool-dbcp2          | 1.2.0       | x        | Started |
> org.ops4j.pax.jdbc-1.2.0 | Provides JDBC Pooling DataSourceFactory
> jpa                          | 2.6.1       | x        | Started |
> aries-jpa-2.6.1          | OSGi Persistence Container
>
>
> karaf@test()> list -u
> START LEVEL 100 , List Threshold: 50
> ID | State    | Lvl | Version            | Update location
> ---+----------+-----+--------------------+------------------
> ------------------------------------------------------------
> ----------------------------------------------
> 20 | Resolved |  80 | 4.2.0.M1           | mvn:org.apache.karaf.
> diagnostic/org.apache.karaf.diagnostic.boot/4.2.0.M1
> 22 | Active   |  80 | 4.2.0.M1           | mvn:org.apache.karaf/org.
> apache.karaf.event/4.2.0.M1
> 43 | Active   |  80 | 1.9.2.1            | mvn:org.apache.servicemix.
> bundles/org.apache.servicemix.bundles.jasypt/1.9.2_1
> 44 | Active   |  80 | 1.2.0              | mvn:org.ops4j.pax.jdbc/pax-
> jdbc/1.2.0
> 45 | Active   |  80 | 1.2.0              | mvn:org.ops4j.pax.jdbc/pax-
> jdbc-config/1.2.0
> 46 | Active   |  80 | 1.2.0              | mvn:org.ops4j.pax.jdbc/pax-
> jdbc-pool-common/1.2.0
> 47 | Active   |  80 | 1.0.0.201505202023 | mvn:org.osgi/org.osgi.service.
> jdbc/1.0.0
> 48 | Active   |  80 | 1.3.0              | mvn:com.fasterxml/classmate/1.
> 3.0
> 49 | Active   |  80 | 5.1.34             | mvn:mysql/mysql-connector-
> java/5.1.34
> 50 | Active   |  80 | 3.20.0.GA          | mvn:org.javassist/javassist/3.
> 20.0-GA
> 51 | Active   |  80 | 3.0.0              | mvn:javax.el/javax.el-api/3.0.0
> 52 | Active   |  80 | 1.2.0              | mvn:javax.enterprise/cdi-api/
> 1.2
> 53 | Active   |  80 | 1.2                | mvn:javax.interceptor/javax.
> interceptor-api/1.2
> 55 | Active   |  80 | 1.2                | mvn:javax.transaction/javax.
> transaction-api/1.2
> 56 | Active   |  80 | 1.6.6              | mvn:net.bytebuddy/byte-buddy/
> 1.6.6
> 67 | Active   |  80 | 4.2.0.M1           | mvn:org.apache.karaf.jdbc/org.
> apache.karaf.jdbc.core/4.2.0.M1
> 69 | Active   |  80 | 2.7.7.5            | mvn:org.apache.servicemix.
> bundles/org.apache.servicemix.bundles.antlr/2.7.7_5
> 70 | Active   |  80 | 1.6.1.5            | mvn:org.apache.servicemix.
> bundles/org.apache.servicemix.bundles.dom4j/1.6.1_5
> 71 | Active   |  80 | 1.0.0.2            | mvn:org.apache.servicemix.
> bundles/org.apache.servicemix.bundles.javax-inject/1_2
> 73 | Active   |  80 | 5.0.1.Final        | mvn:org.hibernate.common/
> hibernate-commons-annotations/5.0.1.Final
> 74 | Active   |  80 | 5.2.8.Final        | mvn:org.hibernate/hibernate-
> core/5.2.8.Final
> 75 | Active   |  80 | 5.2.8.Final        | mvn:org.hibernate/hibernate-
> osgi/5.2.8.Final
> 76 | Active   |  80 | 2.0.3.Final        | mvn:org.jboss/jandex/2.0.3.
> Final
> 77 | Active   |  80 | 3.3.0.Final        | mvn:org.jboss.logging/jboss-
> logging/3.3.0.Final
> 79 | Active   |  80 | 1.2.0              | mvn:org.ops4j.pax.jdbc/pax-
> jdbc-mysql/1.2.0
> 80 | Active   |  80 | 0.2.0              | mvn:org.ops4j.pax.transx/pax-
> transx-tm-api/0.2.0
> 81 | Active   |  80 | 0.2.0              | mvn:org.ops4j.pax.transx/pax-
> transx-tm-geronimo/0.2.0
> 82 | Active   |  80 | 1.0.0              | mvn:org.apache.aries.tx-
> control/tx-control-service-xa/1.0.0
> 83 | Active   |  80 | 1.0.0              | mvn:org.apache.aries.tx-
> control/tx-control-provider-jdbc-xa/1.0.0
> 84 | Active   |  80 | 1.0.0              | mvn:org.apache.aries.tx-
> control/tx-control-provider-jpa-xa/1.0.0
> 92 | Active   |  80 | 2.7.1.SNAPSHOT     | mvn:org.apache.aries.jpa.
> javax.persistence/javax.persistence_2.1/2.7.1-SNAPSHOT
> 94 | Active   |  80 | 2.1.1              | mvn:org.apache.commons/
> commons-dbcp2/2.1.1
> 95 | Active   |  80 | 2.4.2              | mvn:org.apache.commons/
> commons-pool2/2.4.2
> 96 | Active   |  80 | 3.2.4.1            | mvn:org.apache.servicemix.
> bundles/org.apache.servicemix.bundles.cglib/3.2.4_1
> 97 | Active   |  80 | 1.2.0              | mvn:org.ops4j.pax.jdbc/pax-
> jdbc-pool-dbcp2/1.2.0
> 98 | Waiting  |  80 | 0.0.1.SNAPSHOT     | file:/C:/KARAF/apache-karaf-4.
> 2.0.M1/instances/test/deploy/test.xa-0.0.1-SNAPSHOT.jar
>

Reply via email to