Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Integrando Spring 3.0 e JPA 2.0 - Java Magazine 83
Neste artigo veremos como construir uma aplicação integrando Spring e JPA. No decorrer do mesmo, será implementado um exemplo demonstrando o funcionamento das duas tecnologias e como elas podem trazer vantagens para a camada de persistência da sua aplicação.
Java Magazine 83
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 83
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 83
Integrando Spring 3.0 e JPA 2.0
Simplificando a camada de persistência
Aprenda a fazer o mapeamento objeto-relacional (ORM) com Spring 3.0 integrado à JPA 2.0 na camada de persistência de sua aplicação
Em uma aplicação, na maioria das vezes, é necessário cumprir um importante requisito que é o de persistir dados de forma consistente e coerente. Porém, geralmente esta é uma tarefa trabalhosa, que exige tempo e cuidado, pois se o acesso a dados for tratado de forma falha pode haver resultados bastante desagradáveis. A implementação de uma camada de persistência vem muitas vezes com uma série de tarefas repetitivas, como por exemplo, obter conexões, gerenciar transações, manipular dados etc. Dependendo do tipo de aplicação, organização e estrutura da camada de persistência, ela pode se transformar em algo complexo e de difícil manutenção. Daí a necessidade de se utilizar frameworks e padrões que auxiliem o desenvolvedor a trabalhar com esta camada, proporcionando soluções que ajudem a simplificar e a obter melhores resultados.
O Spring é um framework poderoso que se baseia principalmente em Injeção de Dependência (DI) e Inversão de Controle (IoC), ele é composto por cerca de 20 módulos que são agrupados em Core Container, Acesso a Dados/Integração, Web, AOP, Instrumentação e Teste, conforme mostrado na Figura 1, fornecendo assim uma plataforma Java bastante completa com inúmeros recursos e funcionalidades.
Neste artigo será abordado o módulo ORM (Object Relational Mapping), que está contido em Acesso a Dados/Integração. Como sugere o próprio nome, seu principal objetivo é o mapeamento de objetos para as tabelas de um banco de dados relacional. Para cumprir esta tarefa, este módulo traz suporte à integração de diversos frameworks de persistência e APIs, como Hibernate, Java Data Objects (JDO) e Java Persistence API (JPA).
Figura 1. Estrutura dos módulos do Spring Framework.
O Spring também oferece um excelente controle de transação, gerenciamento declarativo utilizando AOP, hierarquia de exceções independente da tecnologia escolhida, além de desacoplamento e simplificação do código, o que resulta em um código mais limpo e de fácil manutenção, simplificando significativamente a camada de persistência.
Para exemplificar o funcionamento e os recursos que o Spring oferece para mapeamento objeto/relacional, no decorrer deste artigo será construída uma aplicação exemplo simples, a qual irá cadastrar produtos no banco e depois todos os produtos contidos na tabela serão listados em uma página. Para a construção deste exemplo foi escolhido o JPA para fazer a integração com Spring, e o EclipseLink como provider, que é a implementação de referência do JPA 2.0.
Preparando o Ambiente de Trabalho
Para a implementação da aplicação, será usado como IDE o Eclipse para desenvolvimento Java EE, que pode ser baixado em seu site oficial. Algumas bibliotecas também serão necessárias para que seja possível construir a aplicação.
Como já citado anteriormente, para provider foi escolhido o EclipseLink, implementação de referência da Java Persistence API 2.0, e por isso será ele o utilizado aqui. O download do pacote também pode ser feito no site do Eclipse na seção do EclipseLink. O arquivo que deve ser baixado é o EclipseLink 2.0.0 Installer Zip. Após o download você deve descompactá-lo e encontrar as seguintes bibliotecas:
• eclipselink.jar – Localizada dentro do diretório jlib;
• javax.persistence_2.0.0.v201002051058.jar – Localizada dentro de jlib/jpa.
Para o Spring Framework, será utilizada a versão 3.0.1, que é a última disponível na data em que este artigo foi escrito. O download pode ser feito no site oficial do Spring. Os arquivos que devem ser baixados serão o spring-framework-3.0.1.RELEASE-A-dependencies.zip, que é o pacote com as dependências do framework e o spring-framework-3.0.1.RELEASE-A.zip, que é o pacote contendo as bibliotecas do framework em si.
No arquivo spring-framework-3.0.1.RELEASE-A-dependencies.zip os diretórios estão organizados pelo nome do pacote da dependência. No nosso caso serão necessárias as seguintes bibliotecas:
• com.springsource.javax.servlet.jsp.jstl-1.1.2.jar;
• com.springsource.net.sf.cglib-2.2.0.jar;
• com.springsource.org.aopalliance-1.0.0.jar;
• com.springsource.org.apache.commons.logging-1.1.1.jar.
E do arquivo spring-framework-3.0.1.RELEASE-A.zip serão usadas as bibliotecas listadas abaixo:
"
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP
Simplificando a camada de persistência
Aprenda a fazer o mapeamento objeto-relacional (ORM) com Spring 3.0 integrado à JPA 2.0 na camada de persistência de sua aplicação
Em uma aplicação, na maioria das vezes, é necessário cumprir um importante requisito que é o de persistir dados de forma consistente e coerente. Porém, geralmente esta é uma tarefa trabalhosa, que exige tempo e cuidado, pois se o acesso a dados for tratado de forma falha pode haver resultados bastante desagradáveis. A implementação de uma camada de persistência vem muitas vezes com uma série de tarefas repetitivas, como por exemplo, obter conexões, gerenciar transações, manipular dados etc. Dependendo do tipo de aplicação, organização e estrutura da camada de persistência, ela pode se transformar em algo complexo e de difícil manutenção. Daí a necessidade de se utilizar frameworks e padrões que auxiliem o desenvolvedor a trabalhar com esta camada, proporcionando soluções que ajudem a simplificar e a obter melhores resultados.
O Spring é um framework poderoso que se baseia principalmente em Injeção de Dependência (DI) e Inversão de Controle (IoC), ele é composto por cerca de 20 módulos que são agrupados em Core Container, Acesso a Dados/Integração, Web, AOP, Instrumentação e Teste, conforme mostrado na Figura 1, fornecendo assim uma plataforma Java bastante completa com inúmeros recursos e funcionalidades.
Neste artigo será abordado o módulo ORM (Object Relational Mapping), que está contido em Acesso a Dados/Integração. Como sugere o próprio nome, seu principal objetivo é o mapeamento de objetos para as tabelas de um banco de dados relacional. Para cumprir esta tarefa, este módulo traz suporte à integração de diversos frameworks de persistência e APIs, como Hibernate, Java Data Objects (JDO) e Java Persistence API (JPA).
Figura 1. Estrutura dos módulos do Spring Framework.
O Spring também oferece um excelente controle de transação, gerenciamento declarativo utilizando AOP, hierarquia de exceções independente da tecnologia escolhida, além de desacoplamento e simplificação do código, o que resulta em um código mais limpo e de fácil manutenção, simplificando significativamente a camada de persistência.
Para exemplificar o funcionamento e os recursos que o Spring oferece para mapeamento objeto/relacional, no decorrer deste artigo será construída uma aplicação exemplo simples, a qual irá cadastrar produtos no banco e depois todos os produtos contidos na tabela serão listados em uma página. Para a construção deste exemplo foi escolhido o JPA para fazer a integração com Spring, e o EclipseLink como provider, que é a implementação de referência do JPA 2.0.
Preparando o Ambiente de Trabalho
Para a implementação da aplicação, será usado como IDE o Eclipse para desenvolvimento Java EE, que pode ser baixado em seu site oficial. Algumas bibliotecas também serão necessárias para que seja possível construir a aplicação.
Como já citado anteriormente, para provider foi escolhido o EclipseLink, implementação de referência da Java Persistence API 2.0, e por isso será ele o utilizado aqui. O download do pacote também pode ser feito no site do Eclipse na seção do EclipseLink. O arquivo que deve ser baixado é o EclipseLink 2.0.0 Installer Zip. Após o download você deve descompactá-lo e encontrar as seguintes bibliotecas:
• eclipselink.jar – Localizada dentro do diretório jlib;
• javax.persistence_2.0.0.v201002051058.jar – Localizada dentro de jlib/jpa.
Para o Spring Framework, será utilizada a versão 3.0.1, que é a última disponível na data em que este artigo foi escrito. O download pode ser feito no site oficial do Spring. Os arquivos que devem ser baixados serão o spring-framework-3.0.1.RELEASE-A-dependencies.zip, que é o pacote com as dependências do framework e o spring-framework-3.0.1.RELEASE-A.zip, que é o pacote contendo as bibliotecas do framework em si.
No arquivo spring-framework-3.0.1.RELEASE-A-dependencies.zip os diretórios estão organizados pelo nome do pacote da dependência. No nosso caso serão necessárias as seguintes bibliotecas:
• com.springsource.javax.servlet.jsp.jstl-1.1.2.jar;
• com.springsource.net.sf.cglib-2.2.0.jar;
• com.springsource.org.aopalliance-1.0.0.jar;
• com.springsource.org.apache.commons.logging-1.1.1.jar.
E do arquivo spring-framework-3.0.1.RELEASE-A.zip serão usadas as bibliotecas listadas abaixo:
"
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais!


