sábado, 30 de novembro de 2013

Criar Modelo de dados EntityFramework e Serviços WCF a partir da Base de Dados

Neste artigo vamos ver como, tendo uma base de dados (BD) previamente criada, podemos obter o modelo de dados para o EntityFramework e um conjunto de serviços de dados WCF (Windows Communication Foundation) o qual pode depois ser usado por uma aplicação Web ou para obter dados da BD via OData.

O nosso exemplo, para uma aplicação de aluguer de automóveis, vai utilizar uma BD SQL Server com o seguinte esquema relacional:



Vamos, então, começar por criar um novo projeto, no Visual Studio 2012, de tipo WCF Service Application (damos-lhe o nome WcfRentACarService):



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 (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.