>> Mais documentação do Visual Web Pack
Usando o Hibernate com o NetBeans Visual Web Pack
Contribuição de Chris Kutler, Craig McClananan e John Baker
| Fevereiro de 2007 [Número da revisão: V1-2] |
|
|
Este tutorial mostra como usar a estrutura do Hibernate em um projeto do NetBeans Visual Web Pack. Mostra também como reempacotar dados finais com matrizes Option e objetos ObjectListDataProvider para vinculação a componentes JavaServer Faces. |
Conteúdo
|
|
 |
Este tutorial funciona com os recursos e tecnologias seguintes
Componentes JavaServer Faces/ Plataforma Java EE |
1.2 com Java EE 5* 1.1 com J2EE 1.4
|
| Banco de dados Viagem |
Necessário |
| Biblioteca de componentes BluePrints AJAX |
Desnecessária |
* Na data em que o tutorial foi publicado, somente o servidor de aplicativos Sun Java System oferecia suporte ao Java EE 5.
Este tutorial foi adaptado para o Sun Java Application Server PE 9.0, versão de atualização 1, e o Tomcat 5.5.17. Se estiver usando outro servidor, consulte Notas da versão e FAQs para ver os problemas conhecidos e as soluções. Para obter informações detalhadas sobre os servidores suportados e a plataforma Java EE, consulte as Notas da versão.
Hibernate e NetBeans Visual Web Pack
O Hibernate é uma ferramenta de código aberto que oferece persistência objeto/relacional e serviços de consulta. O Hibernate fica entre o aplicativo e o banco de dados, e carrega e salva perfeitamente os objetos, auxiliando no gerenciamento de conteúdo da persistência.
Este tutorial mostra como construir um aplicativo Visual Web que usa bibliotecas do Hibernate e POJOs (Plain Old Java Objects). Este tutorial destina-se a desenvolvedores que possuem um sólido conhecimento do funcionamento do Hibernate. Para saber mais sobre o Hibernate, consulte a documentação de referência do Hibernate.
Neste tutorial, você empacota o POJO de Person com uma matriz de objetos model.Option e vincula um componente Lista suspensa à matriz. Em seguida, você estende a classe ObjectListDataProvider a fim de criar um empacotador TripDataProvider para o POJO de Trip e vincula o componente Tabela a uma instância da classe TripDataProvider.
Observação: Para saber mais sobre a classe model.Option, consulte Usando os componentes de lista.
Neste tutorial, você realiza as seguintes etapas. Estas etapas apresentam o método recomendado para a construção de um aplicativo Visual Web que usa a estrutura do Hibernate.
- Use a ferramenta Gerenciador de bibliotecas a fim de disponibilizar para o IDE as bibliotecas necessárias do Hibernate. Depois disso, é possível adicionar fácil e rapidamente as bibliotecas do Hibernate aos projetos.
- Crie um projeto de biblioteca de classes Java (projeto POJO) que coloque o código de persistência Hibernate das tabelas de banco de dados em uma interface reutilizável do Hibernate.
- Adicione um driver de banco de dados e as bibliotecas do Hibernate ao projeto POJO.
- Desenvolva um projeto de aplicativo da Web visual que faça referência ao projeto POJO e às bibliotecas do Hibernate.
- Use as classes do empacotador para conectar-se às classes de persistência Hibernate.
Criando uma biblioteca de classes Hibernate
Você começa esse tutorial fazendo o download dos arquivos de biblioteca do Hibernate e usando a ferramenta Gerenciador de bibliotecas a fim de disponibilizar para o IDE as bibliotecas do Hibernate.
- Faça o download de
hibernate-3.2.2.ga.zip em www.hibernate.org e extraia os arquivos. Observação: Neste tutorial, os exemplos usam o Hibernate 3.2.2 e os arquivos JAR associados oferecidos com esta versão. Se você estiver usando outra versão, os números de versão e os nomes de bibliotecas do JAR podem variar. Além disso, a lista de bibliotecas JAR para adição pode ser diferente.
- No IDE, escolha Ferramentas > Gerenciador de bibliotecas no menu principal.
- Clique em Nova biblioteca, digite
Hibernate322 no campo Nome da biblioteca e clique em OK.
- Clique em Adicionar JAR/Pasta e vá ao diretório no qual extraiu os arquivos do Hibernate.
- Selecione
hibernate3.jar e pressione Enter.
- Clique em Adicionar JAR/Pasta novamente e vá até o subdiretório
lib.
- Use Ctrl-clique para selecionar os 10 arquivos JAR seguintes e pressione Enter. Se não estiver usando a versão 3.2.2, consulte o site do Hibernate para determinar que arquivos JAR devem ser selecionados.
ant-1.6.5.jar
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
cglib-2.1.3.jar
commons-logging-1.00,4.jar
commons-collections-2.1.1.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
jdbc2_0-stdext.jar
A figura abaixo ilustra a biblioteca do Hibernate na janela Gerenciador de bibliotecas.
 Figura 1: Janela Gerenciador de bibliotecas exibindo a biblioteca do Hibernate |
