Arquillian与WildFly的集成10

问题描述:

任何人都可以请我指导如何使用Arquillian和WildFly 10.我最近将我的应用程序从JBoss 7迁移到了WildFly 10. Arquillian过去使用JBoss 7,但是相同的配置不起作用在WildFly 10Arquillian与WildFly的集成10

我可以现在我用的JNDI名称EJB的集成,但是作为“的java:全球/ XYZ/xyzEMFactor”与下面的错误而失败:

Caused by: java.lang.Exception: {"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.naming.context.java.module.test.test.env.\"com.xyz.abc.poc.knowledge_ba‌​se.ontology.DBContex‌​tBean\".emFactory is missing [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)

以下是我的课:

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

你需要显示你的测试,arquillian.xml文件和你遇到的任何错误 –

+0

事情是这是一个很大的改变,例如CDI是完全不同的规格。您是否尝试过在Wildfly 10中运行相同的WAR并检查它是否有效? – lordofthejars

这是因为,可测性战争的文件,我创建一个水瓶中,

@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”不可用。

我不知道如何在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注入豆可以作为制片场。