Entrei um problema no Jboss 7 AS / 6 EAP onde o WELD reclamou ainda no deploy da aplicão que existiam ambiguidade em uma injeção, devido a presença de dois produtores capazes de instanciar a mesma classe (no meu caso o FacesContext do JSF). Veja abaixo o erro:
org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [FacesContext] with qualifiers [@Default] at injection point... |
Para resolver precisei desativar um dos produtores. Isso foi feito criando uma Extension que veta o funcionamento de um produtor, no caso abaixo, do produtor org.apache.myfaces.extensions.cdi.jsf.impl.util.FacesInformationProducer do Apache MyFaces. Veja abaixo:
import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; import org.apache.myfaces.extensions.cdi.jsf.impl.util.FacesInformationProducer; public class FacesProducerSolverExtension implements Extension { public void observe(@Observes ProcessAnnotatedType p){ if(p.getAnnotatedType().getJavaClass() .equals(FacesInformationProducer.class)){ p.veto(); } } } |
Para que esse extension funcione, ele deve ser registrado no arquivo de texto WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension no seu WAR que ficará com o seguinte conteúdo:
br.gov.demoiselle.destdemoiselle.cgpolact.cdi.extension.FacesProducerSolverExtension |