首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arquillian与WildFly 10的集成

Arquillian与WildFly 10的集成
EN

Stack Overflow用户
提问于 2017-08-09 05:22:15
回答 2查看 493关注 0票数 1

请任何人指导我如何在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_ba‌​se.ontology.DBContex‌​tBean\".emFactory:{"WFLYCTL0180:包含缺失/不可用依赖项的服务“=> =>引起,在org.jboss.as.controller.client.helpers.standalone.impl.Serve‌​rDeploymentPlanResul‌​tFuture.getActionRes‌​ult(ServerDeployment‌​PlanResultFuture.jav‌​a:134)上缺少java.lang.Exception

以下是我的班级:

代码语言:javascript
复制
@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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-31 05:10:52

这是因为,可测试的war文件,我创建了一个jar,

代码语言:javascript
复制
@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;
}

当我把它改成

代码语言:javascript
复制
@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
EN

Stack Overflow用户

发布于 2017-08-30 07:50:01

我不知道这在JBoss7中是如何工作的,但是:我认为@EJB或@Inject都是多余的。根据我的经验,在查看不清楚的构造时,通配符有时比jboss7更严格。

代码语言:javascript
复制
@Inject
@EJB(lookup = "java:global/xyz_dal/xyzEMFactory")
xyzEMFactory emFactory;

CDI不能注射ejbs。我们有时所做的是:

代码语言:javascript
复制
@Produces
@EJB(lookup = "java:global/xyz/xyzEMFactory")
xyzEMFactory emFactory;

然后你可以在其他地方使用

代码语言:javascript
复制
@Inject
xyzEMFactory emFactory;

因为ejb注入的bean可以用作生产者字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45582233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档