- Se estiver implantando o aplicativo no servidor Tomcat, você deve adicionar também o
jta.jar do diretório lib do Hibernate.
- Para tornar o Javadoc do Hibernate disponível no Editor Java, selecione a guia Javadoc, clique em Adicionar ZIP/Pasta, vá até o diretório no qual extraiu os arquivos do Hibernate, selecione o subdiretório
doc/api e pressione Enter.
- (Opcional) Se quiser realizar a depuração total das classes Hibernate durante a sessão de depuração, clique na guia Fontes, clique em Adicionar ZIP/Pasta, vá até o diretório no qual extraiu os arquivos do Hibernate, selecione o subdiretório
src e pressione Enter.
- Clique em OK para fechar o Gerenciador de bibliotecas.
Preparando a interface do Hibernate para o banco de dados
É recomendável colocar em outro projeto o código do Hibernate que acessa o banco de dados. O arquivo HibernateTravelPOJO.zip contém o projeto Hibernate TravelPOJO, que consiste em uma interface do Hibernate para acessar o banco de dados Viagem. Você pode importar o HibernateTravelPOJO como uma dependência da biblioteca dentro de qualquer projeto da Web visual para permitir que o projeto tenha acesso ao banco de dados Viagem através dos mapeamentos do Hibernate. O projeto HibernateTravelPOJO contém o arquivo de mapeamento, o arquivo de configuração, a classe de utilitário e as classes persistentes POJO, conforme descrito na Introdução ao Hibernate. A figura abaixo ilustra o conteúdo do projeto.
 Figura 2: Conteúdo do projeto HibernateTravelPOJO |
Observação: Para simplificar, o HibernateTravelPOJO é um subconjunto de uma completa interface do banco de dados Viagem e contém somente as classes, as propriedades e os relacionamentos necessários para o projeto do tutorial.
- Extraia o conteúdo do arquivo HibernateTravelPOJO.zip para a pasta
NetBeansProjects na pasta base ou no diretório de sua preferência.
- No IDE, feche todos os projetos.
- Escolha Abrir > Abrir projeto e abra o projeto HibernateTravelPOJO.
- Na janela Projetos, expanda o nó HibernateTravelPOJO, clique com o botão direito do mouse no nó Bibliotecas e escolha Adicionar biblioteca no menu pop-up.
- Na caixa de diálogo Adicionar biblioteca, selecione Hibernate322 e clique em Adicionar biblioteca.
- Clique com o botão direito do mouse no nó Biblioteca e escolha Adicionar JAR/Pasta no menu pop-up.
-
Vá até derbyclient.jar do cliente de rede JavaDB e selecione-o para o servidor do banco de dados Viagem. Em uma instalação normal do Visual Web Pack, este arquivo está em Dir-Instal-Servidor-Aplicativos-Sun-Java/javadb/lib/derbyclient.jar
Se estiver usando outro servidor de banco de dados, vá até o cliente do servidor e selecione-o.
-
Pressione Enter.
O driver do banco de dados está disponível agora para as conexões do Hibernate ao banco de banco de dados.
-
Se estiver usando um número de porta que não é o padrão 1527, ou se estiver usando outro banco de dados, edite a propriedade hibernate.connection.url em HibernateTravelPOJO > Pacotes de fontes > pacotes padrão > arquivo de configuração hibernate.cfg.xml.
Para determinar o número da porta do banco de dados, consulte a janela Tempo de execução para ver o nó jdbc do banco de dados Viagem. O número da porta está depois do nome do host. Se o banco de dados Viagem não estiver disponível, consulte a seção Informações de configuração nas Instruções de instalação do NetBeans Visual Web Pack para obter informações.
- Na janela Projetos, clique com o botão direito do mouse no nó HibernateTravelPOJO e escolha Construir projeto.
Criando um projeto da Web que usa a estrutura do Hibernate
Nesta seção, você cria um projeto da Web visual e adiciona o projeto de classe Java HibernateTravelPOJO a tal projeto. A figura abaixo ilustra a página da Web que você construirá neste projeto.
 Figura 3: Page1 de HibernateTutorialApp |
