Problema de Dependencia Ambígua no CDI

Pessoal, o problema é o seguinte. Adicionei uma lib do myfaces no meu projeto e agora estou obtendo um erro de ambiguidade no CDI. O que está ocorrendo eu sei. É o fato de que o myfaces tem um método producer que produz um FacesContext e a outra lib que tenho aqui que é do framework demoiselle tb tem um método producer de FacesContext, então quando subo a aplicação recebo o erro abaixo:

WELD-001409 Ambiguous dependencies for type [FacesContext] with qualifiers [@Default] at injection point [[field] @Inject private br.gov.frameworkdemoiselle.util.Locales.facesContext]. Possible dependencies [[Producer Method [FacesContext] with qualifiers [@Any @Default] declared as [[method] @Produces @RequestScoped protected org.apache.myfaces.extensions.cdi.jsf.impl.util.FacesInformationProducer.currentFacesContext()], Producer Method [FacesContext] with qualifiers [@Any @Default] declared as [[method] @Produces @RequestScoped @Default public br.gov.frameworkdemoiselle.internal.producer.FacesContextProducer.create()]]]

Gostaria de saber , como posso resolver isso. Ou seja, como digo qual ele deve usar. Lembro que essas classes nao são minhas, então não posso mexer, estão dentro das libs. Então não tem como eu anotar por exemplo com @Alternative.

Obrigado.

Descobri como desativar um Producer específico. Para tal, é necessário implementar uma extensão e la dentro da extensão vetar (chamando .veto()) para a classe do producer que você quer desativar.

Minha extension:

[code]
public class CdiExtension implements Extension{

public <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) {
    if (pat.getAnnotatedType().getJavaClass().equals(FacesContextProducer.class))
        pat.veto();//ISSO FARÁ COM QUE ESTE PRODUCER SEJA IGNORADO
 } 

}[/code]

Para o CDI encontrar a extension é necessário criar um arquivo chamado “javax.enterprise.inject.spi.Extension” dentro do pacote META-INF/services e adicionar o nome qualificado da classe. Abaixo o conteudo do meu arquivo javax.enterprise.inject.spi.Extension

             [b]br.com.exemplo.cdi.CdiExtension[/b]

Valeu, me ajudo muito essa dica

flw

Pra mim n deu certo…

Boa tarde lindberg713, poderia me ajudar?

Estou precisando criar esta extensão. Mas estou com dúvidas neste registro.

Perguntas: Em qual pasta META-INF devo colocar tem uma no resource e outra no WebContent?
Preciso criar uma pasta “services”?
Tipo do arquivo “javax.enterprise.inject.spi.Extension”. É .xml?
E o conteúdo é só o nome da minha classe q implements Extension?

[quote=lindberg713]Descobri como desativar um Producer específico. Para tal, é necessário implementar uma extensão e la dentro da extensão vetar (chamando .veto()) para a classe do producer que você quer desativar.

Minha extension:

[code]
public class CdiExtension implements Extension{

public <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat) {
    if (pat.getAnnotatedType().getJavaClass().equals(FacesContextProducer.class))
        pat.veto();//ISSO FARÁ COM QUE ESTE PRODUCER SEJA IGNORADO
 } 

}[/code]

Para o CDI encontrar a extension é necessário criar um arquivo chamado “javax.enterprise.inject.spi.Extension” dentro do pacote META-INF/services e adicionar o nome qualificado da classe. Abaixo o conteudo do meu arquivo javax.enterprise.inject.spi.Extension

             [b]br.com.exemplo.cdi.CdiExtension[/b]

[/quote]