【问题标题】:Arquillian over Wildfly DeploymentException: WELD-001408: Unsatisfied dependenciesArquillian over Wildfly DeploymentException: WELD-001408: Unsatisfied dependencies
【发布时间】:2016-01-16 02:21:42
【问题描述】:

我有一个非常简单的测试:

@RunWith(Arquillian.class)
public class SimpleTest
{
    
    @Inject private SingleEntity singleEntity;
    
    @Deployment
    public static WebArchive createDeployment()
    {   
        return ShrinkWrap.create(WebArchive.class)
            .addClass(SingleEntity.class)
            .addAsWebInfResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));
    }
    
    @Test
    public void categorize()
    {
        assertNotNull(this.singleEntity);
    }
}

我只想注入SingleEntity 类型的对象。 SingleEntity 是单个 POJO:

public class SingleEntity
{
    private String id;
    private String description;
    
    public SingleEntity(String id, String description) {
        super();
        this.id = id;
        this.description = description;
    }

    //getters & setters
}

之后,我执行gradle test。我已经配置了测试,以便 Arquillian 在 Wildfly 嵌入式实例中执行它们:

<arquillian xmlns="http://jboss.org/schema/arquillian"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">  
  
    <container qualifier="jboss" default="true">  
        <configuration>  
        <!-- Supported property names: [managementPort, username, managementAddress, bundlePath, managementProtocol,   
                    cleanServerBaseDir, jbossHome, password, modulePath] -->  
            <property name="jbossHome">C:\servers\wildfly-Test-8.2.0.Final</property>
            <property name="modulePath">C:\servers\wildfly-Test-8.2.0.Final\modules\</property>
            <!-- <property name="managementPort">8888</property> -->  
        </configuration>  
    </container>  
</arquillian>  

这很简单,但是,我收到一个异常,告诉我 SingleEntity 无法解决:

原因:org.jboss.weld.exceptions.DeploymentException: WELD-001408: 带有限定符 @Default 的 SingleEntity 类型的依赖关系不满足

在注入点 [BackedAnnotatedField] @Inject private com.jeusdi.arquillian.SimpleTest.singleEntity

在 com.jeusdi.arquillian.SimpleTest.singleEntity(SimpleTest.java:0)

有什么想法吗? 谢谢大家

【问题讨论】:

    标签: java jakarta-ee testing wildfly jboss-arquillian


    【解决方案1】:

    一般来说,您不想注入实体。 JPA 基于类名,CDI 使用代理而不是具体类。这会导致注入不同的类。

    现在这只是最佳做法。如果您尝试继续前进,您可能仍会遇到其他错误,但如果一切正确,您应该不会收到此错误。

    您的实体没有定义 bean 的注释。如果您使用的是 CDI 1.2(wildfly 8.2 提供),并且您的 beans.xml 没有明确列出 bean-discovery-mode=all,则不会选择该实体。

    【讨论】:

    • 感谢您的回答。我认为在我的WebArchive 中放置beans.xml 足以在CDI 上启用bean 解析。但是,我已经测试了用 @ApplicationScoped 注释我的 SingleEntity 并且它再次转储了相同的消息。
    • 我不确定是不是因为您的示例有限,但是您的实体是否有默认构造函数?为了简洁起见,我假设您省略了它,但是为了使此类成为有效的 JPA 实体和 CDI bean,它需要一个默认构造函数。您可能会在某处的日志中收到有关此问题的警告。
    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2014-12-20
    相关资源
    最近更新 更多