Search code examples
webspherewebsphere-libertywebsphere-8

wasJmsClient-2.0 is not compatible to ejbLite-3.1


I Wanted to migrate my existing code from JMS1.1 to JMS 2.0. I am deploying application through WebSphere Liberty Profile 16.0 using Java 8. When I am enabling wasJmsClient-2.0 feature in server.xml, I am getting below error:

['wasJmsClient-2.0' --> 'com.ibm.websphere.appserver.internal.jms-2.0' --> 'com.ibm.websphere.appserver.javax.connector.internal-1.7'] and ['ejbLite-3.1' --> 'com.ibm.websphere.appserver.transaction-1.1' --> 
 'com.ibm.websphere.appserver.javax.connector.internal-1.6'] features are in conflict. Select a compatible set of features.

How do I know which features are compatible and which are not?


Solution

  • In general, most feature incompatibility issues in WebSphere Liberty come when mixing features from Java EE 6 technologies with features from Java EE 7. This is the case in your example - wasJmsClient-2.0 is a part of the EE 7 feature set while ejbLite-3.1 is part of the EE 6 feature set. You can resolve the feature incompatibility by changing feature ejbLite-3.1 to ejbLite-3.2.

    If you want to determine the compatibility of multiple features, there are two ways that I know of (both are somewhat complex...): 1) Inspect the feature manifest files in the wlp/lib/features directory, and look for the Subsystem-Content header - and specifically entries that are of type "osgi.subsystem.feature". These are the feature's dependencies - some of them will declare that they can work with different versions of a particular feature. Others are more stringent. 2) Run "wlp/bin/featureManager featureList myFeatureList.xml". This will generate an XML file that will provide the same information as the feature manifests, but in an XML format that may be easier to read. It will show the dependencies like this:

       <feature name="wasJmsClient-2.0"> 
        <symbolicName>com.ibm.websphere.appserver.wasJmsClient-2.0</symbolicName> 
        <singleton>true</singleton> 
        <displayName>JMS 2.0 Client for Message Server</displayName>
        <!-- ... -->
        <include symbolicName="com.ibm.websphere.appserver.channelfw-1.0"></include> 
        <include symbolicName="com.ibm.websphere.appserver.transaction-1.2"></include> 
        <include symbolicName="com.ibm.websphere.appserver.internal.jms-2.0"></include> 
    </feature> 
    

    From there you could follow the dependency chain and see that wasJmsClient-2.0 depends on transaction-1.2, but that ejbLite-3.1 depends on transaction-1.1 - and neither feature would tolerate the other version.