[
https://issues.apache.org/jira/browse/AMQ-4777?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13843200#comment-13843200
]
Amichai Rothman commented on AMQ-4777:
--------------------------------------
DOSGi was updated with a new bundle that exports(+imports) only the necessary
osgi apis out of the compendium. However I then started hitting another issue,
whose investigation may also be related: AMQ-4850.
> ActiveMQ broker silently fails to start in Karaf
> ------------------------------------------------
>
> Key: AMQ-4777
> URL: https://issues.apache.org/jira/browse/AMQ-4777
> Project: ActiveMQ
> Issue Type: Bug
> Components: OSGi/Karaf
> Affects Versions: 5.8.0
> Environment: Kubuntu 64-bit, Oracle JDK 7u40, Karaf 2.3.3
> Reporter: Amichai Rothman
> Assignee: Jean-Baptiste Onofré
> Fix For: 5.10.0
>
>
> I have an application, deployed into Karaf. I install the activemq-broker
> feature, and one of the app bundles uses ActiveMQConnectionFactory to get a
> javax.jms.Connection instance and then uses the JMS API only (no other
> ActiveMQ-specific APIs in use). I'll note that this bundle depends on another
> bundle which uses the JMS API as well (no ActiveMQ imports there at all). The
> application also depends on other karaf features such as cxf-dosgi.
> ActiveMQ fails to start in a couple of ways, depending on the order of
> installation of the features and app:
> At first I got a LinkageError:
> java.lang.LinkageError: loader constraint violation: when resolving method
> "org.apache.activemq.ActiveMQConnectionFactory.createConne
> ction()Ljavax/jms/Connection;" the class loader (instance of
> org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) of the current
> class, com/myprojectgroup/bus/activemq/ActiveMQSession, and the class loader
> (instance of org/eclipse/osgi/internal/baseadaptor/D
> efaultClassLoader) for resolved class,
> org/apache/activemq/ActiveMQConnectionFactory, have different Class objects
> for the type Ljava
> x/jms/Connection; used in the signature
> at
> com.myprojectgroup.bus.activemq.ActiveMQSession.createConnection(ActiveMQSession.java:38)
> at
> com.myprojectgroup.messaging.jms.Session.open(Session.java:70)[68:com.myprojectgroup.messaging:0.1.0.SNAPSHOT]
> at
> com.myprojectgroup.messaging.jms.Session$1.run(Session.java:108)[68:com.myprojectgroup.messaging:0.1.0.SNAPSHOT]
> The only bundle that exports the javax.jms package is
> org.apache.geronimo.specs.geronimo-jms_1.1_spec, though after further
> investigation I found that the activemq-web-console bundle does have another
> copy of it internally, which I think might be the cause of the conflict (it
> does not import the package in the manifest, so I can't just remove the
> package from the jar since it won't find the package exported by the
> geronimo-jms bundle without a corresponding import declaration). The
> activemq-osgi bundle has a DynamicImport-Package: *, which may further
> complicate things. If it also had an explicit Import-Package directive for
> the statically-linked classes it uses such as javax.jms ones, perhaps it
> would go through the regular bundle classloading mechanism and avoid the
> problem - I think it takes precedence over dynamic imports, though I'm not
> sure).
> Next, I played around with reordering the installation, and got to another
> failure mode where there is no exception at all or any error in the logs, but
> the broker simply fails to start silently. Perhaps this is also caused by
> classloader issues but they are just occurring somewhere within ActiveMQ and
> being silently ignored. This mode of failure I've managed to recreate easily:
> On a fresh stock installation of Karaf 2.3.3, add two feature urls:
> features:addurl mvn:org.apache.activemq/activemq-karaf/5.8.0/xml/features
> mvn:org.apache.cxf.dosgi/cxf-dosgi/1.6-SNAPSHOT/xml/features
> (you might need to add the apache snapshot repo to karaf for it to find the
> dosgi snapshot feature)
> And then install them in this order:
> features:install -v cxf-dosgi-discovery-distributed activemq-broker
> The broker will not be started, although the logs will have no errors.
> Strangely, if you now uninstall the activemq-web-console bundle (not feature)
> and restart karaf, the broker will start ok. Also if you install only
> activemq-broker and not dosgi, it will start ok.
> To simplify, I found that instead of the dosgi feature it's enough to install
> and start the mvn:org.osgi/org.osgi.compendium/4.3.1 bundle before installing
> activemq-broker to make it fail - this is from looking at the innards of the
> dosgi feature, however if I remove this bundle from the feature the broker
> still fails to start, so it's not the only bundle causing problems, but just
> an example.
> The only workaround I've found so far is to install everything, then
> uninstall the activemq-web-console bundle and restart - then everything works
> as it should. Strangely, not installing it in the first place doesn't work
> either - the broker won't start unless the web console is first started, then
> uninstalled.
> Some details of the LinkageError are in http://pastebin.com/TKZt7hUA (pasted
> to karaf irc channel originally).
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)