2015-10-17 3 views
1

Я очень простой тест:Arquillian над Wildfly DeploymentException: WELD-001408: неудовлетворенных зависимостей

@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: неудовлетворенные зависимости для типа SingleEntity с отборочными @default

в месте инъекции точке [BackedAnnotatedField] @Inject частного com.jeusdi.arquillian.SimpleTest.singleEntity

на com.jeusdi.arquillian.SimpleTest.singleEntity (SimpleTest.java:0)

Любые идеи? Спасибо за всех

ответ

2

В общем, вы не хотите вводить объекты. JPA основана на именах классов, а CDI использует прокси вместо конкретных классов. Это приводит к инъекциям разных классов.

Теперь это только лучшая практика. Вероятно, вы все равно столкнетесь с другими ошибками, если попытаетесь двигаться вперед, но не получите эту ошибку, если все будет правильно.

Ваша сущность не имеет компонентов, определяющих аннотации. Если вы используете CDI 1.2 (который предлагает wildfly 8.2), а ваш beans.xml явно не перечисляет bean-discovery-mode=all, тогда этот объект не будет выбран.

+0

Спасибо за ваш ответ. Я думал, что помещать 'beans.xml' в мой' WebArchive' было достаточно для разрешения обработки бит на CDI. Тем не менее, я протестировал аннотацию своей «SingleEntity» с помощью '@ ApplicationScoped', и он снова выгружает одно и то же сообщение. – Jordi

+1

Я не уверен, что из-за вашего ограниченного примера, но имеет ли ваш объект конструктор по умолчанию? Я предположил, что вы опустили его для целей нарушения, но для того, чтобы этот класс был действительным объектом JPA и компонентом CDI, ему нужен конструктор по умолчанию. Вероятно, вы узнаете об этом в своих журналах. –

Смежные вопросы