信息:我的应用程序是一个简单的JAX-RS服务,它将一些值存储在JBoss 7.1提供的缓存中。
我想使用Arquillian来调用服务并测试响应。但不幸的是,当我尝试运行测试时,我收到了这个错误:
java.lang.IllegalArgumentException:
Can not set org.infinispan.manager.CacheContainer field
com.company.DataCache.container to
org.jboss.as.clustering.infinispan.DefaultEmbeddedCacheManager
这是我的DataCache类:
@ManagedBean
public class DataCache<K, V> {
@Resource(lookup="java:jboss/infinispan/container/hibernate")
private CacheContainer container;
private Cache<K, V> cache;
@PostConstruct
public void start() {
this.cache = this.container.getCache();
}
public Cache<K, V> getCache() {
return cache;
}
}
My Testclass看起来像这样:
@RunWith(Arquillian.class)
@RunAsClient
public class SyncClientServerTest extends RbmlClientServerTest {
@Deployment(testable = false)
public static WebArchive createDeployment() {
MavenDependencyResolver mvnResolver = DependencyResolvers.use(MavenDependencyResolver.class).loadMetadataFromPom("pom.xml").goOffline();
return ShrinkWrap
.create(WebArchive.class, "cache-service.war")
.addPackages(true, Filters.exclude(".*ClientServerTest.*"), "com/company")
.addAsLibraries(mvnResolver.artifact("org.infinispan:infinispan-core:5.2.0.Final").resolveAsFiles())
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Test
public void testStatus() throws Exception {
ClientRequest request = new ClientRequest("localhost:8080/cache-service/cache");
request.accept(MediaType.APPLICATION_JSON_TYPE);
request.body(MediaType.APPLICATION_JSON_TYPE, "");
ClientResponse<String> responseObj = request.post(String.class);
assertEquals(200, responseObj.getStatus());
}
}
问题
总而言之,我想使用Arquilian进行客户端测试,因为我使用了大量的依赖注入,也许有一个使用@Resource和Infinispan的示例项目。
答案 0 :(得分:4)
在所有答案之后我得到了答案,我只是想为其他寻找相同问题的人总结一下。
.addAsLibraries(mvnResolver.artifact("org.infinispan:infinispan-core:5.2.0.Final").resolveAsFiles())
MANIFEST.MF
src/test/resource
文件添加到Dependencies: org.infinispan export
.addAsManifestResource("MANIFEST.MF")
添加到ShrinkWrap 将以下内容添加到JBoss中的standalone.xml / domain.xml配置文件中:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="org.infinispan" slot="main"/>
</global-modules>
</subsystem>
答案 1 :(得分:1)
您尝试插入的缓存容器是Hibernate的二级缓存。您不应该真正尝试访问Hibernate 2LC的底层缓存。如果您需要有关此缓存的信息,请启用2LC统计信息。
如果您要执行的操作是插入Infinispan缓存,请查看Infinispan JBoss AS7 quickstart,您可以在其中查看如何定义自己的缓存容器,并将其插入CDI应用程序。
答案 2 :(得分:1)
您是否将任何Infinispan类与您的arquillian部署一起打包? Infinispan与JBoss捆绑在一起作为模块,无需部署即可使用。类路径中的Ambigious类名可能会导致该问题。
此致
扬