That actually doesn’t look like a fatal exception,  all that’s happening is 
that Metatype is unable to retrieve the ManagedService from SCR. It may 
indicate a problem down the line with receiving config though. 

Tim

Sent from my iPhone

> On 19 May 2018, at 03:36, David Jencks <david.a.jen...@gmail.com> wrote:
> 
> Maybe try upgrading config admin also? There are a lot of new capabilities ds 
> takes advantage of.
> 
> David Jencks 
> 
> Sent from my iPhone
> 
>> On May 18, 2018, at 11:07 AM, Alex Soto <alex.s...@envieta.com> wrote:
>> 
>> Tried adding Felix SCR 2.1.0, but it looks like it is not as simple:
>> 
>> org.osgi.framework.ServiceException: Service factory exception: 
>> org/osgi/service/cm/ManagedService
>>      at 
>> org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:352)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:247)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:350)
>>  ~[?:?]
>>      at org.apache.felix.framework.Felix.getService(Felix.java:3737) ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:470)
>>  ~[?:?]
>>      at 
>> org.apache.felix.metatype.internal.ManagedServiceTracker.addingService(ManagedServiceTracker.java:52)
>>  ~[?:?]
>>      at 
>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
>>  ~[?:?]
>>      at 
>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
>>  ~[?:?]
>>      at 
>> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) 
>> ~[?:?]
>>      at 
>> org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) ~[?:?]
>>      at 
>> org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
>>  ~[?:?]
>>      at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4595) 
>> ~[?:?]
>>      at org.apache.felix.framework.Felix.registerService(Felix.java:3587) 
>> ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:322)
>>  ~[?:?]
>>      at 
>> org.apache.felix.scr.impl.config.ScrConfigurationImpl.start(ScrConfigurationImpl.java:120)
>>  ~[?:?]
>>      at org.apache.felix.scr.impl.Activator.start(Activator.java:100) ~[?:?]
>>      at 
>> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
>>  ~[?:?]
>>      at org.apache.felix.framework.Felix.activateBundle(Felix.java:2240) 
>> ~[?:?]
>>      at org.apache.felix.framework.Felix.startBundle(Felix.java:2146) ~[?:?]
>>      at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) 
>> ~[?:?]
>>      at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984) 
>> ~[?:?]
>>      at 
>> org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:161)
>>  ~[?:?]
>>      at 
>> org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1116)
>>  ~[?:?]
>>      at 
>> org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:996)
>>  ~[?:?]
>>      at 
>> org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1025)
>>  ~[?:?]
>>      at 
>> org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:964)
>>  ~[?:?]
>>      at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:?]
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>>  ~[?:?]
>>      at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>>  ~[?:?]
>>      at java.lang.Thread.run(Thread.java:748) [?:?]
>> Caused by: java.lang.NoClassDefFoundError: org/osgi/service/cm/ManagedService
>>      at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
>>      at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2410)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2194)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1607)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053)
>>  ~[?:?]
>>      at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
>>      at 
>> org.apache.felix.scr.impl.config.ScrManagedServiceServiceFactory.getService(ScrManagedServiceServiceFactory.java:47)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:347)
>>  ~[?:?]
>>      ... 33 more
>> Caused by: java.lang.ClassNotFoundException: 
>> org.osgi.service.cm.ManagedService not found by org.apache.felix.scr [67]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1639)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053)
>>  ~[?:?]
>>      at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
>>      at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
>>      at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2410)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2194)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1607)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053)
>>  ~[?:?]
>>      at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
>>      at 
>> org.apache.felix.scr.impl.config.ScrManagedServiceServiceFactory.getService(ScrManagedServiceServiceFactory.java:47)
>>  ~[?:?]
>>      at 
>> org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:347)
>>  ~[?:?]
>>      ... 33 more
>> 
>> 
>> 
>> Best regards,
>> Alex soto
>> 
>> 
>> 
>> 
>>> On May 18, 2018, at 12:46 PM, Jean-Baptiste Onofré <j...@nanthrax.net> 
>>> wrote:
>>> 
>>> 4.2.1-SNAPSHOT already updated to DS 1.4 (SCR 2.1.0) (ready on one of my 
>>> branch).
>>> 
>>> Regards
>>> JB
>>> 
>>>> On 18/05/2018 17:50, Alex Soto wrote:
>>>> Great, I solved the Eclipse problem.  Thanks.
>>>> Yes, Karaf provides DS 1.3,  but no DS 1.4 out off the box.
>>>> Maybe this is available from Aries?
>>>> Best regards,
>>>> Alex soto
>>>>> On May 18, 2018, at 11:18 AM, Tim Ward <tim.w...@paremus.com 
>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> Answers inline:
>>>>> 
>>>>> Sent from my iPhone
>>>>> 
>>>>>> On 18 May 2018, at 16:55, Alex Soto <alex.s...@envieta.com 
>>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>>> 
>>>>>> Thank you Tim for the very detailed explanation.
>>>>>> There are  two problems I don’t know how to resolve:
>>>>>> 
>>>>>> 1- BND generates this for my bundle:
>>>>>> 
>>>>>> Require-Capability:  
>>>>>> osgi.extender;filter:="(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))”
>>>>>> 
>>>>>> This is because I use the @Component and @Reference annotations.  This 
>>>>>> is strange, since I should be using OSGi R7, so I am not sure why it is 
>>>>>> saying 1.3.0.  Now when try to run in Karaf, even though I am 
>>>>>> installing/scr/feature, it fails with unresolved requirement.
>>>>> 
>>>>> So in the absence of information to the contrary this requirement is 
>>>>> added based on your usage of Declarative Services features. If you use DS 
>>>>> 1.3 features then DS 1.3 will be required.
>>>>> 
>>>>> Since R7 added the bundle requirement annotations the @Component 
>>>>> annotation has been annotated to require DS at the current spec version 
>>>>> (this gives a more consistent behaviour than bnd’s heuristics). At a 
>>>>> guess you are picking up a 1.3 requirement because you have the 1.3 
>>>>> annotations ahead of the 1.4 annotations on your classpath, but it could 
>>>>> be triggered by other things too. On the other hand this isn’t actually a 
>>>>> problem as the requirement is still satisfied by DS 1.4 and both versions 
>>>>> will work for you at runtime.
>>>>> 
>>>>> The Karaf scr feature really should be providing SCR 1.3 (which is 
>>>>> required by the spec to provide the extender capability. That has been 
>>>>> the current version of the spec for three years, and has been provided by 
>>>>> Felix for at least 6 releases. I’d be pretty shocked if DS 1.3 wasn’t 
>>>>> supported. You may need help from a more Karaf focussed person to confirm 
>>>>> this.
>>>>> 
>>>>>> 
>>>>>> Since I could not find OSGi R7 in public Maven Repos, I followed EnRoute 
>>>>>> depending on:
>>>>>>       <dependency>
>>>>>>         <groupId>org.osgi.enroute</groupId>
>>>>>>         <artifactId>osgi-api</artifactId>
>>>>>>         <version>7.0.0-SNAPSHOT</version>
>>>>>>         <type>pom</type>
>>>>>>         <scope>provided</scope>
>>>>>>       </dependency>
>>>>>>       <dependency>
>>>>>>         <groupId>org.osgi.enroute</groupId>
>>>>>>         <artifactId>enterprise-api</artifactId>
>>>>>>         <version>7.0.0-SNAPSHOT</version>
>>>>>>         <type>pom</type>
>>>>>>         <scope>provided</scope>
>>>>>>       </dependency>
>>>>> 
>>>>> There’s no problem with you using these. On the other hand the OSGi API 
>>>>> aggregations you are looking for are:
>>>>> 
>>>>> https://mvnrepository.com/artifact/org.osgi/osgi.core
>>>>> 
>>>>> https://mvnrepository.com/artifact/org.osgi/osgi.cmpn
>>>>> 
>>>>> You can also find the individual specs under the org.osgi group id if you 
>>>>> want to use a smaller hammer :)
>>>>> 
>>>>>> 
>>>>>> 2- This is minor, and I see it also in the EnRoute project. While the 
>>>>>> Maven build succeeds, Eclipse BND plugin shows 2 errors:
>>>>>> 
>>>>>>    The default package '.' is not permitted by the Import-Package
>>>>>>    syntax. This can be caused by compile errors in Eclipse
>>>>>>    because Eclipse creates valid class files regardless of compile
>>>>>>    errors. The following package(s) import from the default
>>>>>>    package [org.enquery.encryptedquery.responder.data.service.impl]
>>>>>>    
>>>>>> (biz.aQute.bnd:bnd-maven-plugin:4.0.0:bnd-process:default:process-classes)pom.xml/encryptedquery-responder-dataline
>>>>>>    0Maven Build Participant Problem 
>>>>>> 
>>>>>>    The project was not built since its build path is incomplete.
>>>>>>    Cannot find the class file for javax.persistence.EntityManager.
>>>>>>    Fix the build path then try building this
>>>>>>    projectencryptedquery-responder-dataUnknownJava Problem
>>>>>> 
>>>>>> 
>>>>> 
>>>>> As the message suggests, this usually occurs when Eclipse has build 
>>>>> errors for the project. Specifically in this case you seem to be building 
>>>>> against a project which exposes the EntityManager interface somehow, but 
>>>>> you don’t have the JPA API in your compile dependencies (normally these 
>>>>> would come come in transitively from the project you depend on).
>>>>> 
>>>>> I hope this helps,
>>>>> 
>>>>> Tim
>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Best regards,
>>>>>> Alex soto
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> On May 18, 2018, at 5:23 AM, Tim Ward <tim.w...@paremus.com 
>>>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>>>> 
>>>>>>> Hi Alex,
>>>>>>> 
>>>>>>> The bundles you need are listed in the bndrun for the JPA version of 
>>>>>>> the enRoute application, but as I think you’re using OpenJPA (rather 
>>>>>>> than Hibernate) it may help to explain things in relation to the 
>>>>>>> Transaction Control JPA integration test for OpenJPA. I’m sure that at 
>>>>>>> least some of this will be stuff you already know, but I’m trying to 
>>>>>>> make sure I give a compete explanation.
>>>>>>> 
>>>>>>> This method defines some extra properties to add to the persistence 
>>>>>>> unit. It references a couple of open bugs in OpenJPA which may or may 
>>>>>>> not affect you. It also adds schema generation as OpenJPA does not 
>>>>>>> support the standard properties from JPA 2.1 
>>>>>>> https://github.com/apache/aries-tx-control/blob/master/tx-control-providers/jpa/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleOpenJPA_2_4_1_Test.java#L34
>>>>>>> 
>>>>>>> This method defines the OpenJPA bundles and their immediate 
>>>>>>> dependencies. 
>>>>>>> https://github.com/apache/aries-tx-control/blob/master/tx-control-providers/jpa/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleOpenJPA_2_4_1_Test.java#L48
>>>>>>> 
>>>>>>> You then need:
>>>>>>> 
>>>>>>> • Aries JPA 2.7.0 - this provides the OSGi JPA Service 1.1 RI (1.1 
>>>>>>> features are needed by the Aries Tx Control JPA resource provider to 
>>>>>>> support XA)
>>>>>>> 
>>>>>>> • Aries Tx Control Service - either XA or local depending on whether 
>>>>>>> you need XA Transaction support. For example 
>>>>>>> https://github.com/apache/aries-tx-control/blob/master/tx-control-providers/jpa/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java#L365
>>>>>>> 
>>>>>>> • Aries Tx Control JPA resource provider - either XA or local depending 
>>>>>>> on your needs. Note that you can’t use the XA provider with the local 
>>>>>>> service, but you can use the local provider with the XA service 
>>>>>>> (although this doesn’t make a lot of sense to do). For example 
>>>>>>> https://github.com/apache/aries-tx-control/blob/master/tx-control-providers/jpa/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java#L377
>>>>>>> 
>>>>>>> • A JDBC Service implementation supporting your database driver. H2 
>>>>>>> supports this natively (which is why it is used in many examples) but 
>>>>>>> MariaDB does not. Therefore you will need to deploy PAX-JDBC’s support. 
>>>>>>> See 
>>>>>>> https://github.com/ops4j/org.ops4j.pax.jdbc/tree/master/pax-jdbc-mariadb
>>>>>>> 
>>>>>>> You then have the option of either programmatically assembling your 
>>>>>>> Resource Provider, or using configuration. Configuration is generally 
>>>>>>> easier and is what I normally recommend. At that point you need to 
>>>>>>> create a factory configuration for the relevant PID (it depends on 
>>>>>>> whether you use the local or XA resource provider, see 
>>>>>>> https://github.com/apache/aries-tx-control/blob/master/tx-control-providers/jpa/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java#L175)
>>>>>>> 
>>>>>>> The necessary configuration properties are:
>>>>>>> 
>>>>>>> • url - the JDBC URL for your database
>>>>>>> • osgi.jdbc.driver.class - the database driver class name, in your case 
>>>>>>> org.mariadb.jdbc.Driver
>>>>>>> • osgi.unit.name - the name of your persistence unit
>>>>>>> 
>>>>>>> The result of this configuration will be a JPAEntityManagerProvider 
>>>>>>> service registered in the service registry (using your 
>>>>>>> EntityManagerFactoryBuilder and the MariaDB DataSourceFactory). You can 
>>>>>>> then Inject that service into your code and combine it with the 
>>>>>>> TransactionControl service to make a thread safe EntityManager that you 
>>>>>>> can use in all your requests (just like the enRoute example does).
>>>>>>> 
>>>>>>> I hope this helps,
>>>>>>> 
>>>>>>> Tim
>>>>>>> 
>>>>>>> Sent from my iPhone
>>>>>>> 
>>>>>>>> On 17 May 2018, at 22:46, Alex Soto <alex.s...@envieta.com 
>>>>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>>>>> 
>>>>>>>> Thanks Tim,
>>>>>>>> 
>>>>>>>> I was using branch R7, changed to master, it builds now.
>>>>>>>> 
>>>>>>>> Now I have updated my project to OSGi 7 with Transaction Control, how 
>>>>>>>> do I deploy to Karaf?
>>>>>>>> i.e., what bundles/features do I need?
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Best regards,
>>>>>>>> Alex soto
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On May 17, 2018, at 2:08 PM, Tim Ward <tim.w...@paremus.com 
>>>>>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>>>>>> 
>>>>>>>>> Hi Alex,
>>>>>>>>> 
>>>>>>>>> Bnd 4.0.0 was only released last Sunday, but this should have been 
>>>>>>>>> changed yesterday in this commit 
>>>>>>>>> https://github.com/osgi/osgi.enroute/commit/9f9857c3d317cd08a7aaf7327c1904676299f9ee
>>>>>>>>>  to make sure enRoute kept building.
>>>>>>>>> 
>>>>>>>>> EnRoute is automatically pushed to the sonatype OSGi nexus 
>>>>>>>>> repository, so is it possible that you’re running offline, or 
>>>>>>>>> firewalled from the repo? You should be able to force snapshot 
>>>>>>>>> updates from the Maven command line.
>>>>>>>>> 
>>>>>>>>> Best Regards,
>>>>>>>>> 
>>>>>>>>> Tim
>>>>>>>>> 
>>>>>>>>> Sent from my iPhone
>>>>>>>>> 
>>>>>>>>>> On 17 May 2018, at 18:26, Alex Soto <alex.s...@envieta.com 
>>>>>>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>>>>>>> 
>>>>>>>>>> Allright,  I am trying to follow the EnRoute tutorial.
>>>>>>>>>> 
>>>>>>>>>> I am getting this error:
>>>>>>>>>> 
>>>>>>>>>> [ERROR] Plugin biz.aQute.bnd:bnd-maven-plugin:4.0.0-SNAPSHOT or one 
>>>>>>>>>> of its dependencies could not be resolved: Could not find artifact 
>>>>>>>>>> biz.aQute.bnd:bnd-maven-plugin:jar:4.0.0-SNAPSHOT in Bnd Snapshots 
>>>>>>>>>> (https://bndtools.ci.cloudbees.com/job/bnd.master/lastSuccessfulBuild/artifact/dist/bundles/)
>>>>>>>>>>  -> [Help 1]
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Any idea (time frame) when this will move from SNAPSHOT dependencies?
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Best regards,
>>>>>>>>>> Alex soto
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> On May 17, 2018, at 11:08 AM, Tim Ward <tim.w...@paremus.com 
>>>>>>>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> It is highly unlikely that you’ll hit the same issues. The 
>>>>>>>>>>> transaction control resource provider uses the DataSourceFactory 
>>>>>>>>>>> directly to create a DataSource (either progamatically using a 
>>>>>>>>>>> factory service or via config admin) that enlists itself in the 
>>>>>>>>>>> ongoing transaction. This means that the answer to your question is 
>>>>>>>>>>> “with Transaction Control you don’t have to do that because it does 
>>>>>>>>>>> it automatically”
>>>>>>>>>>> 
>>>>>>>>>>> If you want to use XA transactions then the only requirement is 
>>>>>>>>>>> that the DataSourceFactory can produce an XADataSource, otherwise 
>>>>>>>>>>> it just uses the standard JDBC API to commit/rollback. If your 
>>>>>>>>>>> DataSourceFactory doesn’t support XA then use the local resource 
>>>>>>>>>>> provider implementation.
>>>>>>>>>>> 
>>>>>>>>>>> Best Regards,
>>>>>>>>>>> 
>>>>>>>>>>> Tim
>>>>>>>>>>> 
>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>> 
>>>>>>>>>>>> On 17 May 2018, at 15:17, Alex Soto <alex.s...@envieta.com 
>>>>>>>>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> I will take a look at these examples.
>>>>>>>>>>>> 
>>>>>>>>>>>> However, I think that if I cannot get a MariaDB DataSource that 
>>>>>>>>>>>> supports transactions, then it will still not work, right?
>>>>>>>>>>>> If the examples use H2 database, I still may get different results 
>>>>>>>>>>>> when I change to MariaDB, and I will find myself in the same spot 
>>>>>>>>>>>> as of now.
>>>>>>>>>>>> 
>>>>>>>>>>>> So, the question remains about what is the correct way how to 
>>>>>>>>>>>> register a transaction aware MariaDB DataSource.
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Best regards,
>>>>>>>>>>>> Alex soto
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> On May 17, 2018, at 1:46 AM, Tim Ward <tim.w...@paremus.com 
>>>>>>>>>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The best place to start when looking for OSGi R7 examples is the 
>>>>>>>>>>>>> enRoute Project. It contains Maven Archetypes, examples and 
>>>>>>>>>>>>> worked tutorials for building applications using R7 
>>>>>>>>>>>>> specifications.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> https://enroute.osgi.org <https://enroute.osgi.org/Tutorial/>
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Most of the projects in use are just new versions of long 
>>>>>>>>>>>>> established OSGi implementations from Aries and Felix. The 
>>>>>>>>>>>>> majority of them are already released and in Maven Central. Those 
>>>>>>>>>>>>> that are still in the process of releasing (pretty much just the 
>>>>>>>>>>>>> JAX-RS whiteboard) are available in the Apache Snapshots 
>>>>>>>>>>>>> repository. I am not aware of any implementations that require R7 
>>>>>>>>>>>>> framework features, so all of them should run on Karaf.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Tim
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 16 May 2018, at 22:25, Alex Soto <alex.s...@envieta.com 
>>>>>>>>>>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I agree, it s very frustrating and time consuming. Almost 
>>>>>>>>>>>>>> impossible to get it right.
>>>>>>>>>>>>>> I may try the OSGi R7, but I am not sure of its adoption level 
>>>>>>>>>>>>>> at this time, availability of bundles, examples, support by 
>>>>>>>>>>>>>> Karaf, etc.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Anyway, back to my current stack.  I only see one DataSource 
>>>>>>>>>>>>>> being registered:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> karaf@root()> service:list DataSource
>>>>>>>>>>>>>> [javax.sql.DataSource]
>>>>>>>>>>>>>> ----------------------
>>>>>>>>>>>>>>  databaseName = responder
>>>>>>>>>>>>>>  dataSourceName = responder
>>>>>>>>>>>>>>  osgi.jdbc.driver.name = mariadb
>>>>>>>>>>>>>>  osgi.jndi.service.name = responder
>>>>>>>>>>>>>>  service.bundleid = 14
>>>>>>>>>>>>>>  service.factoryPid = org.ops4j.datasource
>>>>>>>>>>>>>> service.id <http://service.id/>= 194
>>>>>>>>>>>>>>  service.pid = 
>>>>>>>>>>>>>> org.ops4j.datasource.feb33f6d-dc46-4bc7-a417-ad6bdd5a6ee5
>>>>>>>>>>>>>>  service.scope = singleton
>>>>>>>>>>>>>>  url = jdbc:mariadb:XXXXXX
>>>>>>>>>>>>>> Provided by :
>>>>>>>>>>>>>>  OPS4J Pax JDBC Config (14)
>>>>>>>>>>>>>> Used by:
>>>>>>>>>>>>>>  Data (135)
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Not sure what to do with this.
>>>>>>>>>>>>>> I specified the following in the configuration:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> pool=narayana
>>>>>>>>>>>>>> xa=true
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>> Alex soto
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On May 16, 2018, at 4:12 PM, Tim Ward <tim.w...@paremus.com 
>>>>>>>>>>>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The structure of the JNDI name is defined by the JNDI service 
>>>>>>>>>>>>>>> specification.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> osgi:service/<interface name>[/<filter>]
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> So in this case both of your services should be DataSource 
>>>>>>>>>>>>>>> instances, but they should have different filters.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The important thing is to make sure you have an JTA enlisting 
>>>>>>>>>>>>>>> DataSource registered as a service (this isn’t just your normal 
>>>>>>>>>>>>>>> DataSource), then to build a filter which selects that. One 
>>>>>>>>>>>>>>> option for this is to use the enlistment whiteboard from Aries 
>>>>>>>>>>>>>>> (not well documented) 
>>>>>>>>>>>>>>> https://github.com/apache/aries/tree/trunk/transaction/transaction-jdbc
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> This is a non-trivial thing to do, which is why I keep 
>>>>>>>>>>>>>>> mentioning Transaction Control which handles the enlistment 
>>>>>>>>>>>>>>> reliably without the layers of services.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Tim
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On 16 May 2018, at 21:57, Alex Soto <alex.s...@envieta.com 
>>>>>>>>>>>>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thank you Tim.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Any idea what the JNDI names would be?
>>>>>>>>>>>>>>>> It is Pax-JDBC creating these JNDI names, so I have no idea.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> From the Karaf console:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> karaf@root()> jndi:names
>>>>>>>>>>>>>>>> JNDI Name              │ Class Name
>>>>>>>>>>>>>>>> ───────────────────────┼───────────────────────────────────────────────
>>>>>>>>>>>>>>>> osgi:service/responder │ org.mariadb.jdbc.MySQLDataSource
>>>>>>>>>>>>>>>> osgi:service/jndi      │ 
>>>>>>>>>>>>>>>> org.apache.karaf.jndi.internal.JndiServiceImpl
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>> Alex soto
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On May 16, 2018, at 3:48 PM, Tim Ward <tim.w...@paremus.com 
>>>>>>>>>>>>>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Just looking quickly.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> You have the same JNDI name for both JTA and non JTA 
>>>>>>>>>>>>>>>>> DataSources. This is clearly wrong as the DataSource cannot 
>>>>>>>>>>>>>>>>> simultaneously be enlisted in the Transaction and not 
>>>>>>>>>>>>>>>>> enlisted. The comments also indicate a misunderstanding of 
>>>>>>>>>>>>>>>>> the purpose of the non-jta-datasource, which absolutely is 
>>>>>>>>>>>>>>>>> used with JTA EntityManagers (for things like sequence 
>>>>>>>>>>>>>>>>> allocation and out of band optimisations). You really do need 
>>>>>>>>>>>>>>>>> to have both and they do need to behave differently.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> At a guess your DataSource is not enlisted with the 
>>>>>>>>>>>>>>>>> transaction manager present in the system.  This usually 
>>>>>>>>>>>>>>>>> happens by configuring a (otherwise invisible) DataSource 
>>>>>>>>>>>>>>>>> wrapper There is nothing forcing you to make this happen (or 
>>>>>>>>>>>>>>>>> checking that it does) hence your transactions would be 
>>>>>>>>>>>>>>>>> broken. This is one of the several reasons I try to direct 
>>>>>>>>>>>>>>>>> people to Transaction Control where the model actively pushes 
>>>>>>>>>>>>>>>>> you toward transactions that actually work, rather than 
>>>>>>>>>>>>>>>>> hiding all the magic behind an annotation.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hopefully this gives you some clues as to what might be wrong.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Tim
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On 16 May 2018, at 21:34, Jean-Baptiste Onofré 
>>>>>>>>>>>>>>>>>> <j...@nanthrax.net <mailto:j...@nanthrax.net>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Are you sure about your code ? Flush looks weird to me and 
>>>>>>>>>>>>>>>>>> it seems you don't use container managed transaction.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>> JB
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On 16/05/2018 21:08, Alex Soto wrote:
>>>>>>>>>>>>>>>>>>> Yes, same result.  I even tried with Narayana Transaction 
>>>>>>>>>>>>>>>>>>> Manager, and same result.
>>>>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>>>>> Alex soto
>>>>>>>>>>>>>>>>>>>> On May 16, 2018, at 2:56 PM, Jean-Baptiste Onofré 
>>>>>>>>>>>>>>>>>>>> <j...@nanthrax.net 
>>>>>>>>>>>>>>>>>>>> <mailto:j...@nanthrax.net><mailto:j...@nanthrax.net>> 
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Same behavior with RequiresNew ?
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>> JB
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> On 16/05/2018 19:44, Alex Soto wrote:
>>>>>>>>>>>>>>>>>>>>> With Karaf version 4.2.0, Rollback is not working with 
>>>>>>>>>>>>>>>>>>>>> MariaDB and InnoDB tables.
>>>>>>>>>>>>>>>>>>>>> I deployed these features (from Karaf’s enterprise  
>>>>>>>>>>>>>>>>>>>>> repository):
>>>>>>>>>>>>>>>>>>>>> <feature>aries-blueprint</feature>
>>>>>>>>>>>>>>>>>>>>> <feature>transaction</feature>
>>>>>>>>>>>>>>>>>>>>> <feature>jndi</feature>
>>>>>>>>>>>>>>>>>>>>> <feature>jdbc</feature>
>>>>>>>>>>>>>>>>>>>>> <feature>jpa</feature>
>>>>>>>>>>>>>>>>>>>>> <feature>pax-jdbc-mariadb</feature>
>>>>>>>>>>>>>>>>>>>>>        <feature>pax-jdbc-config</feature>
>>>>>>>>>>>>>>>>>>>>> <feature>pax-jdbc-pool-dbcp2</feature>
>>>>>>>>>>>>>>>>>>>>> <feature>hibernate</feature>
>>>>>>>>>>>>>>>>>>>>> My Data Source is configured in the file 
>>>>>>>>>>>>>>>>>>>>> /org.ops4j.datasource-responder.cfg/
>>>>>>>>>>>>>>>>>>>>>   osgi.jdbc.driver.name = mariadb
>>>>>>>>>>>>>>>>>>>>>   dataSourceName=responder
>>>>>>>>>>>>>>>>>>>>>   url
>>>>>>>>>>>>>>>>>>>>>   = 
>>>>>>>>>>>>>>>>>>>>> jdbc:mariadb://mariadb.local:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true&autocommit=false
>>>>>>>>>>>>>>>>>>>>>   user=XXXX
>>>>>>>>>>>>>>>>>>>>>   password=XXXX
>>>>>>>>>>>>>>>>>>>>>   databaseName=responder
>>>>>>>>>>>>>>>>>>>>>   #Pool Config
>>>>>>>>>>>>>>>>>>>>>   pool=dbcp2
>>>>>>>>>>>>>>>>>>>>>   xa=true
>>>>>>>>>>>>>>>>>>>>> My persistence.xml:
>>>>>>>>>>>>>>>>>>>>>   <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="responderPersistenUnit" transaction-type="JTA">
>>>>>>>>>>>>>>>>>>>>>                
>>>>>>>>>>>>>>>>>>>>> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
>>>>>>>>>>>>>>>>>>>>>            <!-- Only used when transaction-type=JTA -->
>>>>>>>>>>>>>>>>>>>>>                
>>>>>>>>>>>>>>>>>>>>> <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source>
>>>>>>>>>>>>>>>>>>>>>            <!-- Only used when 
>>>>>>>>>>>>>>>>>>>>> transaction-type=RESOURCE_LOCAL -->
>>>>>>>>>>>>>>>>>>>>>                
>>>>>>>>>>>>>>>>>>>>> <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</non-jta-data-source>
>>>>>>>>>>>>>>>>>>>>>            <properties>
>>>>>>>>>>>>>>>>>>>>>                    <property name=“hibernate.dialect" 
>>>>>>>>>>>>>>>>>>>>> value="org.hibernate.dialect.MySQL5Dialect" />
>>>>>>>>>>>>>>>>>>>>>                <property name="hibernate.show_sql" 
>>>>>>>>>>>>>>>>>>>>> value="true" />
>>>>>>>>>>>>>>>>>>>>>                <property name="hibernate.format_sql" 
>>>>>>>>>>>>>>>>>>>>> value="true" />
>>>>>>>>>>>>>>>>>>>>>                <property name="hibernate.hbm2ddl.auto" 
>>>>>>>>>>>>>>>>>>>>> value="none"/>
>>>>>>>>>>>>>>>>>>>>>            </properties>
>>>>>>>>>>>>>>>>>>>>>        </persistence-unit>
>>>>>>>>>>>>>>>>>>>>>   </persistence>
>>>>>>>>>>>>>>>>>>>>> My blueprint.xml:
>>>>>>>>>>>>>>>>>>>>>   <blueprint 
>>>>>>>>>>>>>>>>>>>>> xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
>>>>>>>>>>>>>>>>>>>>>   xmlns:jpa="http://aries.apache.org/xmlns/jpa/v2.0.0";
>>>>>>>>>>>>>>>>>>>>>   
>>>>>>>>>>>>>>>>>>>>> xmlns:tx="http://aries.apache.org/xmlns/transactions/v2.0.0";
>>>>>>>>>>>>>>>>>>>>>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>>>>>>>>>>>>>>>>>>   
>>>>>>>>>>>>>>>>>>>>> xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
>>>>>>>>>>>>>>>>>>>>> https://osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
>>>>>>>>>>>>>>>>>>>>>   <jpa:enable />
>>>>>>>>>>>>>>>>>>>>>   <tx:enable />
>>>>>>>>>>>>>>>>>>>>>   <bean id="userService" 
>>>>>>>>>>>>>>>>>>>>> class="org.data.impl.UserServiceImpl" />
>>>>>>>>>>>>>>>>>>>>>   <service ref="userService" 
>>>>>>>>>>>>>>>>>>>>> interface="org.data.UserService" />
>>>>>>>>>>>>>>>>>>>>>   </blueprint>
>>>>>>>>>>>>>>>>>>>>> For testing I throw exception in my DAO:
>>>>>>>>>>>>>>>>>>>>> @Transactional(REQUIRED)
>>>>>>>>>>>>>>>>>>>>> public void addUser(User user) {
>>>>>>>>>>>>>>>>>>>>> em.persist(user);
>>>>>>>>>>>>>>>>>>>>> em.flush();
>>>>>>>>>>>>>>>>>>>>> throw new RuntimeException("On Purpose");
>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>> I expect the record not to be in the table due to 
>>>>>>>>>>>>>>>>>>>>> rollback of the transaction, but it still shows up in my 
>>>>>>>>>>>>>>>>>>>>> database table.
>>>>>>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>>>>>>> Alex soto
>> 

Reply via email to