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é <[email protected]> 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 <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>> Hi,
>>>
>>> Answers inline:
>>>
>>> Sent from my iPhone
>>>
>>> On 18 May 2018, at 16:55, Alex Soto <[email protected]
>>> <mailto:[email protected]>> 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 <[email protected]
>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>>>>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>>>>>>>>>>> <mailto:[email protected]>> 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é
>>>>>>>>>>>>>>>> <[email protected] <mailto:[email protected]>> 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é
>>>>>>>>>>>>>>>>>> <[email protected]
>>>>>>>>>>>>>>>>>> <mailto:[email protected]><mailto:[email protected]>> 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