Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Problema com dependencia circular no Weld

Prezados, estou tendo problemas com dependencia circular no Weld num projetinho pessoal que estou fazendo juntamente com o projeto da aula.

As classes que não são Managed Beans e que são injetadas, como por exemplo UsuarioJpaController, não estão anotadas com nenhum contexto do CDI, possuindo portanto o escopo @Dependent, que é um pseudo escopo do CDI. Um objeto desta classe é injetado em meu projeto pessoal numa classe CriptografiaSenha, que é um managed bean, agora gerenciado pelo CDI pela anotação @Named. Este bean gerenciado não está com qualquer anotação de contexto, assim como a classe UsuarioJpaController também não.

Nestes casos de dependencia circular, pelo que eu entendi, ao menos uma das classes deve ter um normal scope, como @ResquestScope, @SessionScope, etc, podendo neste caso uma delas não estar marcada com nenhum escopo, sendo que neste caso o CDI entenderia que a classe não anotada tem o pseudo scope @Dependent por default?

Neste cenário descrito acima, obtenho o erro abaixo:

org.jboss.weld.exceptions.DeploymentException: WELD-001443: Pseudo scoped bean has circular dependencies. Dependency path: 
  - Managed Bean [class DAO.UsuarioJpaController] with qualifiers [@Any @Default],
  - [BackedAnnotatedField] @Inject private DAO.UsuarioJpaController.criptografar,
  - Managed Bean [class Default.CriptografiaSenha] with qualifiers [@Any @Default],
  - [BackedAnnotatedField] @Inject private Default.CriptografiaSenha.usuarioDAO,
  - Managed Bean [class DAO.UsuarioJpaController] with qualifiers [@Any @Default]
    at org.jboss.weld.bootstrap.Validator.reallyValidatePseudoScopedBean(Validator.java:924)
    at org.jboss.weld.bootstrap.Validator.validatePseudoScopedInjectionPoint(Validator.java:971)
    at org.jboss.weld.bootstrap.Validator.reallyValidatePseudoScopedBean(Validator.java:933)
    at org.jboss.weld.bootstrap.Validator.validatePseudoScopedInjectionPoint(Validator.java:971)
    at org.jboss.weld.bootstrap.Validator.reallyValidatePseudoScopedBean(Validator.java:933)
    at org.jboss.weld.bootstrap.Validator.validatePseudoScopedBean(Validator.java:910)
    at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:141)
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:158)
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:501)
    at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:61)
    at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:59)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:62)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:55)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
3 respostas

Tudo bem Emmanuel?

Pode postar suas classes UsuarioJpaController e CriptografiaSenha, por favor?

abraço

solução!

Prezado, o código está disponível no Github. Segue o link: https://github.com/edabruzzo/ControleOrcamentoFamiliar/blob/ProjetoMaven/src/main/java/DAO/UsuarioJpaController.java

https://github.com/edabruzzo/ControleOrcamentoFamiliar/blob/ProjetoMaven/src/main/java/Default/CriptografiaSenha.java

Apesar de que, adotando a orientação de anotar ao menos uma das classes envolvidas na dependência circular com um normal scope, aparentemente o problema foi resolvido. Já não estou obtendo o erro acima, que nem permitia a inicialização do TomCat.

Oi Emmanuel, que bom que você conseguiu! Qualquer dúvida é só abrir um outro tópico. :)

Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software