Mostrar mensagens com a etiqueta Java EE. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Java EE. 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":

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 (BookAddActionirá 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 (BookUpdateActionirá 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 (Actioncompõ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.

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.

quarta-feira, 23 de janeiro de 2013

JSP - Melhorar o primeiro exemplo com Java Beans

No artigo anterior vimos um primeiro exemplo de utilização de JSP, onde era usado exclusivamente Java embebido no HTML para fazer toda a parte dinâmica.
Neste artigo, vamos melhorar a estrutura do exemplo anterior, usando um Bean. Esta estrutura melhora a legibilidade e separa o código da interface com o utilizador, do código para efetuar os cálculos.
No caso de uma aplicação mais complexa, a estrutura do primeiro exemplo conduziria a uma solução de difícil compreensão e de difícil manutenção. A estrutura que é dada à solução neste artigo, é mais legível e portanto mais fácil de manter e fazer evoluir.

Assim, devemos criar um projeto, tal como em  Primeiro Exemplo de JSP, e fazer as mesmas alterações a index.jsp.
Depois, criamos o novo ficheiro JSP (newjsp.jsp):


Contrariamente ao que vimos em Primeiro Exemplo de JSP, este ficheiro não tem embebido o código de obtenção dos parâmetros nem o de cálculo do resultado da operação. Tem, isso sim, a utilização de um componente JavaBean, que não é mais do que uma classe a quem são passados os parâmetros e efetua os cálculos pretendidos.