O Apache Maven é uma ferramenta de gerenciamento de projetos e compressão indispensável no gerenciamento de projetos de todos os tamanhos. O Maven também torna o trabalho do desenvolvedor muito mais fácil quando você precisa utilizar frameworks e bibliotecas diversas que não estão incluídos por padrão no pacote Java que você utiliza. Para começar a fazer uso dos recursos que o Maven nos proporciona vamos utilizar o framework Hibernate e uma biblioteca de acesso a dados da Oracle para criar uma simples aplicação web com o servidor de aplicação Tomcat.
O que é Hibernate?
O Hibernate é um framework para o mapeamento objeto-relacional escrito na linguagem Java, que facilita o mapeamento dos atributos entre uma base tradicional de dados relacionais e o modelo do objeto de uma aplicação, mediante o uso de arquivos (XML) ou anotações Java.
Hibernate: http://hibernate.org/
Configurando o Eclipse e o Maven para criar uma aplicação Web
Nosso foco principal é mostrar como utilizar o Maven para adicionar dependências e mostrar como funciona os pacotes que o Maven utiliza sem que tenhamos que baixa-los e instala-los e também como configurar o Eclipse para que o Tomcat consiga trabalhar em conjunto com o Maven. Não se preocupe em entender todo o código abaixo pois não focaremos em como utilizar o Hibernate agora, futuramente teremos vários outros posts que o contemplarão.
1 – Crie um projeto Maven com o artefato maven-archetype-webapp e o configure adicionado o servidor Tomcat ao Build Path, caso não saiba como fazer isto veja nosso post anterior sobre como utilizar o Maven e o Tomcat clicando aqui.
- Com o projeto criado, clique com o botão direito no seu projeto e escolha Maven->Add Dependency.
- Digite a palavra hibernate e encontre org.hibernate hibernate-core.
- Expanda e selecione sua ultima versão final.
2 – Por padrão os downloads estão desabilitados, precisamos habilita-los para podermos utilizar outras dependências. No menu Window->Preferences digite “maven” e posicione o cursor no tópico Maven e marque os tópicos como na figura abaixo e aguarde o download, talvez precise reinicializar o Eclipse:
3 – Após o carregamento completo das configurações do Eclipse, continue a adicionar mais dependências, desta vez escolha hibernate-validator:
4 – Em seguida adicione hibernate Entity-manager:
5 – Por ultimo adicione Oracle ojdbc14:
6 – Agora abra seu arquivo chamado pom.xml e constatará que ocorreu um erro ao adicionar o driver da Oracle, isto porque o Maven não consegue baixa-lo. Você precisa de um Login gratuito da Oracle para baixar o driver e precisa instala-lo manualmente no Maven, utilize o link abaixo para baixar o arquivo:
ojdbc14: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html
Para instalar utilize a linha de comando abaixo, atente-se as versões no arquivo pom.xml:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=ojdbc14.jar -DgeneratePom=true
Use a imagem abaixo para referencia de como instalar a dependência:
Após instalar com sucesso volte ao Eclipse, clique com o botão direito no seu projeto e escolha Maven->Update Project o erro deve desaparecer.
7 – O Tomcat por padrão não consegue utilizar as dependências que o Maven possui, você precisa mudar a configuração. Com o botão direito no seu projeto escolha propriedades e Deployment Assembly:
- Clique em Add.
- Escolha Java Build Path Entries.
- Escolha Maven Dependencies e finalize.
8 – Crie os arquivos para cada código abaixo e rode sua aplicação utilizando o Hibernate para ler um registro do banco de dados:
Exemplo:
Neste exemplo utilizamos o Maven para localizar as dependências necessárias para nosso projeto sem que precisássemos instala-las manualmente. Crie cada arquivo com seu respectivo tipo, utilize a imagem acima para verificar como fica a arvore do seu projeto. Rode o Servlet chamado HelloWorldHibernate.java.
Oracle
-- Cria tabela de funcionários create table Funcionarios( ID_Funcionario NUMBER(5), Nome VARCHAR2(30), Sobrenome VARCHAR2(70), Cargo VARCHAR2(30), Salario NUMBER(9,2)); -- Insere dados na tabela INSERT INTO FUNCIONARIOS VALUES (10, 'John', 'Lennon', 'Compositor', 1234.55);
XML – hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">pass</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<mapping class="org.desenvolvimento.aberto.Funcionario" />
</session-factory>
</hibernate-configuration>
Java
Servlet – Hello World Hibernate
package org.desenvolvimento.aberto;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Session;
public class HelloWorldHibernate extends HttpServlet {
private static final long serialVersionUID = 1L;
public HelloWorldHibernate() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// Abre sessão recuperando a conexão
Session session = HibernateFactory.getSessionFactory().openSession();
// Inicia transação
session.beginTransaction();
// Cria objeto de negocio
Funcionario funcionario = new Funcionario();
// Adiciona sessão ao objeto
funcionario = (Funcionario) session.load(Funcionario.class, 10);
// Cria conteudo HTML
response.setContentType("text/html");
PrintWriter html = response.getWriter();
// Retorna valores do objeto
html.println("<html>");
html.println("<body>");
html.println("<h1>Desenvolvimento Aberto</h1>");
html.println("<h2>Maven - Dependências ADD: Hibernate Framework: </h2>");
html.println(funcionario.getId() + " - ");
html.println(funcionario.getNome() + " ");
html.println(funcionario.getSobrenome() + " - ");
html.println(funcionario.getCargo() + " - ");
html.println(funcionario.getSalario());
html.println("</body>");
html.println("</html>");
// Encerra sessão
session.getTransaction().commit();
}
}
Hibernate – Session Factory
package org.desenvolvimento.aberto;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateFactory {
// Cria objeto da sessão
private static final SessionFactory sessionFactory = buildSessionFactory();
// Constroi sessão
private static SessionFactory buildSessionFactory() {
try {
// buildSessionFactory não será utilizado em versões superiores
// Veremos outros métodos para criar um Factory
// Não é necessário incluir o "hibernate.cfg.xml" no configure()
// Incluímos somente a nível de fácil entendimento da chamada da configuração.
// Você pode retirar a chamada.
return new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
} catch (Throwable ex) {
// Em caso de erro
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
// Retorna Factory da sessão
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
// Encerra Sessão
public static void shutdown() {
getSessionFactory().close();
}
}
Objeto de negocio – Funcionário
package org.desenvolvimento.aberto;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
// Define Entidade e tabela
@Entity
@Table(name = "funcionarios")
public class Funcionario {
// Define atributos e decoradores Hibernate como ID e colunas
@Id
@GeneratedValue
@Column(name = "ID_FUNCIONARIO")
private int id;
@Column(name = "NOME")
private String nome;
@Column(name = "SOBRENOME")
private String sobrenome;
@Column(name = "CARGO")
private String Cargo;
@Column(name = "SALARIO")
private double salario;
// Métodos Getter e Setter
public long getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public String getCargo() {
return Cargo;
}
public void setCargo(String cargo) {
Cargo = cargo;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
}









