Внедрение сеансового компонента с помощью CDI

Я пытаюсь внедрить сеансовый компонент в другой сеансовый компонент (в данном конкретном случае это тот же сеансовый компонент), и я получаю эту ошибку:

org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001308 Невозможно разрешить любые bean-компоненты для типов: [interface com.windriver.dsm.labmanagement.ejb.stub.GeneralSession]; Привязки: [@javax.enterprise.inject.New(value=com.windriver.dsm.labmanagement.ejb.stub.GeneralSession.class)]

Вот как я пытаюсь это сделать:

@Stateless
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
@Local(GeneralSessionLocal.class)
@Remote(GeneralSession.class)
public class GeneralSessionBean extends CRUDSessionBase
{
    @Inject @New
    Instance<GeneralSession> generalSessionInstance;

    // ...
}

Я получаю эту ошибку, когда звоню generalSessionInstance.get();. Кто-нибудь может помочь?


person user1960555    schedule 13.01.2013    source источник
comment
Вы не указали в своем вопросе язык программирования, который вы использовали. Как бы легко это ни было догадаться, всегда полезно добавлять теги с помощью соответствующего языка программирования. Попробуйте отредактировать свой вопрос и сделать это.   -  person    schedule 13.01.2013


Ответы (2)


Попробуйте указать, что класс компонента (GeneralSessionBean) реализует класс GeneralSession.

В твоем случае:

@Stateless
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
@Local(GeneralSessionLocal.class)
@Remote(GeneralSession.class)
public class GeneralSessionBean extends CRUDSessionBase implements GeneralSession
{
    @Inject @New
    Instance<GeneralSession> generalSessionInstance;

    // ...
}
person Kurt Du Bois    schedule 13.01.2013

Удаленный интерфейс не является типом bean-компонента, который допустим для внедрения в соответствии со спецификацией WebBeans. Таким образом, вы должны взять локальный интерфейс (в данном случае GeneralSessionLocal) в качестве типа поля (и вы также должны реализовать этот интерфейс, потому что в противном случае он также не будет типом bean-компонента вашего EJB).

person dunni    schedule 13.01.2013