JBoss 7 Classloader — Exclude Module Implementation

我怕爱的太早我们不能终老 提交于 2020-01-16 18:05:43

问题


I have a simple piece of code instantiating a JBoss Hot Rod client and this is deployed in an .ear file on Jboss 7

 System.out.println("Attempting to RemoteCacheManager at: "+ipAddress);
  Configuration conf = new
            ConfigurationBuilder().addServer().host(ipAddress).port(11222).build();
  RemoteCacheManager manager = new RemoteCacheManager(conf);
  RemoteCache defaultCache = manager.getCache();
  System.out.println("SUCCESS OUT: Connected to RemoteCacheManager at: "+ipAddress);
  logger.info("SUCCESS: Connected to RemoteCacheManager at {}",ipAddress);

However when I deploy the app it cannot find the the class/method RemoteCacheManager

Caused by: java.lang.NoSuchMethodError: org.infinispan.client.hotrod.RemoteCacheManager.<init>(Lorg/infinispan/client/hotrod/configuration/Configuration;)V

My App has a structure like this

--ear
  ---lib 
        ---infinispan-client-hotrod-6.0.2-FINAL.jar
        --- other .jars
  ---META-INF
        ---MANIFEST.MF
  ---myservice.jar
  ---mysrvice.war

This is caused because I include the latest hot rod client as a maven dependency but an older version is available as a module. How can I tell Jboss to exclude the older implementation in its module

Thanks


回答1:


the issue in this case was not as I thought. The issue was JBoss already included an older version of hot rod as a module and hence the "java.lang.NoSuchMethodError"

The solution, to exclude a module and provide a new implementation via new maven dependency is to use the jboss-deployment-structure.xml. Place this file in ear>src>main>META-INF>application

I am being extra careful below by excluding from main deployment and subdeployment and left it here for illustration purposes. I will remove one entry later...

<?xml version="1.0"?>

    <exclusions>
        <module name="org.infinispan.client.hotrod"/>
    </exclusions>
    <sub-deployment name="myservice-ejb-1.0.1-SNAPSHOT.jar">
        <!-- This corresponds to the module for a web deployment -->
        <!-- it can use all the same tags as the <deployment> entry above -->

            <exclusions>
                <module name="org.infinispan.client.hotrod"/>
            </exclusions>

    </sub-deployment>
</deployment>



来源:https://stackoverflow.com/questions/25515171/jboss-7-classloader-exclude-module-implementation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!