我有一段简单的代码来实例化一个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在其模块中排除旧实现
由于
答案 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>