请任何人指导我如何在WildFly 10中使用Arquillian。我最近将我的应用程序从JBoss 7迁移到了WildFly 10。Arquillian曾经使用过JBoss 7,但在WildFly 10上没有相同的配置。
现在我可以集成JNDI名称为"java:global/xyz/xyzEMFactor“的EJB了,但出现了以下错误:
由:["jboss.naming.context.java.module.test.test.env.\"com.xyz.abc.poc.knowledge_base.ontology.DBContextBean\".emFactory:{"WFLYCTL0180:包含缺失/不可用依赖项的服务“=> =>引起,在org.jboss.as.controller.client.helpers.standalone.impl.ServerDeploymentPlanResultFuture.getActionResult(ServerDeploymentPlanResultFuture.java:134)上缺少java.lang.Exception
以下是我的班级:
@AccessTimeout(5 * 60 * 60 * 1000)
@StatefulTimeout(-1)
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class DBContextBean<T> {
@Inject
@EJB(lookup = "java:global/xyz_dal/xyzEMFactory")
private xyzEMFactory emFactory;
}发布于 2017-10-31 05:10:52
这是因为,可测试的war文件,我创建了一个jar,
@Deployment(name = "xyz_dal", order = 3)
public static Archive<?> createDeployment() {
JavaArchive jar = ShrinkWrap.create(JavaArchive .class, "xyz_dal.jar")
.addClasses(xyzEMFactory.class, DBContextBean.class, xyzDao.class)
.addPackages(true, "com.xyz.abc.poc.entities")
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml").setManifest(new Asset() {
@Override
public InputStream openStream() {
// dependency management
return ManifestBuilder.newInstance()
.addManifestHeader("Dependencies", "xyz,javax.api,deployment.abc_common.jar")
.openStream();
}
});
return jar;
}当我把它改成
@Deployment(name = "xyz_dal", order = 3)
public static Archive<?> createDeployment() {
WebArchive jar = ShrinkWrap.create(WebArchive.class, "xyz_dal.war")
.addClasses(xyzpEMFactory.class, DBContextBean.class, xyzDao.class)
.addPackages(true, "com.xyz.abc.poc.entities")
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml").setManifest(new Asset() {
@Override
public InputStream openStream() {
// dependency management
return ManifestBuilder.newInstance()
.addManifestHeader("Dependencies", "xyz,javax.api,deployment.abc_common.jar")
.openStream();
}
});
return jar;
}这是因为当我创建一个可测试的jar时,容器将jar包装在一个test.war中,因此上下文"java:global/xyz/xyzEMFactory“不可用。
发布于 2017-08-30 07:50:01
我不知道这在JBoss7中是如何工作的,但是:我认为@EJB或@Inject都是多余的。根据我的经验,在查看不清楚的构造时,通配符有时比jboss7更严格。
@Inject
@EJB(lookup = "java:global/xyz_dal/xyzEMFactory")
xyzEMFactory emFactory;CDI不能注射ejbs。我们有时所做的是:
@Produces
@EJB(lookup = "java:global/xyz/xyzEMFactory")
xyzEMFactory emFactory;然后你可以在其他地方使用
@Inject
xyzEMFactory emFactory;因为ejb注入的bean可以用作生产者字段。
https://stackoverflow.com/questions/45582233
复制相似问题