Sei sulla pagina 1di 2

Esquea XML Integrando JSF 2.

0 com Spring, Hibernate e JPA setembro 6, 2010 Fabiano Almeida JSF 11 Comentrios Algumas pessoas, pelo que tenho visto, esto tendo algumas dvidas com essa No por ela ser complexa de ser aplicada, mas por no saber / entender como ser feita essa integrao sem a utilizao de XML s. Claro que nos dias de il ns termos uma aplicao web que no utilize um metadata para algum tipo porm, nessa integrao a utilizao de XML torna-se minimizada.

integrao. que pode hoje muito dif de configurao,

Bem, vamos ao que interessa. A configurao desta integrao se inicia pelo web.xml. Nel e ser informado quais so as listeners do Spring que so necessrios, assim como os arq uivos de configurao deste (por exemplo, os arquivos application-context.xml), e d efinir a Servlet do JSF. Os listeners necessrios so: org.springframework.web.context.ContextLoaderListener org.springframework.web.context.request.RequestContextListener org.springframework.web.util.Log4jConfigListener E o Servlet do JSF seria: javax.faces.webapp.FacesServlet Para a utilizao do Facelets utilizaremos o parmetro javax.faces.default_suffix com o valor .xhtml para que esses arquivos possam ser renderizados como pginas. Aps essa configurao inicial, certificar-se que no faces-config.xml esteja definido a verso do JSF como sendo a 2.0, bem como a verso do XSD que est sendo utilizado. Com a aplicao configurada, necessrio informar ao JSF a classe do Spring (o el-resol ver) que estar sendo utilizada para que o JSF possa enxergar os beans do Spring. Para isso, no faces-config.xml necessrio adicionar a seguinte linha de cdigo, den tro da tag <application>: <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolv er> Com essa linha voc ter como injetar nos seus Managed Beans os beans que so gerencia dos pelo Spring. Agora iremos esquecer as configuraes iniciais, pois no tem mais o que ser feito. Va mos anotar as nossas classes para que possamos esquecer os XML s. Nossas entidades com a anotao @Entity do pacote javax.persistence.Entity; Os Managed Beans com a anotao @ManagedBean (do pacote javax.faces.bean.ManagedBean ) e com o escopo de preferncia; Os servios com a anotao @Service do pacote org.springframework.stereotype.Service; Os repositories com a anotao @Repository do pacote org.springframework.stereotype. Repository; E qualquer outra classe que possa ser utilizada em toda a aplicao com a anotao @Comp onent, do pacote org.springframework.stereotype.Component; Depois de ter feito essa configurao, o prximo passo ento seria injetar os beans do S pring. No seu Managed Bean voc ir utilizar da anotao @ManagedProperty( value = #{unitService} ) que ficar sobre o atributo que ser injetado com um bean do Spring. Para que o bean possa ser encontrado, necessrio que este seja definido com o nome unitService, p or exemplo @Service( unitService ). Assim, no momento em que a aplicao estiver sendo iniciada, o contexto do JSF far a leitura dos beans do Spring, encontrar este bean definido e far a injeo.

Para que os seus servios, repositrios e componentes possam ser carregados pelo Spr ing no momento da iniciao da aplicao, torna-se necessrio a configurao, no XML, do paco e base desses beans. Sendo assim, nos arquivos do application-context referente a cada um desses tipos de beans, ser necessrio colocar uma linha como abaixo: <context:component-scan base-package= xxx.service.impl /> onde voc estar informando ao Spring que os seus servios encontram-se dentro do paco te informado. Ou seja, as classes dentro de xxx.service.impl e que esto anotadas co mo @Service sero carregadas como beans. Por hora poderia surgir uma nto, como poderamos fazer ito natural termos servios izarem operaes na base de dvida referente a uma injeo de um bean em outro bean. E isso? Bem, existem anotaes para isso tambm. Por exemplo, mu que dependem dos seus respectivos repositrios para real dados.

Dessa maneira, nada mais trivial do que colocar no construtor do servio o repositr io como parmetro. E para que este repositrio possa ser injetado e possamos, de vez , esquecermos o XML, utilizaremos a anotao @Qualifier. Com ela podemos definir que o atributo logo aps esta anotao ser injetado com o bean definido no parmetro da anot ao. Veja abaixo um exemplo. @Autowired public UnitServiceImpl( @Qualifier( unitRepository ) UnitRepository unitRepository ) { this.unitRepository = unitRepository; } Com a anotao @Autowired eu informo ao Spring que este construtor ter uma injeo a ser aplicada (por padro ele assume uma injeo por nome), e como parmetro eu digo qual o r epositrio que eu estou querendo injetar. Como falado mais acima, necessrio que ten ha um @Repository com esse mesmo nome informado na anotao @Qualifier. Bem, com as anotaes demonstradas aqui e com a simples configurao que teremos na apli cao, esta se torna bem trivial de ser criada, com um acoplamento baixo e utilizao mni ma de XML. Como este est sendo o meu primeiro post, espero que tenha sido claro nas minhas p alavras e que no tenham restado dvidas. Porm, caso existam dvidas, favor postar abai xo que estarei respondendo-as o quo rpido possvel. Ah, de presente eu criei uma aplicao de exemplo para validar tudo o que disse aqui . S para constar, funcionou legal. Clique aqui para fazer o download. A aplicao foi construda utilizando o Maven. No ttulo do post eu digo que a integrao feita com JPA e Hibernate, porm eu no cito na da referente a essas duas tecnologias no post. No achei que fosse necesrio, porm es tas constam na aplicao de exemplo. Bons cdigos, abrao a todos e at a prxima!

Potrebbero piacerti anche