JBoss 7类加载器 - 排除模块实现

时间:2014-08-26 21:08:34

标签: java java-ee jboss jboss7.x classloader

我有一段简单的代码来实例化一个JBoss Hot Rod客户端,它部署在Jboss 7上的.ear文件中

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

但是,当我部署应用程序时,它无法找到类/方法RemoteCacheManager

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

我的应用程序有这样的结构

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

这是因为我将最新的热棒客户端作为maven依赖项包含在内,但旧版本可用作模块。如何告诉Jboss在其模块中排除旧实现

由于

1 个答案:

答案 0 :(得分:0)

这个案子的问题并不像我想的那样。问题是JBoss已经包含了旧版本的热棒作为模块,因此&#34; java.lang.NoSuchMethodError&#34;

通过新的maven依赖项排除模块并提供新实现的解决方案是使用jboss-deployment-structure.xml。将此文件放在耳朵&gt; src&gt; main&gt; META-INF&gt;应用程序

下面我要特别注意从主要部署和子部署中排除,并将其留在此处以供说明之用。我稍后会删除一个条目......

<?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>