- Na janela Tempo de execução, expanda o nó Bancos de dados.
-
Clique com o botão direito do mouse no nó jdbc do banco de dados Viagem e escolha Conectar no menu pop-up.
- Na caixa de diálogo Conectar, digite
viagem como Senha, selecione Lembrar senha durante esta sessão e clique em OK.
- No menu principal, escolha Arquivo > Novo arquivo.
- No assistente para Novo projeto, selecione Web na lista Categorias e selecione Visual Web Application na lista Projetos.
- Clique em Próximo.
Nomeie o projeto de HibernateTutorialApp, selecione o servidor e a versão do Java EE e clique em Finalizar.
Seu projeto aparece com a página inicial (Page1) aberta no Visual Designer.
- Na janela Projetos, clique com o botão direito do mouse em HibernateTutorialApp > Bibliotecas e escolha Adicionar biblioteca.
-
Na janela Adicionar biblioteca, selecione Hibernate322 e clique em Adicionar biblioteca, conforme ilustrado na figura abaixo.
 Figura 4: Adicionando a biblioteca do Hibernate |
- Clique novamente com o botão direito do mouse em HibernateTutorialApp > Bibliotecas e escolha Adicionar projeto.
Na janela Adicionar projeto, vá até HibernateTravelPOJO, selecione-o e clique em Adicionar arquivos JAR do projeto, conforme ilustrado na figura abaixo.
 Figura 5: Adicionando o projeto HibernateTravelPOJO |
