Mostrar mensagens com a etiqueta Hibernate. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Hibernate. Mostrar todas as mensagens

quarta-feira, 11 de março de 2015

Exemplo de utilização do Java Persistence API - 2

Num artigo anterior criámos, no NetBeans, um projeto para acesso a uma BD ORACLE utilizando a Java Persistence API (JPA).
Entre esse e este artigo tivemos ainda tempo para resolver o problema da gestão de atribuição de chaves primárias no JPA sobre ORACLE.
Vamos, aqui, criar um projeto uma camada acima do anterior, que fornecerá para uma outra camada, de apresentação ou user interface, acima, um conjunto de serviços de lógica de negócio.
A camada de lógica de negócio aqui apresentada é apenas um exemplo possível. O objetivo é concentrar nesta camada os métodos que usam o JPA, de forma a libertar a camada acima (User Interface) desse conhecimento.

Começamos por criar um novo projeto de tipo Java Class Library, tal como anteriormente, e teremos que adicionar às suas Libraries, o projeto DAL feito no  artigo anterior.

Depois, criamos uma classe de apoio, BLLEntityManager.java, para nos fornecer o EntityManager (singleton), e iniciar alterações a objetos geridos (instâncias de JPA Entities já armazenadas na BD).

Gestão de atribuição de chaves primárias - ORACLE / JPA

No artigo anterior, usámos o JPA para criar uma camada de acesso a uma BD ORACLE.
A BD ORACLE, cuja criação foi tratada em "Exemplo de Aplicação Java Swing com BD Oracle - 1", usa sequências e triggers para atribuição automática da chave em cada tabela.

O JPA permite-nos fazer operações sobre a BD (criar, alterar, apagar ou selecionar registos das tabelas). No entanto, quando queremos fazer várias operações relacionadas, e precisamos de saber que chave foi atribuída pela BD a um dado registo criado anteriormente, cujo objeto ainda temos em memória, não temos maneira segura de conhecer o valor dessa chave. E, o objeto que ainda temos em memória permanece sem o valor da chave nos seus atributos, fazendo com que o JPA considere que essa instância não é gerida por si. Isto, impede-nos de usar essa instância para operações subsequentes com a BD.

O ORACLE, tipicamente usa sequências para atribuição de valores de chave primária nas suas tabelas.
A utilização dessas sequências na atribuição da chave primária pode fazer-se definindo um default value para a coluna respetiva, ou criando um trigger before insert o qual obtém o valor seguinte da sequência e o atribui à coluna da chave primária da tabela.

domingo, 8 de março de 2015

Exemplo de utilização do Java Persistence API - 1

Neste artigo vamos criar um projeto Java Class Library, usando o NetBeans, para acesso a uma BD ORACLE, usando o Java Persistence API (JPA).
Para criar a BD ORACLE pode seguir-se, por exemplo, este artigo.

No NetBeans, criamos um novo projeto de tipo "Java Class Library":


 Atribuimos um nome ao projeto:


O nosso novo projeto aparecerá como se segue, na janela de visualização de projetos do NetBeans:


Depois, queremos criar as classes Entidade a partir das tabelas já criadas na nossa base de dados ORACLE. Acedemos a New File --> Other e selecionamos, na categoria Persistence, o tipo de ficheiro "Entity Classes from Database":

terça-feira, 26 de novembro de 2013

Formulário de Edição em Spring Web MVC com o NetBeans IDE

Nos artigos anteriores:



vimos como usar o Hibernate e a framework Spring Web MVC para listar dados da BD numa página Web, obedecendo a uma arquitetura Model-View-Controller.

Usámos o NetBeans para o nosso projeto e, portanto, fizemos por utilizar os "wizards" disponibilizados por este para criar o controller para fazer o nosso exemplo de listagem de Livros.

Para a criação de uma página de formulário (form), o NetBeans também nos fornece um "wizard" que cria uma classe descendente de SimpleFormController... Esta classe, no entanto, caiu em desuso (deprecated) e, apesar dos meus esforços para a usar no exemplo de Form que quero aqui criar, isso não foi possível por, no final, o evento submit não ocorrer como esperado pela framework, ou o event handler onSubmit não ser, por alguma razão, despoletado.

Alguns exemplos de utilização do SimpleFormController são:

