Omnifaces 2.5.1 и несколько WAR внутри EAR

У меня есть приложение, которое прекрасно работает с Omnifaces 2.5.1 Mojarra под Wildfly 10. Это приложение имеет несколько WAR, но только один использует Omnifaces.

Сегодня я попытался добавить Omnifaces для использования во второй WAR внутри EAR. И я получаю это исключение:

Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Long with qualifiers @Param
  at injection point [BackedAnnotatedField] @Inject @Param private siscom.web.jsf.controller.PartnerDetailsController.id
  at siscom.web.jsf.controller.PartnerDetailsController.id(PartnerDetailsController.java:0)
WELD-001475: The following beans match by type, but none have matching qualifiers:
  - Producer Method [Long] with qualifiers [@BatchProperty @Any] declared as [[UnbackedAnnotatedMethod] @Produces @BatchProperty public org.jberet.creation.BatchBeanProducer.getLong(InjectionPoint)]

    at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359)
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281)
    at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155)
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:518)
    at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
    at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

Мой контроллер это:

@ViewScoped @Named
public class PartnerDetailsController implements Serializable {

    @Inject
    @Param
    private Long id;
}

Примечание: иногда работает нормально, иногда нет. При перезапуске приложение работает. Если я перезагрузить снова, не работает.

1 ответ

Решение

Вы не можете использовать @Param с несколькими WARS, содержащие Omnifaces, упакованные в EAR, Это ошибка взаимодействия между CDI и OF.

Связанное сообщение в блоге: http://balusc.omnifaces.org/2013/10/cdi-behaved-unexpectedly-in-ear-so.html

Я не проверял это в последнее время, если он работает в последней версии.

Другие вопросы по тегам