Hi, Just to confirm, Tx Control doesn’t do @Transactional, but it does do JPA without the JPATemplate (i.e. you can just do normal JPA access within a managed block). As for bringing in Java EE guys, that’s great, but at least some of their usage patterns have to change if you want hot-swap and start up order independence to work!
Regards, Tim Ward Enterprise OSGi in Action (http://www.manning.com/cummins <http://www.manning.com/cummins>) Apache Aries PMC > On 31 Jan 2017, at 10:53, Charlie Mordant <cmorda...@gmail.com> wrote: > > Hi Timothy, > > Thank you for all your questions and interest. > > Concerning graphql, why not. I had in mind to provide a way to easily bring > HATEOAS (via spring-hateoas, or implementing some cxf interceptors), but > Graphql looks also promising, so why not, it'll be discussed... > > About the Aries Tx Control, it is a deliberate choice to not use it (sorry > :-S): the goal of Osgiliath is mainly to bring JavaEE guys into the OSGi > world without disturbing (most of) their habits, giving them modularity, > scalability and hot swap for free. > So in an ideal world, every service injection would be done with CDI > annotations (that's why we're using pax-cdi), persistence with JPA > annotations (without blueprint neither JPA template), transaction with > @Transactional ones (without blueprint too), and if we could have web > sessions/security context distributed accross bundles <3. > > Of course, life is made of tradeof, so if DS, Tx Control and JpaTemplate are > the only way to go the right way, Osgiliath will too. > > Best regards, > > 2017-01-31 10:50 GMT+01:00 Timothy Ward <tim.w...@paremus.com > <mailto:tim.w...@paremus.com>>: > Hi Charlie, > > One other question, have you tried using Aries Transaction Control? The big > drivers for creating the Transaction Control Service were to simplify the > service model and to handle dynamics better when performing transactional > access to resources. The Aries implementation supports XA and is fully > recoverable, so it should be very simple to use in your project. > > Regards, > > Tim > >> On 31 Jan 2017, at 09:48, Charlie Mordant <cmorda...@gmail.com >> <mailto:cmorda...@gmail.com>> wrote: >> >> Hi J.B., >> >> Sure, it's always reproducible, I'll send it tonight (or tomorrow if I >> haven't the time to do it). >> I'm not in front of my computer for now, but will do my best as reactive as >> possible. >> >> Best Regards, >> >> 2017-01-31 10:41 GMT+01:00 Jean-Baptiste Onofré <j...@nanthrax.net >> <mailto:j...@nanthrax.net>>: >> Hi Charlie, >> >> do you have the feature:install -v output ? It would help us to see the >> cause of the refresh (optional import, or other). >> >> Thanks ! >> >> Regards >> JB >> >> >> On 01/31/2017 10:39 AM, Charlie Mordant wrote: >> Hi users of the world's best application server ever ;-), >> >> I'm struggling with feature resolution, and would like to have your POV. >> >> This issue is concerning, the JDBC, the Blueprint and the transactional >> feature. >> >> Here's the issue with feature resolution in my pax-exam test: >> >> >> * The jdbc-pool-aries feature starts first (+ the config one and the cfg >> \o/). >> * Then the transactional feature >> * The third feature thats start is the aries jndi one, so the two >> datasources (the XA and non-XA ones) are exposed (\o/\o/). >> * But the third that starts is the blueprint one, which starts the >> xbean-blueprint bundle. >> That blueprint bundle restarts the 'optional' resolutions of aries >> transaction manager, which then restarts aries-jdbc modules (optional >> res again) & config, which stops the datasource and starts another one. >> Unfortunately, at this point, my 'daos' bundle is already linked with a >> proxy to the 'old' datasource. >> >> A way to fix it is to reference the 'transaction' feature in the >> 'pool-aries' one, and the 'blueprint' one in the 'transaction' one, but >> it would then break some modularity. >> >> Have you got an idea on how to properly handle it? >> >> The actual xml of my features, they're slightly similar to the karaf >> ones, with bundle versions aligned: >> [code] >> >> <feature name="osgiliath-pax-jdbc-pool-aries" description="Provides >> JDBC Pooling DataSourceFactory using Aries Transaction JDBC" >> version="${org.ops4j.pax.jdbc_pax-jdbc-features.version}" resolver="(obr)"> >> <feature>osgiliath-pax-jdbc-spec</feature> >> >> <bundle>mvn:org.ops4j.pax.jdbc/pax-jdbc-pool-common/${org.ops4j.pax.jdbc_pax-jdbc-pool-common.version}</bundle> >> >> <bundle>mvn:org.ops4j.pax.jdbc/pax-jdbc-pool-aries/${org.ops4j.pax.jdbc_pax-jdbc-pool-aries.version}</bundle> >> <conditional> >> <condition>osgiliath-aries-blueprint</condition> >> <bundle >> dependency="true">mvn:org.apache.xbean/xbean-blueprint/${org.apache.xbean_xbean-blueprint.version}</bundle> >> </conditional> >> <conditional> >> <condition>osgiliath-transaction</condition> >> <bundle >> dependency="true">mvn:org.apache.aries.transaction/org.apache.aries.transaction.jdbc/${org.apache.aries.transaction_org.apache.aries.transaction.jdbc.version}</bundle> >> </conditional> >> </feature> >> >> >> <feature name="osgiliath-transaction" description="OSGi Transaction >> Manager" version="${org.apache.aries.tr >> <http://org.apache.aries.tr/>ansaction_org.apache.aries.transaction.manager.version}"> >> <config name="org.apache.aries.transaction" append="false"> >> aries.transaction.recoverable = true >> aries.transaction.timeout = 600 >> aries.transaction.howl.logFileDir = ${karaf.data}/txlog >> aries.transaction.howl.maxLogFiles = 2 >> aries.transaction.howl.maxBlocksPerFile = 512 >> aries.transaction.howl.bufferSize = 4 >> </config> >> <feature version="${transaction-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-transaction-api</feature> >> <bundle >> dependency="true">mvn:org.apache.aries/org.apache.aries.util/${org.apache.aries_org.apache.aries.util.version}</bundle> >> <bundle>mvn:org.apache.aries.transaction/org.apache.aries.tr >> <http://org.apache.aries.tr/>ansaction.manager/${org.apache.aries.transaction_org.apache.aries.transaction.manager.version}</bundle> >> <conditional> >> <condition>osgiliath-aries-blueprint</condition> >> <bundle >> dependency="true">mvn:org.apache.felix/org.apache.felix.coordinator/${org.apache.felix_org.apache.felix.coordinator.version}</bundle> >> <bundle>mvn:org.apache.aries.transaction/org.apache.aries.tr >> <http://org.apache.aries.tr/>ansaction.blueprint/${org.apache.aries.transaction_org.apache.aries.transaction.blueprint.version1}</bundle> >> <bundle>mvn:org.apache.aries.transaction/org.apache.aries.tr >> <http://org.apache.aries.tr/>ansaction.blueprint/${org.apache.aries.transaction_org.apache.aries.transaction.blueprint.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.xbean/xbean-blueprint/${org.apache.xbean_xbean-blueprint.version}</bundle> >> </conditional> >> <conditional> >> <condition>osgiliath-spring</condition> >> <feature >> version="${org.apache.servicemix.bundles.spring.version}" >> dependency="true">osgiliath-spring-tx</feature> >> </conditional> >> </feature> >> >> ********************************************************* Additional >> informations ****************************************** >> >> >> <feature name="osgiliath-transaction-api" >> version="${transaction-api_feature.version}"> >> <bundle dependency="true">mvn:javax.in >> <http://javax.in/>terceptor/javax.interceptor-api/${javax.interceptor_javax.in >> <http://javax.interceptor_javax.in/>terceptor-api.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.geronimo.specs/geronimo-atinject_1.0_spec/${org.apache.geronimo.specs_geronimo-atinject_1.0_spec.version}</bundle> >> <bundle >> dependency="true">mvn:javax.el/javax.el-api/${javax.el_javax.el-api.version}</bundle> >> <bundle >> dependency="true">mvn:javax.enterprise/cdi-api/${javax.enterprise_cdi-api.version}</bundle> >> >> <bundle>mvn:javax.transaction/javax.transaction-api/${javax.transaction_javax.transaction-api.version}</bundle> >> </feature> >> <feature name="osgiliath-persistence-api" description="Persistence API" >> version="${persistence-api_feature.version}"> >> >> <bundle>mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/${org.apache.geronimo.specs_geronimo-jpa_2.0_spec.version}</bundle> >> >> <bundle>mvn:org.apache.geronimo.specs/geronimo-osgi-registry/${org.apache.geronimo.specs_geronimo-osgi-registry.version}</bundle> >> </feature> >> <feature name="osgiliath-jpa" description="OSGi Persistence Container" >> version="${org.apache.aries.jp <http://org.apache.aries.jp/>a.version}"> >> <feature version="${transaction-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-transaction-api</feature> >> <feature version="${persistence-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-persistence-api</feature> >> <bundle >> dependency="true">mvn:org.apache.felix/org.apache.felix.coordinator/${org.apache.felix_org.apache.felix.coordinator.version}</bundle> >> <bundle >> dependency="true">mvn:org.osgi/org.osgi.service.jdbc/${org.osgi_org.osgi.service.jdbc.version}</bundle> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/${org.apache.aries.jpa_org.apache.aries.jpa.api.version}</bundle> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.container/${org.apache.aries.jpa_org.apache.aries.jpa.container.version}</bundle> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.support/${org.apache.aries.jpa_org.apache.aries.jpa.support.version}</bundle> >> <conditional> >> <condition>osgiliath-aries-blueprint</condition> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.blueprint/${org.apache.aries.jpa_org.apache.aries.jpa.blueprint.version}</bundle> >> </conditional> >> </feature> >> >> <feature name="osgiliath-openjpa" description="Apache OpenJPA 2.4.x >> persistence engine support" version="${org.apache.openjpa.version}"> >> <feature prerequisite="false" >> dependency="false">osgiliath-jndi</feature> >> <feature version="${transaction-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-transaction-api</feature> >> <feature version="${persistence-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-persistence-api</feature> >> <bundle dependency="true">mvn:javax.se >> <http://javax.se/>rvlet/javax.servlet-api/${javax.servlet_javax.servlet-api.ve >> <http://x.servlet_javax.servlet-api.ve/>rsion}</bundle> >> <bundle >> dependency="true">mvn:javax.el/javax.el-api/${javax.el_javax.el-api.version}</bundle> >> <bundle >> dependency="true">mvn:commons-lang/commons-lang/${commons-lang_commons-lang.version}</bundle> >> <bundle >> dependency="true">mvn:commons-collections/commons-collections/${commons-collections_commons-collections.version}</bundle> >> <bundle >> dependency="true">mvn:commons-pool/commons-pool/${commons-pool_commons-pool.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-dbcp/${org.apache.servicemix.bundles_org.apache.servicemix.bundles.commons-dbcp.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.ant/${org.apache.servicemix.bundles_org.apache.servicemix.bundles.an >> <http://g.apache.servicemix.bundles.an/>t.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.serp/${org.apache.servicemix.bundles_org.apache.servicemix.bundles.serp.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.geronimo.specs/geronimo-jms_1.1_spec/${org.apache.geronimo.specs_geronimo-jms_1.1_spec.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.xbean/xbean-asm5-shaded/${org.apache.xbean_xbean-asm5-shaded.version}</bundle> >> >> <bundle>mvn:org.apache.openjpa/openjpa/${org.apache.openjpa_openjpa.version}</bundle> >> </feature> >> <feature name="osgiliath-connector" >> version="${org.apache.geronimo.components_geronimo-connector.version}" >> description="OSGi Support for JCA Connector 1.6" resolver="(obr)"> >> <feature version="${org.apache.aries.tr >> <http://org.apache.aries.tr/>ansaction_org.apache.aries.transaction.manager.version}">osgiliath-transaction</feature> >> <bundle >> dependency="true">mvn:org.apache.geronimo.specs/geronimo-j2ee-connector_1.6_spec/${org.apache.geronimo.specs_geronimo-j2ee-connector_1.6_spec.version}</bundle> >> <bundle dependency="true">mvn:javax.va >> <http://javax.va/>lidation/validation-api/${javax.validation_validation-api.ve >> <http://x.validation_validation-api.ve/>rsion}</bundle> >> >> <bundle>mvn:org.apache.geronimo.components/geronimo-connector/${org.apache.geronimo.components_geronimo-connector.version}</bundle> >> </feature> >> <feature name="osgiliath-jpa" description="OSGi Persistence Container" >> version="${org.apache.aries.jp <http://org.apache.aries.jp/>a.version}"> >> <feature version="${transaction-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-transaction-api</feature> >> <feature version="${persistence-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-persistence-api</feature> >> <bundle >> dependency="true">mvn:org.apache.felix/org.apache.felix.coordinator/${org.apache.felix_org.apache.felix.coordinator.version}</bundle> >> <bundle >> dependency="true">mvn:org.osgi/org.osgi.service.jdbc/${org.osgi_org.osgi.service.jdbc.version}</bundle> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/${org.apache.aries.jpa_org.apache.aries.jpa.api.version}</bundle> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.container/${org.apache.aries.jpa_org.apache.aries.jpa.container.version}</bundle> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.support/${org.apache.aries.jpa_org.apache.aries.jpa.support.version}</bundle> >> <conditional> >> <condition>osgiliath-aries-blueprint</condition> >> >> <bundle>mvn:org.apache.aries.jpa/org.apache.aries.jpa.blueprint/${org.apache.aries.jpa_org.apache.aries.jpa.blueprint.version}</bundle> >> </conditional> >> </feature> >> <feature name="osgiliath-openjpa" description="Apache OpenJPA 2.4.x >> persistence engine support" version="${org.apache.openjpa.version}"> >> <details>Enable Apache OpenJPA as persistence engine.</details> >> <feature prerequisite="false" >> dependency="false">osgiliath-jndi</feature> >> <feature version="${transaction-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-transaction-api</feature> >> <feature version="${persistence-api_feature.version}" >> prerequisite="false" dependency="false">osgiliath-persistence-api</feature> >> <bundle dependency="true">mvn:javax.se >> <http://javax.se/>rvlet/javax.servlet-api/${javax.servlet_javax.servlet-api.ve >> <http://x.servlet_javax.servlet-api.ve/>rsion}</bundle> >> <bundle >> dependency="true">mvn:javax.el/javax.el-api/${javax.el_javax.el-api.version}</bundle> >> <bundle >> dependency="true">mvn:commons-lang/commons-lang/${commons-lang_commons-lang.version}</bundle> >> <bundle >> dependency="true">mvn:commons-collections/commons-collections/${commons-collections_commons-collections.version}</bundle> >> <bundle >> dependency="true">mvn:commons-pool/commons-pool/${commons-pool_commons-pool.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-dbcp/${org.apache.servicemix.bundles_org.apache.servicemix.bundles.commons-dbcp.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.ant/${org.apache.servicemix.bundles_org.apache.servicemix.bundles.an >> <http://g.apache.servicemix.bundles.an/>t.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.serp/${org.apache.servicemix.bundles_org.apache.servicemix.bundles.serp.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.geronimo.specs/geronimo-jms_1.1_spec/${org.apache.geronimo.specs_geronimo-jms_1.1_spec.version}</bundle> >> <bundle >> dependency="true">mvn:org.apache.xbean/xbean-asm5-shaded/${org.apache.xbean_xbean-asm5-shaded.version}</bundle> >> >> <bundle>mvn:org.apache.openjpa/openjpa/${org.apache.openjpa_openjpa.version}</bundle> >> </feature> >> >> >> >> <feature name='osgiliath-persistence' version='${project.version}' >> resolver="(obr)" start-level="41" description="Java persistence API stack" > >> <bundle dependency='true'>mvn:javax.se >> <http://javax.se/>rvlet/javax.servlet-api/${javax.servlet_javax.servlet-api.ve >> <http://x.servlet_javax.servlet-api.ve/>rsion}</bundle> >> <feature >> version="${project.version}">osgiliath-jdbc</feature> >> <feature >> version="${org.apache.geronimo.components_geronimo-connector.version}">osgiliath-connector</feature> >> <feature version="${org.apache.aries.jp >> <http://org.apache.aries.jp/>a.version}">osgiliath-jpa</feature> >> <bundle >> dependency='true'>mvn:org.osgi/org.osgi.service.jpa/${org.osgi_org.osgi.service.jpa.version}</bundle> >> <feature >> version="${org.apache.openjpa.version}">osgiliath-openjpa</feature> >> <feature >> version="${org.apache.karaf.features_standard.version}">osgiliath-aries-blueprint</feature> >> >> <bundle>mvn:org.apache.xbean/xbean-reflect/${org.apache.xbean_xbean-reflect.version}</bundle> >> <feature >> version="${project.version}">osgiliath-spring-data-jpa</feature> >> <conditional> >> <condition>osgiliath-rest-management</condition> >> <bundle start-level="35" >> dependency="true">mvn:io.swagger/swagger-annotations/${io.swagger_swagger-annotations.version}</bundle> >> </conditional> >> </feature> >> >> [/code] >> >> >> Best regards, and keep up bringing the OSGI dream comes true ;-) >> >> >> -- >> Charlie Mordant >> >> Full OSGI/EE stack made with Karaf: >> https://github.com/OsgiliathEnterprise/net.osgiliath.parent >> <https://github.com/OsgiliathEnterprise/net.osgiliath.parent> >> >> -- >> Jean-Baptiste Onofré >> jbono...@apache.org <mailto:jbono...@apache.org> >> http://blog.nanthrax.net <http://blog.nanthrax.net/> >> Talend - http://www.talend.com <http://www.talend.com/> >> >> >> >> -- >> Charlie Mordant >> >> Full OSGI/EE stack made with Karaf: >> https://github.com/OsgiliathEnterprise/net.osgiliath.parent >> <https://github.com/OsgiliathEnterprise/net.osgiliath.parent> > > > > > -- > Charlie Mordant > > Full OSGI/EE stack made with Karaf: > https://github.com/OsgiliathEnterprise/net.osgiliath.parent > <https://github.com/OsgiliathEnterprise/net.osgiliath.parent>