Marcos Estevam De Sousa
em 18/10/2010 16:54 - Responder
Quero te parabenizar pelo artigo, ficou muito bom. Seria interessante nas proximas edições ter uma continuidade do tema incluindo nesta aplicação, autenticação com login, filtros de acesso.
O que acha da proposta?
O que acha da proposta?
em 18/10/2010 16:54 - Responder

[Comentário do autor]
Crislaine Da Silva Tripoli
em 27/10/2010 17:45 - Responder
Crislaine Da Silva Tripoli
Obrigada Marcos.
É uma boa idéa!!!
É uma boa idéa!!!
em 27/10/2010 17:45 - Responder


Wagner Alves Da Silva Junior
em 26/10/2010 10:07 - Responder
Parabéns pelo artigo mais infelizmente não funcionou pra min.
Você poderia disponibilizar o código fonte?
em 26/10/2010 10:07 - Responder

[Comentário do autor]
Crislaine Da Silva Tripoli
em 27/10/2010 17:49 - Responder
Crislaine Da Silva Tripoli
Olá Wagner, obrigada.
Me passe seu email para que eu possa enviar o código fonte pra vc ok!
Me passe seu email para que eu possa enviar o código fonte pra vc ok!
em 27/10/2010 17:49 - Responder
Devmedia - Equipe De Moderação
Os fontes desse artigo já sen encontram juntamennte com os arquivos dessa edição.
em 28/10/2010 18:26 - Responder

