Código legado spring no Grails
22/12/2011 00:06
1
Fala galera,

Bom, eu tenho um projeto no eclipse java normal com JPA e Spring, ou seja tenho minhas entidades JPA e meus beans Spring, mais especificamente classes DAO(@Repository) e classes Service(@Service) para executar a lógica de negócios, estes beans estão registrados no applicationContext.xml, agora quero utilizar tudo isso no Grails, eu coloquei o jar deste projeto no lib do Grails, e adicionei o import no resources.xml para o meu arquivo de configuração do Spring e tentei utilizar em um Controller do Grails o meu service, mas acho que não deu muito certo, mas o estranho é que não ocorre nenhum erro.

Quero saber apenas como devo fazer esta integração e reutilização de código Java no Grails. No processo que descrevi acima fiz alguma coisa de errado? se alguém costuma fazer isso ou se já fez, se tiver algumas dicas eu agradeço.
Tags: spring reutilização legado


0
Oi Maykoone,

quais os principais problemas que você está tendo? O que eu já fiz foi o seguinte: visto que tinha toda a lógica de negócio, persistência, etc pré-pronta em Grails, simplesmente desinstalava o plugin do Hibernate e jogava meu código fonte ou jars dentro do projeto.

Em seguida, definia as configurações do Spring em cima das quais referenciava meu código legaod.


0
Então Kico, o estranho que não acontece nada, ou pelo menos o que eu espero! Bom primeiro deu um erro ao tentar importar minha entidade na página, mesmo ela estando na pasta lib, mas tirei esse import só pra ver o que ocorria. Ao chamar a action list no meu controller, tento buscar do banco através do meu service java que injetei no controller e simplesmente vai para a página mais não mostra o grid com os dados.

Também desinstalei o plugin do hibernate. Será que pode ser os nomes que dei para os meus spring beans java, por exemplo, tenho o ContatoService e o método listar dele se chama findAll, será que isso pode estar entrando em conflito com a convenção de nomes do Grails, que pela sua natureza dinâmica não está pegando esse meu bean, porque quando depuro vou ver o que tem na referência
def contatoService
ela aponta para um Object, quando fiz os testes no java ela apontava para um proxy.

Resumindo, acho que o Grails tá criando qualquer objeto na minha referência do service, e como o método que eu estou chamando tem mesmo nome que os métodos dinâmicos do GORM (apesar de ter desinstalado o hibernate) ele simplesmente não faz nada.

Não sei se acabei complicando mais ou tô comendo bola mesmo! mas é errando que se aprende né.

posso postar meus códigos se quiser. vlw
22/12/2011 22:57


0
Tô vendo que essa integração não é nada fácil.

O projeto java funciona que uma beleza, o Spring toma conta de tudo, se integra beleza com o JPA, mas é exportar o jar do projeto colocar no lib do meu projeto grails que o pesadelo começa!

primeiro, achei que o Grails ia reconhecer o meu xml do spring que tá dentro do jar, apenas sendo necessário eu realizar o import do mesmo no resources.xml. Como assim não foi, peguei toda a configuração e joguei no resources.xml mesmo, dai parece que o Spring não encontra o persistence.xml que também está dentro do jar, consequentemente no classpath para criar o transactionManager dando o seguinte erro:
"No persistence provider for EntityManager..."

Como o Grails é construido sobre o Spring, achei que não ia ter problemas já no projeto java funcionou, achei que meu maior desafio ia ser integrar o Spring com o JPA e depois no Grails ia ser mole, mas está sendo ao contrário!!

Bom, se alguém tiver alguma sugestão, pois estou me batendo muito com isso.
29/12/2011 18:07


1
Oi maykoone,

eu já trabalhei em um projeto que é bem próximo do que você está fazendo. Vou te descrever com detalhes como fiz.

No caso, o projeto era dividido em dois componentes: toda a lógica de negócio estava contida em código legado Java que já usava a dobradinha Hibernate + Spring.

Na outra ponta, eu tinha o Grails, que eu usava apenas como interface gráfica do projeto. A idéia era tirar proveito da produtividade que o framework nos oferece nesta parte de controle/visualização.

Então, o que eu fiz: eu já possuia o meu arquivo de configuração do Spring pronto pra trabalhar, e ele já estava dentro dos meus arquivos .jar. Então eu seguia o seguinte procedimento:

1. Desinstalava o plugin hibernate do Grails. Isto tirava o GORM (eu não precisava dele, visto que já tinha tudo no Hibernate funcionando bem)

2. Com o GORM desinstalado, eu incluia as dependências do Hibernate (APENAS DO HIBERNATE) no projeto.

3. Em seguida, tendo feito isto, importava o meu conteúdo do XML original do Spring para o arquivo de configuração do Spring do próprio Grails (usando a tag import mesmo).

Feito isto, eu referenciava as classes do código legado sem problemas de dentro dos meus controladores e serviços quando necessário. E toda classe de domínio eu incluia apenas no código legado quando necessário.

Lembro de ter funcionado muito bem na época.


0
Oh vlw kico.

Até consegui importar o meu xml do spring no grails, o problema agora tá sendo a questão do JPA.
como eu disse antes, o arquivo persistence.xml, com minhas configurações de acesso ao banco e tudo mais está dentro do jar, mas ao rodar o projeto grails, não está conseguindo criar o bean transactionManager, que está declarado na minha configuração do spring, ele dá sempre aquele erro de "No persistence provider for EntityManager blá blá..." parece que ele não encontra o persistence.xml. Já coloquei as dependências do hibernate no meu lib, já que ele é meu provider. Vou continuar tentando! qualquer progresso eu posto aqui.
29/12/2011 23:11


0
Enfim consegui, com alguns poréns...

primeiro tive que mudar o meu spring bean do entityManagerFactory de LocalEntityManagerFactoryBean para LocalContainerEntityManagerFactoryBean, assim eu consigo ter acesso a propriedade que permite especificar onde se encontra o arquivo persistence.xml.

o segundo problema que eu tive que resolver foi a desinstalação do plugin do hibernate que parece que no grails 2 deve ter algum bug ou algo que não entendi, pq rodava o comando uninstall-plugin, parecia tudo certo, mas ia rodar o projeto (run-app) o plugin tava lá, com isso o Grails coloca o seu jar do hibernate.core no classpath do projeto, pra quem usa hibernate puro tudo bem, mas pra que usa JPA, sem chance, pq eu reparei e não sei dizer o motivo, q o jar do hibernate nas dependências do Grails, não conta com a classe HibernatePersistence (Provider JPA), o que me gerava ClassNotFound toda hora, sei que depois que eu comentei a linha referente ao plugin do Hibernate no BuildConfig.groovy não deu mas esse problema, é claro que tive que adicionar meu jar do hibernate que tinha aquela classe e as dependências.

Mas uma coisa que ainda não rolou, foi tentar executar o projeto com o comando run-app, o que gera um erro estranho com a hibernate.dialect, tentei com e sem essa propriedade mas não rolou, e sei que não está errado porque no meu Junit do projeto java rola beleza.

O fato que só funciona quando eu executo o meu aplicativo grails pelo comando run-war, daí vai que uma maravilha.

Ufa, ficou um pouquinho extendo, mas é pra ninguém passar pelo mesmo problema e tentar resolver os outros. ehehe

Meu objetivo com isso é mais ver a integração do Grails com outras coisas, o que é bom quando você só quer aproveitar a parte web do Grails como Controllers e Views mas deixar a parte com as regras de negócios e entidades fora dele.
06/01/2012 20:25



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto