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