« Tudo pronto para o retorno da Atlantis
Eclipse Lunar e Pouso da Atlantis »

Publicado 09:55, 19 fevereiro , 2008 por Prof. Luis Eduardo

Sejam bem vindos, esta é a décima quinta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java - CPWJ

Vamos construir uma aplicação de verdade usando Java e Web e o modelo MVC. Já sabemos lidar com java, xhtml e css e um pouco de teoria sobre o MVC. Vamos colocar tudo pra funcionar?

Definindo o que será nosso primeiro programa: um sistema de busca. Vamos começar com um formulário simples com uma caixa de texto e um botão buscar, que quando clicado leva a outra página com a lista de sites com a palavra chave procurada.

Eu prometi que o conteúdo seria apresentado com o banco de dados mysql, porém tive uma seqüência de problemas com o hibernate mais mysql. Não quiz perder tempo com os detalhes. Eu não trabalho com o mysql, mas com o Oracle. Acredito que vocês possam encontrar material sobre o uso do mysql e hibernate, porém eu estou com pressa para publicar logo este material e como tenho experiência com Oracle é com ele mesmo que vou continuar. A forma de trabalho é a mesma, mudando apenas o xml de conexão com o banco.

Para uso do Oracle faça o download do Oracle 10g Express Edition em http://www.oracle.com/technology/software/products/database/index.html. É uma versão limitada mas de uso gratuíto. (Debian, Mandriva, Novell, Red Hat, Ubuntu e Windows compatíveis conforme o site Oracle).

Após o processo de instalação crie um usuário “sbusca” com senha “suasenha”.

É só o que você precisa na parte do banco de dados, o restante ficará por conta do Hibernate.

Para a configuração do ambiente do Netbeans 6.0, você precisa das seguintes arquivos de biblioteca:

  • para conectar no banco:
    • classes12.jar
  • para o Hibernate:
    • ant-antlr-1.6.5.jar
    • asm-attrs.jar
    • asm.jar
    • cglib-2.1.3.jar
    • commons-collections-2.1.1.jar
    • commons-logging-1.0.4.jar
    • dom4j-1.6.1.jar
    • ehcache-1.2.3.jar
    • hibernate3.jar
    • jta.jar

O classes12.jar você encontra aqui mesmo:jdbc Oracle. As bibliotecas do Hibernate você encontra no site do Hibernate em http://www.hibernate.org/6.html. A opção de download do Core é suficiente. (hibernate3.jar está na raiz do zip e os outros no diretório lib)

Reserve os arquivos indicados acima, somente eles, em um diretório qualquer de sua máquina.

Abra agora o Netbeans e vamos começar a fazer a mágica. Após o processo de carga escolha o opção File/New Project…

Escolha a Categoria Web e o tipo de projeto Web Application conforme a figura abaixo:
Novo Projeto

Clique em Next e digite o nome do projeto e se quiser escolha outra localização para a pasta do projeto. O restante pode deixar como indicado na tela:
Novo Projeto (2)

Clique em Next e ative a biblioteca do Struts conforme a figura:
Novo Projeto (3)

Clicando em Finish o projeto estará criado.

Vamos instalar as bibliotecas hibernate e do oracle para uso no nosso projeto. Na aba Projects use o botão direito sobre o nome do projeto (sbusca) e clique em properties. Na janela “Project Properties - sbusca” clique em libraries nas Categorias e no botão “Add JAR/Folder”. Selecione todos os arquivos do diretório que você colocou os arquivos jar e confirme clicando em “OK”.

Criado o projeto e definido as bibliotecas que vamos utilizar, o próximo passo é o Hibernate. Esta biblioteca auxilia no acesso ao Banco de Dados. Implementa a persistência aos objetos, fazendo a ponte objeto/relacional.

Vamos configurar o Hibernate para conexão com o Oracle. Para isso vamos escrever um arquivo de configuração XML. Clique com o botão direito do mouse sobre “Source Package” na aba do projeto e escolha a opção “New/ XML Document”. Digite o nome do arquivo como “hibernate.cfg.xml” (xml é automaticamente preenchido digite somente hibernate.cfg). Clique em “Next” e “Finish”.

Digite ou copie o código de configuração da conexão com o Oracle: (sempre cuidado com as aspas em códigos fonte, o WordPress detona lembra-se?)

<?xml version=’1.0′ encoding=’utf-8′?>
<!DOCTYPE hibernate-configuration
PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>

<hibernate-configuration>

<session-factory>

<!– Database connection settings –>

<property name=”connection.driver_class”>oracle.jdbc.driver.OracleDriver</property>

