Spring

Olá pessoal…

Alguém ai tem tem alguma experiência/contato com o Framework Spring? intenção é utilizar seus recursos de segurança e transação para gerenciar aplicações que utilizam-se de Hibernate…

Abraços,

Silvio Luiz

Olá,

eu tenho alguma experiência. Ele torna um pouco mais simples trabalhar com Hibernate. Qual a dúvida?

Olá amigo…

Estou precisando montar uma estrutura que trabalhe com a seguinte integração:

Eclipse 3.01
Spring
Hibernate
Tomcat 5.028

Já instalei os plugins e tudo mais para configuração dos arquivos tanto do Hiber quanto do Spring, mas estou com algumas dúvidas. Quantos arquivos de configuração (applicationContext.xml e hibernate.hbm.xml) eu vou precisar mapear para um dado tipo de aplicação ? Não tenho ainda um modelo do que seria um projeto, mas provavelmente deverei utilizar esse modelo arquitetural para desenvolvimento de alguns sistemas. Sei que terei um mapeamento para cada Objeto meu, mas algumas dúvidas: o mapeamento da respectiva conexão com banco será realizada apenas pelo hibernate? Alguns dos parâmetros que seguem quanto a configuração de um objeto Session a ser utilizado, carregando-se o hibernate.cfg.xml, não fica clara na documentação se a String relativa ao caminho deste arquivo contém todo o caminho , e nem como seria esse path… E no geral, que funções devem ser delegadas ao framework do Hibernate e ao do Spring. No que puder me ajudar…

Abraços,

Silvio Luiz

Olá,

se entendi bem você quer o esqueleto de um proejto usando estes frameworks, certo?

Eu tenho dois bons exemplos q peguei na web. Um deles você encotnra no link abaixo, o outro eu não encontrei o link denovo, mas chama-se “Sparrow Example”.
Appfuse, exemplos em sobre Spring e J2EE em geral:
http://raibledesigns.com/page/rd

[quote=“Franklin”]Olá,

eu tenho alguma experiência. Ele torna um pouco mais simples trabalhar com Hibernate. Qual a dúvida?[/quote]

Seu conhecimento perante ao Spring se resume apenas ao controle de transações e ao modelo de templates que ele proporciona ao Hibernate?
Bom, o Spring é um framework j2ee completo, que passa até mesmo pela camada tier do negócio, ou seja, você pode ter um controle completo MVC2-Transactions-Persitência, isso contando com um poderoso módulo de inversão de controle!
Franklin, recomendo você estudar um pouco mais Spring :roll:

[quote=“junioresnaola”][quote=“Franklin”]Olá,

eu tenho alguma experiência. Ele torna um pouco mais simples trabalhar com Hibernate. Qual a dúvida?[/quote]

Seu conhecimento perante ao Spring se resume apenas ao controle de transações e ao modelo de templates que ele proporciona ao Hibernate?
Bom, o Spring é um framework j2ee completo, que passa até mesmo pela camada tier do negócio, ou seja, você pode ter um controle completo MVC2-Transactions-Persitência, isso contando com um poderoso módulo de inversão de controle!
Franklin, recomendo você estudar um pouco mais Spring :roll:[/quote]

Que o Spring não é uma implementação completa do J2EE todos nós sabemos… Mas que ele é bem gigante tb e que ajuda muito… Mas como o legionarioba queria saber sobre aintegração com o hibernate, nao seria legal falar do Spring todo né :joia:

Olá pessoal…

Deixa eu ser mais objetivo em algumas dúvidas que adquiri esses dias…hehe

  1. Usando o spring eu necessito configurar um hibernate.cfg.xml e log4j.properties para minha aplicação ?
  2. Eu preciso adicionar os jar’s do hibernate como se estivesse usando-o isoladamente ou me bastam os jar’s do Spring para minha aplicação?
  3. Os jar’s que devo adicionar em meu projeto para utilizar o Spring são os gerados na pasta “dist” do Spring depois de descompactado e compilado?
  4. Configurando este ambiente e usando-o em conjunto com o Tomcat, que jar’s devo adicionar para que os frameworks possam ser reconhecidos e utlizados em produção no Tomcat?
  5. O Eclipse possui alguns plugins que criam uma estrutura que facilita na criação dos arquivos de mapeamento do Hibernate, bem como criando uma hierarquia de classes, inclusive utilizando-se de ThreadLocal. O ideal é continuar aproveitando a estrutura que o plugin(Hibernate Synchronizer) me gera para facilitar o desenvolvimento, ou terei q revê-la quando o Spring “engoli-lo” ?
  6. Quanto ao Spring, é melhor que eu defina controle de transações e configurações programaticamente, ou baseando-me mais em properties e xml’s?

