为什么 arquillian 给我:无法读取活动容器配置?

Why the arquillian gives me that : Could not read active container configuration?

我尝试将 arquillian 解决方案集成到我的 Maven EJB 项目中,该项目仅包含我在其他单独项目中使用的 EJB。

我用Jboss EAP6.

所以我做了如下:

我把arquillian.xml变成了ejbModule/src/test/resources/:

<container qualifier="jboss" default="true">
    <configuration>
        <property name="jbossHome">D:\jbdevstudio\jboss-eap-6.2</property>
    </configuration>
</container> 

在我的项目的 pom 中,我添加了以下依赖项:

<dependency>
   <groupId>org.jboss.arquillian.container</groupId>
    <artifactId>arquillian-jbossas-embedded-6</artifactId>
   <version>1.0.0.Alpha5</version>
</dependency>

<dependency>
   <groupId>org.jboss.arquillian</groupId>
   <artifactId>arquillian-junit</artifactId>
   <version>1.0.0.Alpha5</version>
</dependency>

<dependency>
   <groupId>org.jboss.arquillian.junit</groupId>
   <artifactId>arquillian-junit-container</artifactId>
   <scope>test</scope>
</dependency>

<dependency>
   <groupId>org.jboss.arquillian.protocol</groupId>
   <artifactId>arquillian-protocol-servlet</artifactId>
  <scope>test</scope>
</dependency> 

<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.8.2</version>
</dependency> 
<profiles>
   <profile>
        <id>jbossas-embedded-6</id>
        <activation>
        <activeByDefault>true</activeByDefault>
        </activation>
   </profile>

   <profile>
        <id>arq-jbossas-managed</id>
             <dependencies>
                  <dependency>
                       <groupId>org.jboss.as</groupId>
                       <artifactId>jboss-as-arquillian-containermanaged</artifactId>
                       <scope>test</scope>
                  </dependency>
             </dependencies>
   </profile>

   <profile>
        <id>arq-jbossas-remote</id>
        <dependencies>
             <dependency>
                  <groupId>org.jboss.as</groupId>
                  <artifactId>jboss-as-arquillian-containerremote</artifactId>
                  <scope>test</scope>
             </dependency>
        </dependencies>
   </profile>
</profiles>

测试 Class :

import javax.inject.Inject;
import org.jboss.arquillian.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.oap.subscription.AbstractSubscription;

@RunWith(Arquillian.class)
    public class SubscriptionFactoryTest {   

    @Inject
    private SubscriptionFactory subscriptionFactory;

    @Deployment
    public static JavaArchive getDeployement() {
        System.out.println("### testSayHelloEJB");
        return ShrinkWrap.create(JavaArchive.class, "subscriptionFactory.jar")
            .addClasses(AbstractSubscription.class,SubscriptionFactory.class);

    }



    @Test
    public void getSubscriptionByIdTest() {
        System.out.println("### testSayHelloEJB");
    }
}

EJB Class:

@Remote(ISubscriptionFactoryRemote.class)
@Local(ISubscriptionFactoryLocal.class)
@Stateless
public class SubscriptionFactory extends AbstractSubscription implements ISubscriptionFactoryRemote {

    @Override
    public AbstractSubscription getSubscriptionById(final Integer id) {

        AbstractSubscription ret = null;
        if (id != null) {
            // create query
            final StringBuilder queryString = new StringBuilder("select c from AbstractSubscription c ");           

            try {
                queryString.append("where c.id = :id");

                // create query
                Query query = this.getEntityManager().createQuery(queryString.toString());

                // set parameter
                query = query.setParameter("id", id);

                // recovers refCountry
                ret = (AbstractSubscription) query.getSingleResult();

            } catch (final Exception exc) {

            }

        }

        return ret;

    }
}

当我 运行 class 测试作为 Junit 测试时,它给我错误:

 janv. 20, 2015 12:15:34 PM org.jboss.arquillian.impl.client.container.ContainerRegistryCreator getActivatedConfiguration
 Infos: Could not read active container configuration: null 

故障跟踪:

 java.lang.NoClassDefFoundError: Lorg/jboss/embedded/api/server/JBossASEmbeddedServer;
 at java.lang.Class.getDeclaredFields0(Native Method)
 at java.lang.Class.privateGetDeclaredFields(Class.java:2397)
 at java.lang.Class.getDeclaredFields(Class.java:1806)
 at org.jboss.arquillian.impl.core.Reflections.getFieldInjectionPoints(Reflections.java:74)
 ... 79 more

任何想法。

您使用的是非常旧的 Arquillian 版本,我至少会使用 1.1 版本。0.Final。我也不认为您需要您定义的一些 Arquillian 依赖项。

删除 arquillian-jbossas-embedded-6arquillian-junit 依赖项。

有很多 quickstart 示例说明如何将 Arquillian 与 JBoss EAP 结合使用。看看那里的一些 pom,因为它可能会有所帮助。