Arquillian 与 WildFly 10 的集成
Arquillian Integration with WildFly 10
任何人都可以指导我如何将 Arquillian 与 WildFly 10 一起使用。我最近将我的应用程序从 JBoss 7 迁移到 WildFly 10。Arquillian 曾经使用 JBoss 7,但是相同的配置不适用于 WildFly 10。
我现在可以集成,但是我的 JNDI 名称为 "java:global/xyz/xyzEMFactor" 的 EJB 失败并出现以下错误:
Caused by: java.lang.Exception: {"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.naming.context.java.module.test.test.env.\"com.xyz.abc.poc.knowledge_base.ontology.DBContextBean\".emFactory is missing [jboss.naming.context.java.global.xyz_dal.xyzpEMFactory]"]} at org.jboss.as.controller.client.helpers.standalone.impl.ServerDeploymentPlanResultFuture.getActionResult(ServerDeploymentPlanResultFuture.java:134)
以下是我的class:
@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;
}
我不知道这在 JBoss7 中如何工作但是:@EJB 或 @Inject,我认为 @Inject,是多余的。根据我的经验,在查看不清楚的结构时,wildfly 有时比 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 可以用作 Producer-Field。
这是因为,可测试的 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" 不可用。
任何人都可以指导我如何将 Arquillian 与 WildFly 10 一起使用。我最近将我的应用程序从 JBoss 7 迁移到 WildFly 10。Arquillian 曾经使用 JBoss 7,但是相同的配置不适用于 WildFly 10。
我现在可以集成,但是我的 JNDI 名称为 "java:global/xyz/xyzEMFactor" 的 EJB 失败并出现以下错误:
Caused by: java.lang.Exception: {"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.naming.context.java.module.test.test.env.\"com.xyz.abc.poc.knowledge_base.ontology.DBContextBean\".emFactory is missing [jboss.naming.context.java.global.xyz_dal.xyzpEMFactory]"]} at org.jboss.as.controller.client.helpers.standalone.impl.ServerDeploymentPlanResultFuture.getActionResult(ServerDeploymentPlanResultFuture.java:134)
以下是我的class:
@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;
}
我不知道这在 JBoss7 中如何工作但是:@EJB 或 @Inject,我认为 @Inject,是多余的。根据我的经验,在查看不清楚的结构时,wildfly 有时比 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 可以用作 Producer-Field。
这是因为,可测试的 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" 不可用。