Inicialmente preciso ter mais domínio sobre quem ficará responsável por cada parte acima questionada…e posteriormente aprofindar mais no Spring, podendo usar os benefícios da AOP com ele…

Provavelmente estarei usando uma estrutura que combinará: Struts(JSf no futuro)+ Tomcat+Spring+Hibernate, utilizando Eclipse como IDE. Está
faltando algo? Um servidor de aplicação (JBoss)talvez… ? Conheço um pouco mais sobre o Hibernate mas preciso do apoio de vocês amigos pra organizar melhor as idéias para que não me perca…

Abraços,

Silvio Luiz

tb tenho uma dúvida quanto ao Spring… ahm, muitos me dizem, “com IoC, o Service Locator deixa de existir…”, bem, ok… mas, esses componentes q eu defino no XML do Spring, tem como acessá-los pela rede? Digo, eles ficam bindados a um JNDI ou algo assim pra mim poder acessá-los da rede como faria em um Service Locator??? :roll:

Olá, legionarioba!
Deixa eu explicar como eu estou usando. Pode ser que ajude você.
Meu projeto possue uma pasta src, para os meus bean, gui , etc e uma pasta conf, onde coloco os arquivos de configuração.
Dentro de conf existe duas pastas:
. hibernate, onde coloco meus mapemantos hbm.xml e hibernate.properties e hibernateconsole.properties, que utilizo para HibernateConsole ( visualizar e testar meus mapementos ).
. spring, onde ponho os arquivos: beanRefFactory.xml, e applicationContext-hibernate.xml, nesse existe a relação entre os bean e os hbm.xml.
Então vejamos suas dúvidas:

  1. Eu configurei o hibernate.properties e o log4j para logar.
  2. Adicionei os jar tanto do Spring como do Hibernate.
  3. Os jar’s do Spring que utilizei foram spring.jar e aopalliance.jar.
    Os jar’s do Hibernate foram odmg-3.0.jar, jta.jar, hibernate.jar, jdbc2_0-stdext.jar, ehcache-0.9.jar, dom4j-1.4.jar, commons-collections-2.1.1.jar, cglib-full-2.0.2.jar e c3p0-0.8.4.5.jar.
  4. Não uso o TomCat, não sei informar muito sobre seu uso.
  5. Eu mesmo construo meus hbl.xml, pois o singronizer é bom mas não muito. Como tem muitas coisas que temos que fazer mesmo, então habituei-me a construir do zero.
  6. O controle de transação é feito pelo Spring.
    Bom eu não conheço o Struts ainda nem o JBoss, mas o Eclipse é muito bom, principalmente em paralelo com o NetBean, para construção da GUI.
    Sei que posso não ter ajudado completamente, mas …
    Estou aqui, se for interessante para você.

Ok valeu !

Já clareou um pouco a coisa…Me diz o seguinte…O que faz esse xml: beanRefFactory.xml ? Eu estou usando a estrutura gerada pelo Hibernate Shyncronizer, ele agiliza o trabalho em muitas coisas…a única coisa que percebi é que ele não gera corretamente relacionamentos N pra N. Mas ainda assim achei a estrutura que o mesmo gera um tanto quanto amarrada demais…sei lá…as classes que eu vou usar na prática decendem de umas 3 ao menos…Mas ele usa padrões corretos como Me cabem umas dúvidas sobre o Hibernate (lá vai…rs…)

  1. Aquela questão de setar as tags <set> com lazy=true, para que o Hiber não percorra todo os mapeamentos possíveis…de que forma pode ser resolvido o problema que ele gera de não inicializar a coleção por fechar a sessão? (Será que antes de qualquer método que traga minha coleção eu terei que inicializá-lo na mão?)

  2. Quando usar Proxy Classes? Na verdade, o que são Proxy Classes…

  3. Usando spring e hibernate ,meus hibernate.cfg.xml , e o log4j terão o mesmo papel e conteúdo caso estivesse usando apenas hibernate?

  4. Qual o recomendável? Usar um dos dois ou os 2 (hibernate.cfg.xml e hibernate.properties)

Na prática vou usar mesmo apenas o Eclipse (depois com Struts pra fazer alguma página),Tomcat, Spring e Hibernate

Abraços,

Silvio Luiz