Rodnei Canuto De Vete
Onde eu baixo os fontes deste artigo? Não encontrei nenhum link...
Grato!
Grato!
em 18/3/2011 13:30 - Responder
Devmedia - Equipe De Moderação
As fontes você baixa no link: http://www.devmedia.com.br/articles/viewcomp.asp?comp=18036
em 18/3/2011 14:38 - Responder


Robson Lira
em 25/3/2011 12:58 - Responder
Olá Crislaine!
Achei este artigo muito bom, inclusive é o que eu estava procurando pois tentei usar o Seam Framework e não consegui entao vi uma saida na utilização do Spring com JPA, fiz um projeto usando o JSF 2 e o Tomcat 7 de resto tudo igual até no banco porque uso PostGreSQL com MS-VFP so que infelismente o tomcat da um erro no log e eu sou novo em Java, na verdade estou na caminhada para tentar dominar a linguagem so que não consigo sair do Erro,
21/03/2011 00:17:30 org.springframework.web.context.ContextLoader initWebApplicationContext
GRAVE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'statusDAOImpl': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'em' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.reflect.UndeclaredThrowableException
at org.springframework.orm.jp
Agora obtive os codigos fontes e vou procurar entender onde estou Errando
Robson Lira
Achei este artigo muito bom, inclusive é o que eu estava procurando pois tentei usar o Seam Framework e não consegui entao vi uma saida na utilização do Spring com JPA, fiz um projeto usando o JSF 2 e o Tomcat 7 de resto tudo igual até no banco porque uso PostGreSQL com MS-VFP so que infelismente o tomcat da um erro no log e eu sou novo em Java, na verdade estou na caminhada para tentar dominar a linguagem so que não consigo sair do Erro,
21/03/2011 00:17:30 org.springframework.web.context.ContextLoader initWebApplicationContext
GRAVE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'statusDAOImpl': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'em' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.reflect.UndeclaredThrowableException
at org.springframework.orm.jp
Agora obtive os codigos fontes e vou procurar entender onde estou Errando
Robson Lira
em 25/3/2011 12:58 - Responder


Edvaldo Santiago De Matos
em 11/5/2011 21:17 - Responder
Boa Noite Crislaine,
Muito boa a sua matéria de integração Spring 3 com JPA 2.
Vc poderia passar o código fonte do exemplo para analisar?!!?
Obrigado.
edvaldo.santiago@gmail.com
Muito boa a sua matéria de integração Spring 3 com JPA 2.
Vc poderia passar o código fonte do exemplo para analisar?!!?
Obrigado.
edvaldo.santiago@gmail.com
em 11/5/2011 21:17 - Responder


Caern - Companhia De águas E Esgotos Do Rn
em 22/11/2011 16:16 - Responder
Muito boa a explanação.
Alguém conseguiu colocar o exemplo pra funcionar? O meu apresentou o seguinte problema:
SEVERE: Context initialization failed
java.lang.NoClassDefFoundError: org/aspectj/lang/NoAspectBoundException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
.
.
.
Adicionando o .jar do aspectj, passa a dar erro no ContextLoader.
Alguma ideia do que se trata?
Alguém conseguiu colocar o exemplo pra funcionar? O meu apresentou o seguinte problema:
SEVERE: Context initialization failed
java.lang.NoClassDefFoundError: org/aspectj/lang/NoAspectBoundException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
.
.
.
Adicionando o .jar do aspectj, passa a dar erro no ContextLoader.
Alguma ideia do que se trata?
em 22/11/2011 16:16 - Responder
Devmedia - Equipe De Moderacao
Olá, vc pode verificar o seu código junto ao código q acompanha a revista.
em 22/11/2011 19:31 - Responder
[Este post ainda não foi associado a uma sequência]
Você está em:
canal Java
Publicidade
Crislaine Da Silva Tripoli
Space do autor
Bacharel em Sistemas de Informação pela Universidade do Vale do Sapucaí, Especialista em Software no Instituto Nacional de Telecomunicações, trabalhando há três anos com desenvolvimento de projetos Java SE e Java EE.
Space do autor

Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL
0
0