- Arraste um componente Lista suspensa da Paleta e solte-o no canto superior esquerdo de Page1 no Visual Designer.
Clique duas vezes no componente Lista suspensa que acabou de adicionar a Page1.
O IDE adiciona um método para processar as alterações na seleção da lista suspensa e exibe o método no editor de fontes. O IDE também registra o método como um manipulador dos eventos de alteração de valor. Posteriormente, você adicionará o código a este método.
- Clique em Design na barra de ferramentas de edição para voltar ao Visual Designer.
Clique com o botão direito do mouse no componente Lista suspensa e selecione Enviar automaticamente ao alterar no menu pop-up.
Esta ação faz com que o navegador envie a página sempre que o usuário selecionar um novo valor na lista suspensa.
Arraste e solte um componente Grupo de mensagens à direita do componente Lista suspensa.
Os componentes Grupo de mensagens ajudam a diagnosticar problemas no tempo de execução.
- Arraste e solte um componente Tabela abaixo do componente Lista suspensa.
Adicionando um empacotador de matriz Option à lista de pessoas
Nesta seção, você adiciona lógica empresarial ao Bean de sessão para que o projeto possa acessar a fonte de dados Person usando a estrutura do Hibernate. Em primeiro lugar, você adiciona uma propriedade ao Bean de sessão para ter uma matriz de objetos Option que será usada pelo componente Lista suspensa. Depois, você adiciona o código para preencher a matriz de objetos Option com os resultados de uma consulta na tabela de banco de dados Person.
-
Na janela Esboço, clique com o botão direito do mouse em SessionBean1 e escolha Adicionar > Propriedade no menu pop-up.
Se o item Adicionar do menu estiver desativado, feche a janela pop-up e tente novamente.
Na caixa de diálogo Novo padrão de propriedade, insira personOptions na caixa de texto Nome, Option[] na caixa de texto Tipo e clique em OK.
Observe que a propriedade recém-adicionada talvez não seja exibida na janela Esboço. A propriedade será exibida depois que você abrir e salvar o arquivo de origem SessionBean1, de acordo com as seguintes etapas.
-
Clique duas vezes no nó SessionBean1 para abrir o arquivo de origem SessionBean1.java.
As anotações de erros aparecem no código como conseqüência das classes não resolvidas. Por agora, essas anotações podem ser ignoradas. Mais tarde, você usará a ação Fixar importações para corrigir esses erros.
-
Adicione o código abaixo em negrito ao final do método init na classe SessionBean1.
Este código chama uma consulta na fonte de dados Person e armazena os resultados na matriz personOptions.
Amostra de código 1: Inicializando a matriz de personOptions no método init do Bean de sessão |
public void init() {
// Realizar inicializações herdadas da nossa superclasse
super.init();
// Realizar a inicialização do aplicativo que deve completar-se
// *antes* que os componentes gerenciados sejam inicializados
// TODO - adicione o seu código de inicialização aqui
...
// Realizar a inicialização do aplicativo que deve completar-se
// *depois* que os componentes gerenciados sejam inicializados
// TODO - adicione o seu código de inicialização aqui
List personList = null;
try {
Session session =
HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Query q = session.createQuery("de Person");
personList = (List) q.list();
} catch (Exception e) {
e.printStackTrace();
}
personOptions = new Option[personList.size()];
Iterator iter = personList.iterator();
int i=0;
while (iter.hasNext()) {
Person person = (Person) iter.next();
Option opt = new Option("" + person.getPersonId(),
person.getName());
personOptions[i++] = opt;
}
} |
-
Clique com o botão direito do mouse no código-fonte e escolha Fixar importações no menu pop-up.
A caixa de diálogo Fixar importações é exibida.
-
Selecione os seguintes nomes totalmente qualificados e clique em OK.
| Nome da classe |
Nome totalmente qualificado |
Consulta |
org.hibernate.Query |
Sessão |
org.hibernate.Session |
Lista |
java.util.List |
Iterador |
java.util.Iterator |
Opção |
com.sun.webui.jsf.model.Option para Java EE 5 com.sun.rave.web.ui.model.Option para J2EE 1.4 |
Transação |
org.hibernate.Transaction |
- Feche e salve o arquivo.
Adicionando o empacotador de provedor de dados da lista de objetos à lista de viagens
Nesta seção, você estende a classe ObjectListDataProvider a fim de criar um empacotador TripDataProvider para os resultados de uma consulta de viagens.
- Na janela Projetos, clique com o botão direito do mouse em HibernateTutorialApp > Pacotes de fontes > hibernatetutorialapp e escolha Novo > Classe Java.
-
Nomeie o projeto de TripDataProvider e clique em Finalizar.
É exibido um nó TripDataProvider.java no nó do pacote hibernatetutorialapp e o IDE exibe o código-fonte da classe TripDataProvider.
-
Substitua a definição de classe pelo código seguinte:
Amostra de código 2: Classe TripDataProvider |
public class TripDataProvider extends ObjectListDataProvider{
private ArrayList tripsList = new ArrayList();
// Observação: para eliminar os avisos ao usar Java SE 1.5, use
// private ArrayList<Trip> tripsList = new ArrayList<Trip>();
/** Crie uma nova instância de tripDataProvider */
public TripDataProvider() {
// Use datas fictícias para o tempo de design
tripsList.add(new Trip());
// Empacote a lista
setList(tripsList);
}
public void refreshTripsList(Integer personId){
tripsList.clear();
try {
Session session =
HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Person person =
(Person)
session.load(Person.class, personId);
Set personTrips = (PersistentSet)person.getTrips();
tripsList.addAll(personTrips);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
- Clique com o botão direito do mouse no código-fonte e escolha Fixar importações no menu pop-up.
-
Selecione os seguintes nomes totalmente qualificados e clique em OK.
| Nome da classe |
Nome totalmente qualificado |
Sessão |
org.hibernate.Session |
Transação |
org.hibernate.Transaction |
Conjunto |
java.util.Set |
- Feche e salve o arquivo.
- Na janela Esboço, clique com o botão direito do mouse no nó SessionBean1 e escolha Adicionar > Propriedade no menu pop-up.
- Na caixa de diálogo Novo padrão de propriedade, insira
tripDataProvider na caixa de texto Nome, TripDataprovider na caixa de texto Tipo e clique em OK.
- Clique duas vezes no nó SessionBean1 para abrir o arquivo de origem
SessionBean1.java.
-
Abra a janela Navegação e clique duas vezes no nó tripDataProvider.
O IDE rola o código-fonte até a declaração da propriedade tripDataProvider.
-
Substitua a declaração da propriedade tripDataProvider pela seguinte instrução:
private TripDataProvider tripDataProvider = new TripDataProvider();
- Pressione F11 para compilar o projeto.
-
Feche e reabra o projeto.
Você deve fechar e reabrir o projeto para que o novo provedor de dados seja exibido na lista de provedores de dados disponíveis.
Vinculando os componentes aos empacotadores de dados
Nesta seção, você vincula os componentes aos empacotadores de dados e adiciona a lógica para sincronizar os dados do componente Tabela com a pessoa selecionada.
- Abra Page1 no Visual Designer.
- Clique com o botão direito do mouse no componente Lista suspensa e escolha Vincular aos dados no menu pop-up.
- Na guia Vincular a um objeto, selecione SessionBean1 > personOptions e clique em OK
.
- Clique com o botão direito do mouse no componente Tabela e escolha Layout da tabela no menu pop-up.
-
Escolha tripDataProvider na lista suspensa Obter dados de.
Observação: Se tripDataProvider não estiver disponível na lista suspensa, compile, feche, reabra o projeto e tente novamente.
- Selecione personId na lista Selecionado e clique no botão com a seta para a esquerda
para mover o campo da lista Selecionado para a lista Disponível.
- Use os botões Acima e Abaixo para colocar os campos restantes na ordem ilustrada abaixo na Figura 6 e clique em OK.
- tripId
- depDate
- depCity
- destCity
- tripTypeId
 Figure 6: Vinculando o componente Tabela ao empacotador tripDataProvider |
- Na barra de ferramentas Edição, clique em Java para abrir
Page1.java no Editor Java.
-
No método prerender, adicione o código que aparece abaixo em negrito.
Amostra de código 3: Método prerender |
public void prerender() {
try {
if (dropDown1.getSelected() == null ) {
Option firstPerson = getSessionBean1().getPersonOptions()[0];
getSessionBean1().getTripDataProvider().refreshTripsList(
new Integer((String)firstPerson.getValue()));
}
} catch (Exception ex) {
log("Descrição do erro", ex);
error(ex.getMessage());
}
} |
Este código faz com que a página exiba as informações da primeira pessoa da lista suspensa quando o usuário visitar a página.
-
Clique com o botão direito do mouse no código-fonte e escolha Fixar importações no menu pop-up.
A caixa de diálogo Fixar importações é exibida.
- Na lista suspensa Nome totalmente qualificado, selecione
com.sun.webui.jsf.model.Option para projetos Java EE 5 e com.sun.rave.web.ui.model.Option para projetos J2EE 1.4.
- Clique em OK.
-
Adicione o código seguinte em negrito ao método dropDown1_processValueChange.
Amostra de código 4: Método dropDown1_processValueChange |
public void dropDown1_processValueChange(ValueChangeEvent event) {
try {
Integer personId =
new Integer((String)dropDown1.getSelected());
getSessionBean1().getTripDataProvider().refreshTripsList(
personId);
} catch (Exception ex) {
log("Erro ao obter a lista de pessoas : ", ex);
error("Erro ao obter a lista de pessoas: " + ex.getMessage());
}
} |
Este código faz com que a página exiba as viagens da pessoa selecionada.
- Na barra de ferramentas principal, clique em Executar projeto principal para executar o projeto.
- Selecione o nome de uma pessoa na lista suspensa para exibir as viagens desta pessoa.
Dicas para solução de problemas
Se o aplicativo da Web não funcionar, aqui estão algumas dicas sobre como diagnosticar o problema.
- Se, ao executar o aplicativo, o componente Tabela exibe "No items found" (Nenhum item encontrado), comprove se o servidor de banco de dados está em execução, se há conexão ao banco de dados Viagem a partir da janela Tempo de execução e se a configuração da porta no arquivo
hibernate.cfg.xml está correta. Se modificar hibernate.cfg.xml, certifique-se de limpar o projeto antes de reconstruir.
- Se o aplicativo lançar
java.lang.ExceptionInInitializerError HibernateTravelPOJO.HibernateUtil, comprove se o banco de dados está em execução. Se estiver implantando no servidor Tomcat, certifique-se de ter adicionado o jta.jar à biblioteca Hibernate322.
- Se o componente Tabela não exibir novos dados quando outra pessoa for selecionada na lista suspensa, abra a exibição Design em Page1 e verifique se o item Enviar automaticamente ao alterar está selecionado no menu pop-up do componente Lista suspensa.
- Se o aplicativo lançar
java.lang.reflect.UndeclaredThrowableException at $Proxy64.createQuery(Unknown Source), certifique-se de ter incluído a biblioteca antlr-2.7.6 e não a biblioteca antlr-1.6.5.
Consulte também:
Esta página foi modificada pela última vez em: 26.02.07