Andei pesquisando sobre esse problema, e inclusive encontrei vários tópicos no fórum do vRaptor mas todos sem resposta…
O problema é o seguinte: Uso o vRaptor com o plugin de JPA, acontece que a anotação @PersistenceContext só funciona quando o EntityManager é um atributo do meu Controller/Logic/Action, ou seja, só injeta na minha classe anotada como @Component e eu preciso que o EntityManager seja injetado no meu DAO…
A inversão de controle só funciona nos componentes que são gerenciados pelo vRaptor.
Isto é o mesmo para EJB3, spring, etc…
É impossível injetar a dependência em um bean que não é você quem controla seu ciclo de vida.
wariows
O Spring me injeta o que eu quiser, aonde eu quiser, basta configurar meu springbean… uso o mesmo esquema do EntityManager no DAO com struts2 + spring e funciona tranquilamente…
marcelo_mococa
provavelmente porque o spring controla o ciclo de vida do seu DAO. Você deve usar algum DAOSupport, correto?
jgbt
Como ja foi dito, o VRaptor so consegue fazer a injeção em objetos gerenciados por ele, no seu caso as Actions.
Seu DAO provavelmente deve ser gerenciado pelo Spring, então sera o Spring que fara a injeção.
[]´s
wariows
Junto com o vRaptor eu também utilizo o plugin do Spring, e o spring gerencia o ciclo de vida do meu DAO, tem como combinar a injeção do vRaptor com a do Spring nesse caso ou eu terei de colocar o EntityManager no controlador?
[]´s
marcelo_mococa
Você deve usar a injeção do spring e não a do vRaptor neste caso.
Faça com que o spring injete o EntityManager no DAO.