首页 文章

Arquillian与WildFly 10的集成

提问于
浏览
1

任何人都可以指导我如何使用Arquillian和WildFly 10.我最近将我的应用程序从JBoss 7迁移到WildFly 10.Arquillian曾经使用JBoss 7,但相同的配置不适用于WildFly 10 .

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

引起:java.lang.Exception:{“WFLYCTL0180:缺少/不可用依赖项的服务”=> [“jboss.naming.context.java.module.test.test.env . \”com.xyz.abc.poc org.jboss.as.controller.client.helpers.standalone.impl.ServerDeploymentPlanResultFuture.getActionResult中缺少.knowledge_base.ontology.DBContextBean \“ . emFactory [jboss.naming.context.java.global.xyz_dal.xyzpEMFactory]”]} (ServerDeploymentPlanResultFuture.java:134)

以下是我的课程:

@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

    这是因为,可测试的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”不可用 .

  • 0

    我不知道这在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 .

相关问题