<property name=”connection.url”>jdbc:oracle:thin:@10.89.9.6:1521:orabkl</property>

<property name=”connection.username”>SBUSCA</property>

<property name=”connection.password”>suasenha</property>

<!– JDBC connection pool (use the built-in) –>

<property name=”connection.pool_size”>1</property>

<!– SQL dialect –>

<!–property name=”dialect”>org.hibernate.dialect.HSQLDialect</property–>

<property name=”dialect”>org.hibernate.dialect.Oracle9Dialect</property>

<!– Enable Hibernate’s automatic session context management –>

<property name=”current_session_context_class”>thread</property>

<!– Disable the second-level cache –>

<property name=”cache.provider_class”>org.hibernate.cache.NoCacheProvider</property>

<!– Echo all executed SQL to stdout –>

<property name=”show_sql”>true</property>

<!– Drop and re-create the database schema on startup –>

<!– Depois que executar uma vez a classe de teste elimine a linha seguinte. Esta linha provoca a exclusão de todas as tabelas e recriação.–>

<property name=”hbm2ddl.auto”>create</property>

<mapping resource=”sbusca/Sites.hbm.xml”/>

</session-factory>

</hibernate-configuration>

Para facilitar a codificação com o Hibernate vamos criar uma classe para a conexão e desconexão do banco de dados. Clique com o botão direito do mouse sobre “Source Package” na aba do projeto e escolha a opção “New\java class”. Chame a classe de “HibernateUtil” e defina o package como “util”:
HibernateUtil

Clique em finish e copie o código da classe:

package util;

import org.hibernate.*;

import org.hibernate.cfg.*;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {

try {

// Create the SessionFactory from hibernate.cfg.xml

sessionFactory = new Configuration().configure().buildSessionFactory();

} catch (Throwable ex) {

// Make sure you log the exception, as it might be swallowed

System.err.println(”Initial SessionFactory creation failed.” + ex);

throw new ExceptionInInitializerError(ex);

}

}

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

Com a biblioteca carregada e as configurações do hibernate certas, vamos codificar uma classe Sites para representar um dado persistente. Clique em File/New File e escolha Categoria “java” e “File Types” igual a “Java Class”:

Nova Classe

Clique em “Next” e defina o nome da classe como Sites e o package como sbusca:

Nova Classe (2)

Clicando em “Finish” o Netbeans irá abrir a página com o código da Classe. Complete o código da classe criando os campos necessários:

package sbusca;

public class Sites {

private Long id;

private String nome;

private String url;

private String descricao;

private String keyword;

public Sites() {}

public Long getId() {

return id;

}

private void setId(Long id) {

this.id = id;

}

public String getNome() {

return nome;

}

public void setNome(String nome) {

this.nome = nome;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getDescricao() {

return descricao;

}

public void setDescricao(String descricao) {

this.descricao = descricao;

}

public String getKeyword() {

return keyword;

}

public void setKeyword(String keyword) {

this.keyword = keyword;

}

}

Para o funcionamento perfeito do Hibernate são necessários alguns detalhes:

