2017-08-09 135 views
1

任何人都可以請我指導如何使用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

回答

0

這是因爲,可測性戰爭的文件,我創建一個水瓶中,

@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是多餘的。根據我的經驗,當查看不清楚的構造時,蠻荒有時比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注入豆可以作爲製片場。