Olá, legionarioba!
Bom… não se esqueça de acessar a APIJava. Os arquivos que estão lá são muito mais explicativos do minha pobre orientação. Mas vamos nós.
O beanRefFactory é um contêiner de beans que serão utilizados pelo Spring na aplicação. ele é que faz as instanciações e gerenciamento. É preciso tê-lo para o ApplicationContext gerenciar os usos do Hibernate na persistcia dos beans, por exemplo.
O Syncronizer agilliza mas às vezes pode atrapalhar, nesse caso citado por vc por exemplo. Com a prática vc vai tá fazendo do zero, fácil, fácil. E o melhor é que vc vai tá vendo os usos, testando e vendo para que serve cada tag. Aliando é claro, muita leitura do Hibernate e do Spring.
1) Nós utilizamos sempre lazy=true. Porque verificamos que quando fazíamos pesquisas em objetos que continham várias coleções de objetos pesavam bastante e normalmente nem acessamos aquelas informações. Por exemplo um objeto Pessoa com uma coleção de telefones, uma coleção ded endereços, uma coleção de veículos, uma coleção de pedidos, etc., demorava muito para me mostrar apenas o nome e p código da pessoa, que era o que me interessava em vários momentos. Só precisávamos de tudo na hora do cadastro. Então, pesquisa as coleções quando eu precisar.
2) Não utilizo proxy e confesso que não sei para que serve.
3 e 4) Não utilizamos esse hibernate.cfg.xml, mas apenas hibernate.properties, para o uso o hibernateConsole, e log4j.properties, para o uso do commons.logging. Nós usamos Spring e Hibernate juntos, pois o Hibernate serve para a persistência dos dados no banco e o Spring encapsula os códigos JDBC e controla as transações brilhantemente.
Valeu.
Pega os arquivos que te recomendei. Tem inclusive exemplos de aplicações utilizando Design Patterns, em três camadas.
Até breve.

Na classe FCadastroClientes vc instancia um DTOManager? Quem é essa classe que eu não consegui descobrir no código?

Andei observando a implementação que tem lá nos docs do APIJava. Na classe FCadastroClientes vc instancia um DTOManager? Quem é essa classe que eu não consegui descobrir no código?
Você falou que não trabalha com hibernate.cfg.xml,mas como vc faz pra usar named querys por exemplo (que são configuradas nesse arquivo - desprezando a resolução programática)?
Ainda tenho dúvidas…qdo vc em sua aplicação for fazer algo do gênero…retornar um estado…este que tem uma coleção de municípios…em q ponto da aplicação vc resolveu a questão do LazyInitialinzingException (já que lazy=true)?

[]'s

Silvio Luiz

Olá, Silvio Luiz!
Bom saber que se cadastrou e viu as preciosidades que estão no APIJava.
Então… vamos às questões.
Em princípio, o hibernate.cfg.xml pode ser substituído pelo hibernate.properties, usado por nós. Poderíamos dizer que os dois são “gêmeos” em sua funcionalidade. Então as named queries e tudo o que se poderia fazer com um, o outro também emplementa.
A única forma de se manipular os dados do Banco é estando dentro de um session, quer seja session única ou pool de conexões ( como por exmplo o c3p0 ). Partindo desse princípio o acesso que fazemos para inicializaçes tardias é dentro da session na camada DAO que cuida disso, segundo o seu pattern (Data Access Object). Ali utilizamos:

&#40;...&#41;
getHibernateTemplate&#40;&#41;.executeFind&#40;new HibernateCallback&#40;&#41;&#123;
                public Object doInHibernate&#40;Session session&#41; throws HibernateException, SQLException &#123;
                    Query query = session.getNamedQuery&#40;&quot;pessoaFindById&quot;&#41;;
                    return HibernateUtils.executeQuery&#40;query, params&#41;;
                &#125;
            &#125;&#41;;
&#40;...&#41;
&#40;...&#41;
   &lt;query name=&quot;pessoaFindById&quot;&gt;&lt;!&#91;CDATA&#91;
		select pessoa from Pessoa pessoa
			where pessoa = &#58;bean
			order by pessoa.id
			&#93;&#93;&gt;
	&lt;/query&gt;
&#40;...&#41;
O método  HibernateUtils.executeQuery(query, params) faz as inicializões das bags mapeadas e passados dentro de um Map (chamado de params ) utilizando o resultado da namedquery (chamado de query).
A query traz somente o objeto sem suas bags, já que estão lazy=true. E aquele método (HibernateUtils.executeQuery) inicializa as bags.
Ou seja, vc por exemplo para inicializar uma bag de um objeto retornado da namedQuery basta utilizar o comando get referente àquele atributo bag, que existe no bean.
Agora vamos ao DTOManager que vc também estranhou. Nossa empresa está desenvolvendo um framework que, além de muitas importantes finalidades, encapsula as várias camadas de design pattern BO, BD e DAO. 
Em breve, a APIJava estará disponibilizando uma nova aplicação modelo e a framework que citei.
Fique sempre em contato com a APIJava, em dois meses haverá muitas novidades por lá.
Pode se comunicar comigo pelo e-mail cleidimar@yahoo.com.
Se tiver alguma dúvida genérica e quiser postar aqui no PJ seria bem melhor. A disseminação de conhecimentos é o gancho mais valioso desse site.
Valeu?