  • Um campo Id para ser usado como campo chave automático;
  • Funções Get e Set públicos para manipulação dos dados privados;

Após a criação da classe é necessário definir um arquivo de mapeamento Hibernate. Com o botão direito do mouse sobre “sbusca” em destaque na figura, escolha a opção “new” e “others”.
Conectando Hibernate

Na janela “New File” escolha a categoria “XML” e “File Type” “Xml Document”. Clique em “Next” e defina o nome do arquivo como “Sites.hbm.xml” (a extensão xml é automaticamente inserida). Clique em “Next” e por fim em “Finish”. Copie o código abaixo para realizar a amarração:

<?xml version=”1.0″?>

<!DOCTYPE hibernate-mapping PUBLIC

“-//Hibernate/Hibernate Mapping DTD 3.0//EN”

“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>

<hibernate-mapping>

<class name=”sbusca.Sites” table=”SITES”>

<id name=”id” column=”SITES_ID”>

<generator class=”native”/>

</id>

<property name=”nome”/>

<property name=”url”/>

<property name=”descricao”/>

<property name=”keyword”/>

</class>

</hibernate-mapping>

Para verificar se tudo funcionou até aqui, vamos criar uma classe para ver se o hibernate está conseguindo criar os registros: (espero que já saiba como criar a classe depois de eu repetir mais de uma vez a seqüencia de teclas!)

package sbusca;

import org.hibernate.Session;

import util.HibernateUtil;

public class MaquinaDeBusca {

public static void main(String[] args) {

MaquinaDeBusca mgr = new MaquinaDeBusca();

mgr.createAndStoreEvent(”Tecnoclasta”,”http://www.tecnoclasta.com”,”Detonanto Tecnologia”,”java, tecnologia, astronáutica, astronomia”);

mgr.createAndStoreEvent(”Uol Universo On-line”,”http://www.uol.com.br/“,”Universo On-line - O maior portal em língua portuguesa”,”portal, uol, sites, notícias”);

mgr.createAndStoreEvent(”Portal Terra”,”http://www.terra.com.br/“,”Qual a sua Terra”,”portal, terra, notícias, sites”);

mgr.createAndStoreEvent(”Folha de São Paulo”,”http://www.folha.uol.com.br/“,”O Jornal com Credibilidade”,”jornal, folha, notícias”);

HibernateUtil.getSessionFactory().close();

}

private void createAndStoreEvent(String nome, String url,

String descricao, String keyword) {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Sites umSite = new Sites();

umSite.setNome(nome);

umSite.setDescricao(descricao);

umSite.setUrl(url);

umSite.setKeyword(keyword);

session.save(umSite);

session.getTransaction().commit();

}

}

Executando esta classe o NetBeans vai trabalhar um bocado, e no fim do processo tudo deverá funcionar. Veja você mesmo se foi criada a tabela e se os registros foram criados corretamente.

Observe que o hibernate elimina toda a necessidade de codificação em SQL. Isso facilita muito a manutenção e mesmo portar o sistema para um banco de dados diferente.

Um segundo teste do hibernate consiste em executar uma consulta. Mude a função main para esta, inclua uma nova função “buscaSites()” e execute a classe novamente:

public static void main(String[] args) {

MaquinaDeBusca mgr = new MaquinaDeBusca();

//String teste=”store”;

String teste = “list”;

if (teste.equals(”store”)) {

mgr.createAndStoreEvent(”Tecnoclasta”, “http://www.tecnoclasta.com”, “Detonanto Tecnologia”, “java, tecnologia, astronáutica, astronomia”);

mgr.createAndStoreEvent(”Uol Universo On-line”, “http://www.uol.com.br”, “Universo On-line - O maior portal em língua portuguesa”, “portal, uol, sites, notícias”);

mgr.createAndStoreEvent(”Portal Terra”, “http://www.terra.com.br”, “Qual a sua Terra”, “portal, terra, notícias, sites”);

mgr.createAndStoreEvent(”Folha de São Paulo”, “http://www.folha.uol.com.br”, “O Jornal com Credibilidade”, “jornal, folha, notícias”);

} else if (teste.equals(”list”)) {

List sites = mgr.buscaSites(”notícias”);

for (int i = 0; i < sites.size(); i++) {

Sites umSite = (Sites) sites.get(i);

System.out.println(”Site: ” + umSite.getNome() +

“: ” + umSite.getDescricao()+ “, Url:”+umSite.getUrl());

}

}

HibernateUtil.getSessionFactory().close();

}

public List buscaSites(String keyword) {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

List result = session.createQuery(”from Sites where keyword like ‘”+ keyword+”‘”).list();

session.getTransaction().commit();

return result;

}

Dando certo será listado os sites da Uol, Terra e Folha.

Pensei em fazer isso em uma aula só, porém está ficando muito, muito longo. Então fica aqui a primeira parte do sistema de busca. Na próxima aula terminamos.

Dúvidas? vá para o fórum.

Tecnoclasta ©2007-2025.

Artigos Relacionados


Comentários

Nacho em 26 fevereiro, 2008 às 6:22 pm
Gravatar for Nacho

Oi!
Muito bom! Eu esteve esperando esta parte pacientemente. Vou provar com ums exemplos que tenho e os que você propoe.
A gente se vé ao fórum.
Nacho
PS: Sorry my portuguese. Você usa Mist? :-)
Best desktop-theme ever!!! The fastest!

Tecnoclasta responde
Ok, nos veremos no forum então.

[Responder]

Gravatar for Curso Gratuito de Programação para Web em Java | Tecnoclasta

[...] Décima Quinta Aula: 19 de fevereiro | Oracle e Hibernate, fazendo uma busca [...]

Deixe um Comentário

Nome:
Email:
Website:
Comentários:

Buscar:

Arquivos

Índice

Arquivo

fevereiro 2008
S T Q Q S S D
« jan   mar »
 123
45678910
11121314151617
18192021222324
2526272829  

RSS Meu FriendFeed

Contato