2013-07-24 5 views
2

Я пытаюсь развернуть войну в JBoss AS 7.1.1 сервера и развертывания не удается, пытаясь привнести EntityManager:Weld игнорирует продюсер

17:44:48,037 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."c3e.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."c3e.war".WeldService: org.jboss.weld.exceptions.DeploymentException: Exception List with 1 exception: 
Exception 0 : 
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject xyz.beans.UploadImpl.em] 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275) 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:244) 
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:107) 
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127) 
    at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346) 
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:331) 
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366) 
    at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83) 
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:76) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:724) 

Обычно я бы ожидать, что это будет результатом Weld неспособность найти подходящий компонент для инъекции. Тем не менее, я определяю производителя для EntityManager таким образом:

@ApplicationScoped 
public class Resources { 
    @PersistenceContext(unitName="myUnit", type=PersistenceContextType.EXTENDED) 
    private EntityManager entityManager; 

    @Produces 
    public EntityManager getEntityManager() { 
     return entityManager; 
    } 
} 

Инъекция-точка, о которой он жалуется выглядит следующим образом:

@RequestScoped 
@Named("upload") 
public class UploadImpl implements Upload, Serializable { 
    private static final long serialVersionUID = 1L; 

    @Inject 
    EntityManager em; 
} 

В другом проекте точно такая же установка работала нормально. Есть идеи?

ответ

2

Вопрос ответил в комментарии выше: аннотация @Produces была импортирована из неправильного пакета. Спасибо, Антуан Сабот-Дюран!

+1

добро пожаловать. –

0

Просто длинный снимок, но есть два типа аннотаций: javax.faces.bean.ApplicationScoped и javax.enterprise.context.ApplicationScoped. Я предполагаю, что ваш продюсер аннотируется аннотацией JSF вместо CDI.

Как говорит спецификация CDI:

1.2.6. Связь с JSF JavaServer Faces - это структура представления веб-уровня, которая предоставляет компонентную модель для графического интерфейса пользователя и модель взаимодействия с событиями, которая связывает пользовательские компоненты интерфейса с объектами, доступными через унифицированный EL. Эта спецификация позволяет назначить любому компоненту единое имя EL. Таким образом, приложение JSF может использовать преимущества сложной модели внедрения контекста и зависимости, определенной этой спецификацией .

Это означает, что вы можете вводить CDI-компоненты в управляемые bean-компоненты JSF, однако противоположное не соответствует действительности. Контейнерные вещи, которые `

Если вы хотите использовать CDI, вам нужно прописать свои аннотации, чтобы получить пакет javax.enterprise.context.

+0

Спасибо за отзыв. Я боюсь, что аннотации @xScoped в моем приложении уже импортированы из пакета javax.enterprise.content, так что это не проблема. – user2615350

+0

И у вас есть оба класса в одном модуле? – lpiepiora

+3

И вы уверены, что ваш '@ Produces' не является' javax.ws.rs.produces'? –

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