[ 
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)

Reply via email to