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.transaction_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.transaction.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.transaction.blueprint/${org.apache.aries.transaction_org.apache.aries.transaction.blueprint.version1}</bundle>
<bundle>mvn:org.apache.aries.transaction/org.apache.aries.transaction.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.interceptor/javax.interceptor-api/${javax.interceptor_javax.interceptor-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.jpa.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.servlet/javax.servlet-api/${javax.servlet_javax.servlet-api.version}</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.ant.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.transaction_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.validation/validation-api/${javax.validation_validation-api.version}</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.jpa.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.servlet/javax.servlet-api/${javax.servlet_javax.servlet-api.version}</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.ant.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.servlet/javax.servlet-api/${javax.servlet_javax.servlet-api.version}</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.jpa.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
--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com