Como usar os serviços Spring em beans gerenciados pelo JSF?
JSF é uma tecnologia muito popular no mundo de Java, no entanto, a cooperação com a Primavera ainda é dolorosa e requer hacks 'desagradáveis'. Eu tenho atualmente o problema com um desses "hacks".
Serviços de primavera são injetados usando oSpringBeanFacesELResolver
. Está configurado emfaces-config.xml
:
<application>
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>
A injeção dos serviços da Spring é muito feia, mas está funcionando:
@ManagedProperty(value="#{customerService}")
CustomerService customerService;
Mas há problemas. O JSF requer de mim que o bean gerenciado deve ser serializável. Isso significa que o serviço Spring também deve ser serializável ou o campo deve ser temporário. Quando o campo é transitório, a injeção não está funcionando (eu tenho nulo nesse campo). E fazer com que os serviços Spring sejam serializáveis não é, em minha opinião, uma boa idéia e um possível problema de desempenho - o que deve acontecer com o contexto do Hibernate, fontes de dados, que são todas injetadas no serviço Spring?
Então, qual é a maneira correta e menos dolorosa de usar serviços Spring com beans gerenciados pelo JSF?