Exception 如何测试使用Infinispan(JBoss 7+Arquillian)的JAX-RS应用程序
信息:我的应用程序是一个简单的JAX-RS服务,它将一些值存储在JBoss7.1提供的缓存中 我想使用Arquillian调用服务并测试响应。但不幸的是,我在尝试运行测试时出现了以下错误:Exception 如何测试使用Infinispan(JBoss 7+Arquillian)的JAX-RS应用程序,exception,dependency-injection,jboss7.x,jboss-arquillian,infinispan,Exception,Dependency Injection,Jboss7.x,Jboss Arquillian,Infinispan,信息:我的应用程序是一个简单的JAX-RS服务,它将一些值存储在JBoss7.1提供的缓存中 我想使用Arquillian调用服务并测试响应。但不幸的是,我在尝试运行测试时出现了以下错误: java.lang.IllegalArgumentException: Can not set org.infinispan.manager.CacheContainer field com.company.DataCache.container to org.jboss.as.clustering.i
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;
}
}
我的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());
}
}
问题:
@资源从JBoss提供正确的缓存,有没有一种方法可以像获取数据库的资源那样进行操作?
有没有办法模拟像getCache这样的服务调用?
总之,我想使用Arquilian进行客户端测试,因为我使用了大量依赖项注入,也许有一个示例项目使用@Resource和Infinispan 您尝试插入的缓存容器是Hibernate的二级缓存。您不应该真正尝试访问Hibernate 2LC的底层缓存。如果需要有关此缓存的信息,请启用2LC统计信息
如果要插入Infinispan缓存,请签入,查看如何定义自己的缓存容器,并将其插入CDI应用程序。您尝试插入的缓存容器是Hibernate的二级缓存。您不应该真正尝试访问Hibernate 2LC的底层缓存。如果需要有关此缓存的信息,请启用2LC统计信息
如果您想插入Infinispan缓存,请查看如何定义自己的缓存容器,并将其插入CDI应用程序。是否将Infinispan类与arquillian部署打包在一起?Infinispan作为模块与JBoss捆绑在一起,无需部署即可使用。类路径中模棱两可的类名可能会导致该问题 问候
Jan您是否将Infinispan类与arquillian部署打包在一起?Infinispan作为模块与JBoss捆绑在一起,无需部署即可使用。类路径中模棱两可的类名可能会导致该问题 问候
Jan在所有答案之后,我得到了答案,我只想为其他寻找相同问题的人总结一下 删除了以下行:.AddAsLibrariesMVNRolver.artifactorg.infinispan:infinispan核心:5.2.0.Final.resolveAsFiles 将MANIFEST.MF文件添加到src/test/resource,其中包含内容依赖项:org.infinispan export 将.addAsManifestResourceMANIFEST.MF行添加到包覆面提取 将以下内容添加到JBoss中的standalone.xml/domain.xml配置文件中:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="org.infinispan" slot="main"/>
</global-modules>
</subsystem>
在所有答案之后,我得到了答案,我只想为其他寻找相同问题的人总结一下 删除了以下行:.AddAsLibrariesMVNRolver.artifactorg.infinispan:infinispan核心:5.2.0.Final.resolveAsFiles 将MANIFEST.MF文件添加到src/test/resource,其中包含内容依赖项:org.infinispan export 将.addAsManifestResourceMANIFEST.MF行添加到包覆面提取 将以下内容添加到JBoss中的standalone.xml/domain.xml配置文件中:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="org.infinispan" slot="main"/>
</global-modules>
</subsystem>
主要问题是缺少MANFEST.MF,我在部署Arquillian时添加了infinispan core。但谢谢你的提示,我一定会调查的。主要问题是缺少MANFEST.MF,我在部署Arquillian时添加了infinispan core。但是谢谢你的提示,我一定会调查的。我认为这是问题的一部分,见下面我的答案。我认为这是问题的一部分,见下面我的答案。