| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2011 10:07:26
|
tsunemisan
Thread.start()
Membro desde: 23/09/2010 18:46:08
Mensagens: 25
Offline
|
Pessoal, estou tentando usar o spring para configurar várias conexoes, estou criando o Dao em que preciso obter o session do hibernate, o porém é que não estou conseguindo achar a outra solução a não ser usar o HibernateTemplate do Spring, mas se puder não queria usar ele, pois acho que se for assim quebra a vantagem de usar Spring que é desacoplamento das dependencias, nesse caso o Spring vai sempre estar andando junto ao meu DAO e caso um dia for abandonar o Spring não poderei reaproveitar o mesmo jar e terei que achar o projeto dele e editar na mão.
Gostaria então saber como o pessoal faz para gerenciar DAO via spring
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2011 10:18:48
|
romarcio
JWizard
![[Avatar]](/images/avatar/0dc800465c816add16e0b6d63be91f49.jpg)
Membro desde: 17/12/2008 10:05:49
Mensagens: 2434
Localização: Santa Maria/RS
Offline
|
É perfeitamente possivel. Você cria o bean SessionFactory, dai é só injetar esse bean nas classes DAO. Para maior portabilidade use as anotações @Inject e @Named ao invés das @Autowired e @Repository.
|
Bacharel em Sistemas de Informação.
Oracle Certified Professional, Java SE 6 Programmer
Blog | Facebook | Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2011 11:43:41
|
tsunemisan
Thread.start()
Membro desde: 23/09/2010 18:46:08
Mensagens: 25
Offline
|
Sim, mas daí encontro novo problema:
SessionFactory é uma interface, tentei implementar mas é muita coisa para implementar mesmo.
Se eu colocar a notação no meu DAO estarei do mesmo jeito usando lib Spring então muda nada mesmo, mesmo que funcione(no sentido de que não vou precisar mecher nos codigos para reaproveita lo) acho que vou ter que incluir Spring em todos os projetos que forem usar o DAO ne?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2011 12:06:44
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Eu escrevi um tutorial sobre como integrar os dois sem usar HibernateTemplate (eu detesto essa forma), acho que vai te ajudar:
http://vonjuliano.wordpress.com/2011/10/04/integrando-spring-e-hibernate/
Flw!
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2011 12:30:44
|
romarcio
JWizard
![[Avatar]](/images/avatar/0dc800465c816add16e0b6d63be91f49.jpg)
Membro desde: 17/12/2008 10:05:49
Mensagens: 2434
Localização: Santa Maria/RS
Offline
|
tsunemisan wrote:Sim, mas daí encontro novo problema:
SessionFactory é uma interface, tentei implementar mas é muita coisa para implementar mesmo.
Se eu colocar a notação no meu DAO estarei do mesmo jeito usando lib Spring então muda nada mesmo, mesmo que funcione(no sentido de que não vou precisar mecher nos codigos para reaproveita lo) acho que vou ter que incluir Spring em todos os projetos que forem usar o DAO ne?
Faça uma interface DAO e um DAO genérico. Esses 2 você usa para qualquer projeto. Dentro de cada projeto especifico você estende o DAO genérico nas classes especificas e nestas classes você usa as anotações.
Se você não quer usar anotações nos códigos, pode então usar o XML de configuração, como era feito anteriormente as anotações.
Você não vai precisar implementar a interface SessionFactory, o Spring prove de uma classe já implementada. É só criar o bean com ela. Da mesma maneira que você deve ter configurado a sessionfactory para usar com o hibernateTemplate.
|
Bacharel em Sistemas de Informação.
Oracle Certified Professional, Java SE 6 Programmer
Blog | Facebook | Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2011 19:51:09
|
tsunemisan
Thread.start()
Membro desde: 23/09/2010 18:46:08
Mensagens: 25
Offline
|
Entao, que tava pensando em fazer era deixar o projeto DAO limpo, apenas hibernate e iria criar uma outra camada apenas de Spring.
Que von.juliano sugeriu precisa usar notacao do Spring, infelizmente se fose pra incluir lib dela HibernateTemplate nao faria mal.
So falta mesmo conseguir uma instancia do sessionFactory, que pelo classpath do hibernate ela e uma interface xD
von.juliano no seu blog tinha conguracao do bean sem setar o class, desculpa a ignorancia mas como funciona?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2011 20:37:30
|
romarcio
JWizard
![[Avatar]](/images/avatar/0dc800465c816add16e0b6d63be91f49.jpg)
Membro desde: 17/12/2008 10:05:49
Mensagens: 2434
Localização: Santa Maria/RS
Offline
|
tsunemisan wrote:Entao, que tava pensando em fazer era deixar o projeto DAO limpo, apenas hibernate e iria criar uma outra camada apenas de Spring.
Que von.juliano sugeriu precisa usar notacao do Spring, infelizmente se fose pra incluir lib dela HibernateTemplate nao faria mal.
So falta mesmo conseguir uma instancia do sessionFactory, que pelo classpath do hibernate ela e uma interface xD
von.juliano no seu blog tinha conguracao do bean sem setar o class, desculpa a ignorancia mas como funciona?
Você pode fazer isso, é só não usar a injeção de depencias do Spring nos DAOs. Mas dai não vejo vantagem em usar o Spring.
|
Bacharel em Sistemas de Informação.
Oracle Certified Professional, Java SE 6 Programmer
Blog | Facebook | Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 06:57:09
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
tsunemisan wrote:Entao, que tava pensando em fazer era deixar o projeto DAO limpo, apenas hibernate e iria criar uma outra camada apenas de Spring.
Amigo, não me entenda mal, mas você está familiarizado com o Spring? Sabe para que ele é usado? Pergunto porque "uma camada apenas de Spring" não faz sentido.
tsunemisan wrote:Que von.juliano sugeriu precisa usar notacao do Spring, infelizmente se fose pra incluir lib dela HibernateTemplate nao faria mal.
So falta mesmo conseguir uma instancia do sessionFactory, que pelo classpath do hibernate ela e uma interface xD
Você quer usar o Spring ou não? Você não quer usar o pacote orm, é isso?
tsunemisan wrote:von.juliano no seu blog tinha conguracao do bean sem setar o class, desculpa a ignorancia mas como funciona?
Imagino que você se refira a não usar o xml, já que nele você deixa bem especifico qual classe é injetada onde. Com a configuração que coloquei no xml, o Spring varre as classes procurando as que estão anotadas (@Repository, @Service) e as injeta diretamente nas classes que esperam um "candidato" para injeção (um HibernateCarroDao é uma implementação de CarroDao, então é um bom candidato). Como há apenas uma implementação de cada interface para ser injetada, o Spring injeta a única opção que tem, mas caso sejam criadas várias implemetações, é necessário dar um nome para cada, e na classe com @Autowired é preciso indicar qual implementação você quer, referenciando-a pelo nome.
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:12:33
|
tsunemisan
Thread.start()
Membro desde: 23/09/2010 18:46:08
Mensagens: 25
Offline
|
O que quero fazer é aproveitar o IoC sem precisar acoplar nada no meu DAO, o proprio Spring diz que ele veio para existindo ou não o sistema funcionar, porém se eu usar notações e tals vou ser obrigado a incluir lib spring o que prejudicará na portabilidade, já pensou não ter opção e todos que necessitam do DAO projetos terá que usar Spring? E tenho fonte dizendo que como HibernateTemplate deixa muito acoplado, futuramente deixará de ser usado, afinal ele da open, commit ou rollback e close automático e sei fazer isso na mão e ainda saio ganhando desacoplando todos libs que afinal já uso chamado hibernate.
Sim, não queria usar ORM e se qualquer outra coisa criar dependencia no projeto o Spring inteiro xD
E vlw a explicação, mas queria mesmo era usar apenas o xml que tira dependencia das minhas classes com a notação e consequentemente do Spring
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:25:49
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Entendi. Você consegue sim fazer com o xml, mas se não quer usar o spring-orm vai ter que fazer o controle de transações e do ciclo de vida da Session na mão. E se quiser usar o projeto em outro lugar sem o Spring, vai ter de fazer as injeções na mão também. Uma dica: cuidado com a grafia e use a pontuação de forma adequada, está dificil entender o que você quer dizer em seus posts.
This message was edited 1 time. Last update was at 30/11/2011 08:27:14
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:38:20
|
tsunemisan
Thread.start()
Membro desde: 23/09/2010 18:46:08
Mensagens: 25
Offline
|
Desculpa, preciso melhorar muito a grafia e pontuação que nunca fui bom xD
E vlw pelas rápidas respostas e ajuda, vou vendo mesmo direito que estou apenas começando com Spring que o mercado tanto exige e não entendo o por que xD
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:49:10
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Disponha . Sobre o Spring, não se preocupe, muita gente só usa por usar, é dificil entender o porque. Então foque em aprender porque utilizá-lo, ou no caso, porque usar injeção de dependência. Vou te dar uma linha que talvez ajude. Leia esse post, que espero que desperte sua curiosidade, então leia o livro, onde vai haver tópicos sobre testes e design das suas classes. Aprenda sobre testes e TDD, inevitavelmente você vai cair em DI. Nesse ponto você vai entender bem porque usar o Spring (ou Guice, ou Pico). Bons estudos! Flw!
This message was edited 1 time. Last update was at 30/11/2011 08:50:11
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/01/2012 21:33:36
|
juniordocpd
What is classpath?
Membro desde: 03/10/2007 11:13:24
Mensagens: 6
Localização: São José dos Campos
Offline
|
Olá Pessoal. Boa noite.
Eu estou tentando criar e configurar uma aplicação sem o HibernateTemplate, mas não estou conseguindo.
Eu realizei as mesmas configurações que o vonjuliano disse, eu segui pelo post dele do blog (http://vonjuliano.wordpress.com/2011/10/04/integrando-spring-e-hibernate/)
Ainda assim, me é apresentado o erro:
O erro ocorre porque no construtor do HibernateUsuarioDao é esperado como parâmetro o SessionFactory, mas por algum motivo ele não recebe.
Spring e JSF são novidades ainda pra mim, e por isso eu apanho pra configurar. Se alguém puder dar uma força. É só pra configurar mesmo, porque "depois vai"... rs
Eu criei um projeto de JSF + Spring e este funciona certinho:
SVN https://sourceforge.net/p/jsfspring/code-0/2/tree/
RAR http://sourceforge.net/projects/jsfspring/files/jsfspring.rar/download
Quando peguei o mesmo projeto, que já funcionava, e tentei acrescentar o Hibernate (JSF + Spring + Hibernate) começou a dar o problema que citei acima:
SVN https://sourceforge.net/p/jsfspringhib/code-0/2/tree/
RAR http://sourceforge.net/projects/jsfspringhib/files/jsfspringhib.rar/download
Configurei o mínimo nos XMLs, achei bem legal essa "forma resumida". E e embora o DAO esteja declarado no applicationContext.xml, gostaria de dizer que foi só um teste que eu vi seguindo um outro link, só está lá por estar, mas o erro acontece do mesmo jeito se eu tiro ele de lá. O certo é não estar lá, como disse, foi só um teste mesmo.
Alguém poderia dar uma ajuda para eu entender o que eu estou fazendo de errado?!
Desde já, queria agradecer aí ao Von Juliano pelo conteúdo disponibilizado e também pela atenção.
Von Juliano, coloquei aqui porque assim não encho só o seu saco... rs...
Obrigado galera.
Abraço.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 07:23:02
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Oi juniordocpd, baixei sua sua aplicação pra ver e encontrei alguns pequenos erros:
- No applicationConfig.xml faltam os class dos beans dataSource e sessionFactory.
- Pela estrutura do seu projeto, o configLocation da sessionFactory deve ser WEB-INF/hibernate.cfg.xml.
- O HibernateUsuarioDao não deve estar no xml, não é necessário para as classes anotadas.
- Faltam os jars spring-jdbc-3.0.6.jar e aopalliance-1.0.jar
Como já fiz aqui, segue o applicationContext.xml alterado:
Feito isso, vai funcionar!
Blz? Flw!
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 23:22:39
|
juniordocpd
What is classpath?
Membro desde: 03/10/2007 11:13:24
Mensagens: 6
Localização: São José dos Campos
Offline
|
E aí Juliano.
Cara, muito obrigado pela ajuda. Você foi preciso, funcionou perfeitamente.
Eu fiquei ainda com algumas dúvidas e gostaria de perguntar.
1. Sobre os jars, eu coloquei o spring-jdbc-3.0.6.jar. Já o aopalliance-1.0.jar eu fiquei da dúvida porque não entendi bem pra que serve esse jar, daí eu não coloquei e funcionou. Mas o projeto tem o "spring aop", não sei se é o mesmo propósito e por isso pode ter funcionado.
2. Sobre os caminhos, eu sempre me atrapalho com isso. Eu acho que eu entendi, mais pra frente vou ver de configurar melhor isso, até mesmo colocando o maven, pra deixar melhor organizado essa estrutura que pretendo usar como base para projetos de estudo. (rs... isso nem é uma pergunta... rs)
3. Após rodar a aplicação, eu fiz uma modificação simples só para ver o carregamento de informações do banco.
Fui até a classe InformacoesService e modifiquei o método para uma coisa bem simples: pegar a lista de usuários e colocar em uma String.
Não mudei mais nada, como eu disse é bem boba a lógica.
Porém, quando compilo dá este erro:
Daí surgiu a dúvida. Achei que, após configurado o Hibernate, seria apenas injetar no meu service e usar.
Desculpe a falta de conhecimento cara, mas eu tenho que declarar algo no meu service ou em algum lugar referenciar este dao?
Parece ser mesmo problema de esperado 1 argumento e não recebido nenhum. Parece que não consegue passar o SessionFactory, fiquei na dúvida se eu tenho que ter algo declarado no meu service.
O service está anotado como @Service, como estava antes.
Sei que estou deixando passar alguma coisa, acho que é algo conceitual
Juliano, mais uma vez cara Muito Obrigado pela ajuda. Obrigado mesmo cara.
Abraço...
|
|
|
 |
|
|