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>

Reply via email to