Discussion:
Problems using Jena-OSGi / Resolved thanks to OSGi ServiceLoader Mediator
Jaroslav Pullmann
2016-03-20 07:44:38 UTC
Permalink
Hello Andy,
Can you debug enough to see if ARQ.init is bing called from InitARQ?>
The NPE can come from getContext() returning null
and getContext() is not null if ARQ.init has been called because
defaultSettings() unconditionally creates a Context object.
you were right! Apparently the ServiceProvider mechanism and OSGi do not play nicely.

- I followed the hint on "Service Loader Consumer":

http://blog.osgi.org/2013/02/javautilservicel oader-in-osgi.html

- used Karaf 4.0.5 providing OSGi v5 APIs along with "OSGi ServiceLoader Mediator" specification

- installed Apache Aries SPI Fly bundle, the reference implementation:
http://mvnrepository.com/artifact/org.apache.aries.spifly/org.apache.aries.spifly.dynamic.bundle/1.0.8

- enhanced Jena-Osgi pom according to "spi-fly-example-provider-consumer-bundle"

http://aries.apache.org/modules/spi-fly.html#examples
http://svn.apache.org/repos/asf/aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-provider-consumer-bundle/pom.xml

<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
...
<SPI-Consumer>*</SPI-Consumer>
<SPI-Provider>*</SPI-Provider>
...
</instructions>
</configuration>
</plugin>
</plugins>
</build>


- and, voilà (logging via a bundle Activator with JenaSystem.DEBUG_INIT enabled):

JenaSystem.init - start
InitJenaCore
InitRIOT
InitARQ
InitTDB
Init: JenaInitLevel0
Init: InitJenaCore
JenaCore.init - start
JenaCore.init - finish
Init: InitRIOT
RIOT.init - start
RIOT.init - finish
Init: InitARQ
ARQ.init - start
ARQ.init - finish
Init: InitTDB
TDB.init - start
TDB.init - finish
JenaSystem.init - finish
Jena-Osgi bundle configured!
We know that it is only a small %-age of the downloads. There is a good
chance that people are also packaging their own setups because the
bundles are right for them.
Having feedback and fixes is essential to keep a module usable.
I am glad to use Jena, and now even more ;o) Many thanks for you support.

Best regards
Jaroslav
--
Jaroslav Pullmann
Fraunhofer Institute for Applied Information Technology FIT
Web Compliance Center: http://imergo.com/ · http://imergo.de/
Schloss Birlinghoven, D-53757 Sankt Augustin, Germany
Phone: +49-2241-142623 · Fax: +49-2241-142065
Andy Seaborne
2016-03-27 11:42:14 UTC
Permalink
Jaroslav,

Would it be possible for you to create a pull request against he current
codebase for this? Having someone who understands OSGi make this change
is better than having someone who does no use OSGi day-to-day.

Andy
Post by Jaroslav Pullmann
Hello Andy,
Can you debug enough to see if ARQ.init is bing called from InitARQ?>
The NPE can come from getContext() returning null
and getContext() is not null if ARQ.init has been called because
defaultSettings() unconditionally creates a Context object.
you were right! Apparently the ServiceProvider mechanism and OSGi do not play nicely.
http://blog.osgi.org/2013/02/javautilservicel oader-in-osgi.html
- used Karaf 4.0.5 providing OSGi v5 APIs along with "OSGi ServiceLoader Mediator" specification
http://mvnrepository.com/artifact/org.apache.aries.spifly/org.apache.aries.spifly.dynamic.bundle/1.0.8
- enhanced Jena-Osgi pom according to "spi-fly-example-provider-consumer-bundle"
http://aries.apache.org/modules/spi-fly.html#examples
http://svn.apache.org/repos/asf/aries/trunk/spi-fly/spi-fly-examples/spi-fly-example-provider-consumer-bundle/pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
...
<SPI-Consumer>*</SPI-Consumer>
<SPI-Provider>*</SPI-Provider>
...
</instructions>
</configuration>
</plugin>
</plugins>
</build>
JenaSystem.init - start
InitJenaCore
InitRIOT
InitARQ
InitTDB
Init: JenaInitLevel0
Init: InitJenaCore
JenaCore.init - start
JenaCore.init - finish
Init: InitRIOT
RIOT.init - start
RIOT.init - finish
Init: InitARQ
ARQ.init - start
ARQ.init - finish
Init: InitTDB
TDB.init - start
TDB.init - finish
JenaSystem.init - finish
Jena-Osgi bundle configured!
We know that it is only a small %-age of the downloads. There is a good
chance that people are also packaging their own setups because the
bundles are right for them.
Having feedback and fixes is essential to keep a module usable.
I am glad to use Jena, and now even more ;o) Many thanks for you support.
Best regards
Jaroslav
Loading...