Há males que vêm por bem, e os problemas com o SimpleFormController levam-me a fazer o exemplo de hoje usando um Controller baseado em anotações, como estabelecido pelas versões mais recentes da framework Spring.

Assim, pegando no exemplo anterior, queremos criar um Form para edição de Livro (Book), guardar o livro na BD, e terminar com um ecrã de confirmação de gravação. E queremos colocar o form acessível da nossa página inicial.


sábado, 2 de novembro de 2013

Primeiro Exemplo de Aplicação Spring Web MVC com o NetBeans IDE - 3

No artigo anterior fizemos o nosso primeiro Controller que devolveu uma View e os dados do Model que queriamos usar na view.

Artigos anteriores:
     - Primeiro Exemplo de Aplicação Spring Web MVC com o NetBeans IDE - 1

     - Primeiro Exemplo de Aplicação Spring Web MVC com o NetBeans IDE - 2


Neste artigo vamos usar o Hibernate para a camada Model, o que nos permite obter dados de uma base de dados e os passar a uma view para os listar no browser.

A camada model de este projeto Spring Web MVC é exatamente a mesma que foi usada no projeto Struts. Ver artigos: 


E, o nosso objetivo aqui, neste artigo, é fazer em Spring Web MVC, o que fizémos no artigo 3 referido acima, em Struts.

Assim, para este exemplo, que é construido sobre o do artigo anterior, queremos criar a classe Book.java e o respetivo ficheiro de mapeamento do Hibernate hibernateBook.hbm.xml.



quarta-feira, 30 de outubro de 2013

Primeiro Exemplo de Aplicação Spring Web MVC com o NetBeans IDE - 2

Após a análise anterior, focando a estrutura de projeto Spring Web MVC criada pelo NetBeans, e uma explicação sucinta sobre o modo de funcionamento da infraestrutura Spring Framework, vamos, neste artigo, criar um primeiro exemplo de controller e view.

Assim, vamos começar por criar uma classe Controller (OlaController) a qual irá devolver dados do Model (string "Olá Mundo!!!") e uma View (ola.jsp) que servirá para renderizar os dados do Model num Browser.

O resultado não será muito diferente do obtido no artigo anterior, mas o objetivo aqui é criar um Controller que instancia dados e os passa a uma View.

No próximo artigo, iremos avançar com o preenchimento de dados de Model oriundos de uma base de dados...

Assim, vamos criar um novo package (exemplo) no qual iremos colocar o Controller OlaController.java.
No NetBeans, podemos clicar sobre o package exemplo com o botão direito do rato e selecionar

                  New --> Other --> Categories: SpringFramework  / File Types: AbstractController
                                                         (damos à nova classe o nome OlaController)

Primeiro Exemplo de Aplicação Spring Web MVC com o NetBeans IDE - 1

O padrão arquitetural MVC (Model-View-Controller) permite separar um projeto nas suas componentes de:


  • View - Apresentação (ou Interface com o Utilizador)
  • Controller - Aplicação (ou camada de controlo e dispatching)
  • Model - Modelo de Domínio
  • Infraestrutural (diferentes frameworks; ex.: Spring Web MVC, Hibernate, etc.)



Vimos em artigos anteriores como usar a framework Struts 1 para criar uma aplicação Web de acordo com o padrão MVC, usando JSP, Java e a framework Hibernate.


Vamos, neste artigo, começar a criar uma aplicação Java Web, que implementa o padrão MVC através da framework Spring Web MVC.


Para desenvolver o nosso exemplo vamos usar o NetBeans IDE 7.2.1.
Começamos, então, por criar um novo projeto Java Web/Web Application, atribuir-lhe um nome, testSpringMVC01, selecionar o servidor aplicacional a usar (vamos usar o Apache Tomcat), e selecionar as frameworks que pretendemos usar.


Para este exemplo selecionamos, para além da framework Spring Web MVC (Spring Framework 3.1.1), o Hibernate 3.2.5, o qual iremos usar como infraestrutura de mapeamento entre o Model e a base de dados Oracle.


Ao selecionar o Hibernate, podemos logo aí configurar a string de ligação à base de dados. Se não o fizermos podemos mais tarde editar o ficheiro hibernate.cfg.xml para o fazer.


O Netbeans cria a seguinte estrutura de projeto:






