Arquillian与WildFly 10的整合

时间:2017-08-09 05:22:15

标签: wildfly jboss-arquillian wildfly-10 ejb-3.2

任何人都可以指导我如何在WildFly 10中使用Arquillian。我最近将我的应用程序从JBoss 7迁移到WildFly 10.Arquillian曾经使用过JBoss 7,但是同样的配置在WildFly 10上不起作用。< / p>

我现在能够集成,但我的JNDI名称为“java:global / xyz / xyzEMFactor”的EJB失败并出现以下错误:

  

引起:java.lang.Exception:{“WFLYCTL0180:缺少/不可用依赖项的服务”=&gt; [“jboss.naming.context.java.module.test.test.env。\”com.xyz.abc.poc.knowledge_ba se.ontology.DBContex tBean \“。emFactory缺失[jboss.naming.context。 java.global.xyz_dal.xyzpEMFactory]“]} at org.jboss.as.controller.client.helpers.standalone.impl.Serve rDeploymentPlanResul tFuture.getActionRes ult(ServerDeployment PlanResultFuture.jav a:134)< / p>

以下是我的课程:

@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;
}

2 个答案:

答案 0 :(得分:0)

我不知道这在JBoss7中是如何工作的,但是:@EJB或@Inject,我认为@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可以用作Producer-Field。

答案 1 :(得分:0)

这是因为,可测试的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中,因此上下文&#34; java:global / xyz / xyzEMFactory&#34;没有。