Esta estrutura de pastas inclui o local onde deveremos colocar a camada VIEW, que neste caso será composta por diversos ficheiros JSP (Java Server Pages) - WEB-INF/jsp -, e as classes Java - Source Packages -, onde estarão o CONTROLLER e o MODEL.


sábado, 2 de fevereiro de 2013

Exemplo de aplicação Web Java usando Struts 1 - 4

No artigo anterior fizemos o código para a nossa aplicação exemplo listar os livros existentes na base de dados.

Artigos anteriores:

     - Exemplo de Aplicação Web Java usando Struts 1 - 2
     - Exemplo de Aplicação Web Java usando Struts 1 - 3


Vamos hoje, acrescentar o código necessário para criar e editar livros.

Para isso, vamos acrescentar ao nosso ficheiro struts-config.xml as seguintes definições:
  - Um form bean para lidar com os dados do formulário de edição de livros (BookActionForm), ficando:


    <form-beans>
        <form-bean name="listBooksForm" 
                   type="Controller.ListBooksForm" />
        <form-bean name="actionBookForm" 
                   type="Controller.BookActionForm" />
    </form-beans>

  - Mais um global forward (actionBook) a somar aos dois que já lá estavam (note-se que o welcome, que vinha de origem, se tornou desnecessário, podendo ser apagado...):


    <global-forwards>
        <forward name="welcome"  path="/Welcome.do"/>
        <forward name="listBooks" path="/ListBooks.do"/>
        <forward name="actionBook" path="/ActionBook.do"/>
    </global-forwards>

  - E mais três actions (controllers). O primeiro (BookAction) irá decidir qual a view apropriada para a operação seguinte, e se for caso disso vai ler da BD o livro selecionado para pré-preencher o formulário de edição. O segundo (BookAddAction) irá fazer o tratamento do ActionForm que contém os dados do formulário de criação de um novo livro, e criar o livro na BD. O terceiro (BookUpdateAction) irá fazer o tratamento do ActionForm que contém os dados do formulário de edição de um livro, e atualizar os dados do livro na BD.


<action
     path="/ActionBook"
     name="actionBookForm"
     scope="request"
     type="Controller.BookAction"
     parameter="method"
     validate="false">
     <forward name="edit" path="/editBook.jsp" />
     <forward name="add" path="/addBook.jsp" />
     <forward name="list" path="/ListBooks.do" redirect="true" />
</action>
        
<action
     path="/BookAdd"
     name="actionBookForm"
     scope="request"
     type="Controller.BookAddAction"
     input="addBook.jsp"
     validate="false">
     <forward name="error" path="/errorBook.jsp" />
     <forward name="list" path="/ListBooks.do" redirect="true" />
</action>
        
<action
     path="/BookUpdate"
     name="actionBookForm"
     scope="request"
     type="Controller.BookUpdateAction"
     input="editBook.jsp"
     validate="false">
     <forward name="error" path="/errorBook.jsp" />
     <forward name="list" path="/ListBooks.do" redirect="true" />
</action>


terça-feira, 29 de janeiro de 2013

Exemplo de aplicação Web Java usando Struts 1 - 3

Continuando o nosso exemplo, vamos neste artigo criar as camadas View e Controller da nossa aplicação MVC usando Struts, para listar os livros da BD fazendo uso das classes Model desenvolvidas anteriormente.


     - Exemplo de Aplicação Web Java usando Struts 1 - 2


Numa aplicação Struts 1, o ficheiro web.xml, já referido num artigo anterior, especifica que os pedidos (requests) que satisfaçam o padrão '*.do' são encaminhados para o Struts ActionServlet. 
O ActionServlet procura, no ficheiro de configuração struts-config.xml, qual a Ação que está mapeada no pedido que recebeu. O ActionServlet e os objetos de Ação (Action) compõem a parte de Controlador (Controller) da arquitetura MVC de uma aplicação Struts.

Para transferir dados entre Ações e a View, tipicamente implementada em JSPs, o Struts usa objetos ActionForm.
Quando um utilizador submete um form, o ActionForm, juntamente com os dados do form, é passado para o método execute da Ação.

A Ação pode validar os dados, e depois invocar a lógica necessária, idealmente encapsulada numa camada Model, da qual o Struts não tem qualquer conhecimento.

Quando a lógica de negócio é executada, a Ação transfere o controlo para a View especificada num ou mais objetos ActionForward objects, os quais são também configurados no struts-config.xml.
As entradas ActionForward representam os possíveis outputs de uma Ação.
Podem ser definidas entradas ActioForward por Ação, ou pode ser definida uma entrada ActionForward globalmente, para se aplicar a todas as Ações.

segunda-feira, 28 de janeiro de 2013

Exemplo de aplicação Web Java usando Struts 1 - 2

Neste artigo vamos criar a camada Model da nossa aplicação MVC usando Struts. Para isso vamos usar o Hibernate.

Vamos começar por criar um package Model, onde vamos criar as nossas classes POJO (Plain Old Java Objects) para posterior mapeamento com as tabelas da nossa base de dados (o Oracle XE 10g):





Depois, vamos criar o ficheiro de configuração do Hibernate, para o que podemos usar o Hibernate Configuration Wizard:

Exemplo de aplicação Web Java usando Struts 1 - 1

Struts é uma framework para aplicações Web que faz uso de Java Servlets, JavaBeans, ResourceBundles, XML, e alguns componentes Apache Commons.

O Apache Struts web framework é uma solução open-source para criar aplicações web em Java, usando uma arquitetura Model-View-Controller (MVC), oferecendo um ambiente extensível para desenvolvermos as nossas aplicações.

O Model representa as entidades do domínio (ou da base de dados), a View representa o código de apresentação das páginas Web, e o Controller representa o código navegacional.

O Struts fornece o seu próprio componente de controlo (Controller) e pode ser integrado com diversas tecnologias para fornecer o Model e a View.

Para o Model, o Struts pode ser integrado com JDBC e EJB, ou com packages externos como o Hibernate, iBATIS, ou Object Relational Bridge.

Para a View, a framework funciona com JSPs, mas podem ser usados outros sistemas de apresentação.

O Controlador atua como uma ponte entre o Modelo da aplicação e a View (camada de apresentação Web).

Quando é recebido um pedido (request), o Controlador invoca uma classe de Ação (Action class), a qual consulta o Modelo para examinar ou atualizar o estado da aplicação.

terça-feira, 17 de abril de 2012

Utilização do Hibernate para Java - 2

No artigo anterior vimos como utilizar o Hibernate como camada de middleware entre a estrutura de classes do nosso programa Java e a representação das instâncias dessas classes numa base de dados.

O artigo anterior ilustrou o mapeamento entre uma classe Java e uma tabela da BD, nomeadamente a classe Book e a tabela com o mesmo nome.

Vamos hoje ver como mapear os relacionamentos entre classes, 1-para-N e N-para-N, para a base de dados.

Vamos começar por acrescentar ao nosso modelo (que apenas tinha a classe Book) duas novas classes:
     - BookCopy (Um Book contém a informação de um livro, e relaciona-se com vários BookCopy, que correspondem aos exemplares que uma biblioteca tem desse livro) --> relação 1-N.
     - Author (Um Book tem vários Author e vice-versa) --> relação N-N.


No projeto Java desenvolvido no post anterior, vamos começar por acrescentar a classe BookCopy e o respetivo ficheiro de mapeamento do Hibernate BookCopy.hbm.xml.

domingo, 15 de abril de 2012

Utilização do Hibernate para Java - 1


O Hibernate é um framework para o mapeamento objeto-relacional (object-relational mapping) para a linguagem Java. Facilita o mapeamento das classes, atributos e relacionamentos entre classes entre o modelo de classes de uma aplicação e a sua implementação numa BD relacional. Para definição dos mapeamentos são usados ficheiros XML ou anotações Java.
O Hibernate serve de middleware entre os objetos Java e a BD relacional.

Neste artigo, e no próximo, vamos usar a versão Hibernate 3 para ilustrar, com um pequeno exemplo, a utilização do Hibernate num programa Java.

Como sistema de BD vamos usar o Oracle 10g.

Para começar, temos que criar as tabelas da base de dados. No artigo Exemplo de Aplicação Java Swing com BD Oracle - 1 é explicado este processo.
Vamos, neste artigo, mapear apenas a classe BOOK.


 Depois, usando o Netbeans ou outro IDE para Java, criamos uma nova aplicação Java:


Criamos um package para as classes que correspondem às tabelas da BD e criamos a classe Book: