[an error occurred while processing this directive]
Matéria de Capa
Edicao Atual (n. 21)

 

>>Produtividade para Interfaces Desktop
Alie agilidade no desenvolvimento com ricas interfaces para desktop utilizando o framework SwingBean.

A criação de interfaces ricas em Swing é uma tarefa trabalhosa pela própria natureza portável das aplicações desenvolvidas. Existem alguns IDEs que simplificam o trabalho de posicionar e configurar os componentes em uma tela, mas eles não nos livram de tarefas braçais como colocar e recuperar um objeto em um formulário ou em uma tabela. O SwingBean é um framework que possui o objetivo de criar interfaces Swing através de componentes de mais alto nível configurados por arquivos XML, dando mais flexibilidade e produtividade ao desenvolvimento


Uma vez me foi apresentado o seguinte problema: era necessário desenvolver uma aplicação desktop em Java de uma forma bem rápida. Como é de consenso na comunidade Java, este não é um dos pontos fortes da tecnologia Swing, principalmente no que diz respeito à produtividade. Tomando como parâmetro a facilidade de desenvolvimento de telas em ferramentas como a das linguagens Visual Basic e o Delphi, ficava realmente difícil não admitir que a plataforma Java neste ponto deixava um pouco a desejar. Surgiram então diversas ferramentas como o NetBeans GUI Builder, o Eclipse Visual Editor e o Jigloo GUI Builder, entre outras, que buscavam uma edição visual das interfaces em Java. Para não sacrificar a portabilidade das aplicações, o uso dos diversos layout managers deixava a criação da interface, mesmo sendo visual, complexa se comparada a outras linguagens, apesar de já haver um grande ganho. Um outro problema é a compatibilidade entre o código reconhecido e gerado por estes editores de interface. Muitas vezes, ao mexer em um código, ou tentar trabalhar em uma interface já existente, a ferramenta não reconhece a interface gerada tornando inviável a sua utilização naquela situação.

Devido a todas essas questões, resolvi dar uma solução diferente ao problema de desenvolvimento das interfaces. A princípio, foi construído um componente de interface de mais alto nível que representa, não um campo de formulário, mas o formulário inteiro. O comportamento deste formulário é definido de forma declarativa por um bom e velho descritor XML. Este componente encapsula comportamentos específicos (como a recuperação de valores dos campos dos formulários) e facilita a configuração de componentes (para limitar o número de caracteres de um JTextField é preciso criar um listener!). A interação da aplicação com este componente não acontece campo por campo, mas utilizando os Java Beans que são editados ou representados na interface. Daí nasceu o framework SwingBean (Swing, porque utiliza componentes em Swing, e Bean, porque a interação com os componentes é feita a partir de Java Beans), que está disponível para download em http://sourceforge.net/projects/swingbean.

A evolução do framework levou a adição de diversas funcionalidades como validação, adição de diversos novos tipos de componentes, como para imagens e seleções múltiplas, e suporte a comportamentos mais específicos como combos dependentes. O framework também suporta a construção de tabelas de edição de dados, validação, ordenação, filtragem de dados e até mesmo tabelas-árvores (TreeTables). O Swing-Bean já foi utilizado com sucesso em pelo menos três projetos que se encontram hoje em produção e está sendo utilizado em diversos outros que estão em desenvolvimento. O sucesso na utilização do framework se deve ao ganho de produtividade obtido e a flexibilidade na alteração das interfaces gráficas.

O objetivo deste artigo é apresentar o framework SwingBean com suas principais funcionalidades. A apresentação do framework será guiada a partir de exemplos. Os exemplos não terão objetivo de representar uma aplicação real, com interação com banco de dados, por exemplo. Isso será feito para focar com maior ênfase as funcionalidades do framework. Para utilizar o framework e rodar os exemplos, basta baixar a última distribuição do SwingBean no SourceForge e adicionar no classpath o arquivo SwingBean.jar e suas dependências que estão na pasta lib: forms-1.05.jar, validation-1.0.jar e jcalendar.jar.

Um primeiro contato com SwingBean

Nada melhor para se familiarizar com um framework do que criar um bom exemplo. Nesta primeira sessão, será criado um cadastro de um usuário, que é representado pela classe apresentada na Listagem 1. Apesar de ser um cadastro simples, vamos aproveitar para incluir nesta classe diferentes tipos de dados, como texto, numérico, booleano, data e uma lista para ver como o framework se comporta. O objetivo é gerar uma tela em que exista um formulário para a inserção de dados e, ao clicar em um botão, seja criado um objeto Usuario e este seja inserido em uma tabela. A tabela, por sua vez, ao receber um duplo clique em uma de suas linhas deve pegar o objeto Usuário ali representado e colocar no formulário. A figura 1 mostra qual deverá ser o resultado deste primeiro exemplo.


Figura 1. Interface gráfica gerada com o código da Listagem 2.

Listagem 1. Classe Usuario que possuirá seus dados representados em um formulário e em uma tabela.

package org.mundojava.swingbean;public class Usuario {

private String nome;
private int idade;
private String login;
private String senha;
private Date dataCadastro;
private boolean ativo;
private String[] perfisAcesso;

//Métodos Getters e Setters omitidos

}


>>MVC sem XML

Este artigo descreve uma visão geral do Mentawai, um framework web MVC que garante produtividade, estabilidade, facilidade e flexibilidade. Tudo isso sem mexer em nenhum arquivo XML, tudo feito na linguagem que nós conhecemos melhor: Java! Inicialmente, explicaremos alguns conceitos do framework e, em seguida, um pequeno exemplo para ilustrar o seu funcionamento. Posteriormente, mostraremos uma aplicação completa: o MentaBlog, um blog com comentários, com suporte à Ájax, entre outras coisas interessantes.


M uitas vezes, ao aprendermos novos frameworks passamos por várias dificuldades: conceitos novos, arquivos de configuração novos e certa resistência de nossa parte em se adaptar a algo tão estranho ao que já conhecemos. A melhor maneira de aprendermos um framework é com exemplos, pois com eles conseguimos medir se um framework é simples e se pode ser produtivo para nós. Ler a documentação ou a API de um framework nem sempre será suficiente para uma visão geral da situação.
Neste artigo, nós mostraremos um exemplo completo do framework MVC Mentawai, com os principais trechos do código comentados e algumas funcionalidades da aplicação serão adicionadas em partes, para facilitar a compreensão. Com essa visão geral, conseguiremos criar uma aplicação simples no Mentawai e, se necessário, criarmos posteriormente coisas mais complexas. Inicialmente, explicaremos o conceito do framework com um exemplo simples. Depois, estenderemos esse exemplo explicando outras funcionalidades do framework, finalizando com uma aplicação completa de um blog com tela de administração, cadastro de mensagens de cada mensagem, e um mecanismo de busca eficiente para mostrar a integração do framework com Ajax .
Para quem já trabalhou com Java, mas nunca desenvolveu para Web, usar o Mentawai pode ser um bom começo, e este artigo mostrará tudo isso com vários exemplos.

O framework

Há seis anos, Craig R. McClanahan criava o Struts, o framework que implementa o padrão MVC (Model View Controller), algo pioneiro para quem estava preso ao mundo das APIs de JSP/servelts. Foi tão revolucionário que rapidamente foi adotado pela comunidade Java e, conseqüentemente, pelas grandes empresas como padrão.

Entretanto, o tempo passa e as necessidades vão aparecendo, assim como novas idéias e novos pontos de vista do desenvolvimento web com um framework MVC. Surgiram várias opções para a comunidade, entre elas, destacando-se o Spring MVC e o WebWork . Vários outros frameworks apareceram, mas todos eles possuíam suas diferentes regras e diferentes configurações em XML. Muitas necessidades básicas de uma aplicação web não são implementadas por alguns frameworks, o que atrasa o desenvolvimento e obriga o desenvolvedor a procurar por soluções alternativas ou implementar a sua própria. Às vezes, precisamos conectar ao banco de dados ou de um mecanismo simples e completo de autenticação e acabamos buscando soluções fora do framework ou específicas do servidor de aplicação.

Sérgio Oliveira, depois de participar de vários projetos web, entre eles, ParPerfeito e Gazzag, buscava algo que fosse mais reutilizável, pois a cada novo projeto partia-se sempre para um novo framework web caseiro. Quando ele tentou aprender os frameworks MVC mais utilizados no mercado, percebeu que eles possuíam uma curva de aprendizado elevada, o que comprometia os ganhos de produtividade prometidos. Como a necessidade é a mãe da invenção, decidiu então criar algo bem simples e que abstraísse os principais problemas recorrentes de qualquer projeto web. Algo revolucionário como isso dificilmente seria aceito numa empresa grande, portanto ele resolveu começar um projeto open source chamado Mentawai, nome em homenagem às ilhas de Mentawai da costa oeste da Indonésia, arquipélago famoso por ser um paraíso do surf. A comunidade open source contribuiu para melhorias do framework, e hoje o projeto conta com membros e colaboradores de diferentes países.

Atualmente, o Mentawai é usado em ambiente de produção de diversas empresas, o destaque internacional é a Sun Microsystems que está usando em alguns servidores de sua Intranet e o destaque nacional é o Tribunal de Contas do Ceará. Existe uma página no site do Mentawai que informa o que as pessoas estão falando sobre o framework, consulte os links no final do artigo!

Conceitos básicos

é um padrão de arquitetura de aplicações que visa separar a lógica da aplicação (Model), da interface do usuário (View) e do fluxo da aplicação (Controller). Permite que a mesma lógica de negócios possa ser acessada e visualizada por várias interfaces (web ou desktop). Mesmo que você use só uma interface, utilizar esse padrão vai organizar sua aplicação e proporcionar um maior controle sobre a mesma.
Esclarecido o conceito de MVC, vamos apresentar os conceitos básicos necessários para trabalharmos:
1. Configuração:
A navegação da sua aplicação é controlada em outros frameworks por arquivos XML. No Mentawai, isso é feito com apenas uma classe chamada ApplicationManager. Ela conterá as informações principais de sua aplicação. Acreditamos que XML é um complicador desnecessário para a maioria dos frameworks web. Além de complicar, torna a arte da programação extremamente chata. A configuração programática em código 100% Java é não só mais poderosa como também muito mais prazerosa e natural.

2. Input e Output
Toda action possui entre outras características:
input: o input (org.mentawai.core.Input) possui o cabeçalho e os valores dos parâmetros da requisição. Nós podemos acessar as informações da requisição Http através dessa interface. Os parâmetros podem ser quaisquer objetos Java, e não somente Strings. Se nós realmente precisarmos, nós poderemos, por exemplo, obter o endereço IP de algum acesso chamando o método getRemoteAddr() da classe HttpServletRequest por reflection, atribuindo-se para uma variável String input.getProperty(“remoteAddr”).
output: o output (org.mentawai.core.Output) tem o resultado da execução da action. Por exemplo, nossa action pode buscar no banco de dados uma lista de usuários e colocá-la no output da action. Depois, se a conseqüência da action for FORWARD, nós poderemos acessar o output da action na camada view.

3. Filtros
Os filtros são a principal funcionalidade do framework a partir da qual todas as outras são implementadas: validação, autenticação, integração com Hibernate, Ajax, Spring, etc. No Mentawai, nós definimos os filtros na classe ApplicationManager do mesmo jeito que definimos cada configuração de action (ActionConfig.). O filtro é uma interface Java, logo você pode estender e criar os seus próprios filtros se desejar.

4. Actions
Quando estendemos org.mentawai.core.BaseAction, a nossa classe tem acesso a alguns dados úteis de membros protected, além de tornar-se uma action.
O ciclo de vida da action é:
• o controller recebe a requisição (javax.servlet.http.HttpServletRequest);
• o controller procura pela action correspondente;
• o controller prepara o Input, Output, contextos (Session, Application, Cookies, etc.) e injeta na action;
• o controller executa a action junto com seus possíveis filtros;
• O retorno da action é um resultado (java.lang.String), normalmente SUCCESS ou ERROR;
• para cada resultado, existe uma conseqüência (org.mentawai.core.Consequence), normalmente um FORWARD ou REDIRECT;
• o controller executa a conseqüência
Isso é só para entendermos o que acontece internamente, mas não precisamos nos preocupar com isso. Tudo o que precisamos fazer é escrever nossas actions e nossos filtros.

5. Extras
Várias implementações interessantes foram feitas no Mentawai, mostraremos algumas em seguida. Inicialmente, destacaremos duas: o suporte a diferentes idiomas (i18n) e listas de dados, ambas que são facilmente implantadas em nossa aplicação.


>>VRaptor 2: O pulo do Raptor
Do Struts Action 1 ao VRaptor 2: desenvolvendo para a web com facilidade, sem a burocracia dos frameworks clássicos e da javax.servlet

Diversas tecnologias surgiram para facilitar o uso e a integração de seu código Java com a camada de visualização web. O padrão MVC, nascido com Smalltalk, deu gás para o surgimento do primeiro controlador Java que estourou no mercado, o Struts.
Nessa linha, porém agnóstica à API de servlets, o VRaptor é uma iniciativa brasileira que foi criada para o desenvolvimento do GUJ 2 (www.guj.com.br) e de alguns serviços utilizados na Universidade de São Paulo em 2004. Atualmente, é aplicado em diversas empresas e projetos open source, em especial na nova versão do já consagrado JForum.

Mostraremos neste artigo como o programador Java ganha produtividade ao escolher o VRaptor como seu controlador MVC para seu sistema web, além de como este framework pode ajudar a disponibilizar seus componentes como serviços para terceiros, facilitando a criação de sua arquitetura orientada a serviços de maneira não intrusiva.
Partiremos da premissa que o leitor já teve dificuldade no lento desenvolvimento com jsp e servlets, além de já ter utilizado um controlador MVC para tentar resolver alguns problemas. Mostraremos algumas falhas que tais controladores clássicos apresentam e como poderíamos contorná-las. Para um framework ser útil, não deveríamos programar pensando em como nos adaptar a ele: vamos passar a fazer com que ele se adapte ao que precisamos, ao código que deve ser executado.

O framework escolhido deve facilitar nosso trabalho, e não torná-lo mais burocrático por causa de seus recursos de difícil uso.

Desde os primórdios do Struts em 2000, diversas outras idéias surgiram. O ódio contra xml, as anotações do Java 5, os padrões e a disponibilização de serviços são algumas idéias que se tornaram populares nesse tempo e moldam os novos frameworks. Essa nova geração de controladores foca mais em produtividade e tenta acertar onde seus antecessores falharam: na simplicidade de uso.
Antes de mostrar o VRaptor 2, daremos uma forte motivação para usá-lo e o porquê de sua criação, mostrando os problemas do Struts 1.x (atualmente, conhecido como Struts Action 1.x) e similares. Daí sim escreveremos a mesma ação da nossa maneira.

Exemplo inicial

Iniciamos nosso caminho com um exemplo de lógica de negócios utilizando o Struts, porém sem nenhum dos seus recursos. É fácil notar como as classes, interfaces e apetrechos do framework infectam o nosso código e começamos a programar voltado para ele. Em alguns passos, chegaremos ao esquema de classes que é utilizado no VRaptor.
O código da Listagem 1 mostra uma ação que utiliza um DAO para incluir um contato no banco de dados, e que popula um objeto do tipo Contato para adicioná-lo através do DAO. Aqui ainda está faltando o mapeamento da servlet do Struts no web.xml e o mapeamento dessa ação no struts-config.xml. Haja mapeamento para tão pouco!

Listagem 1. Exemplo de AdicionaContato para o Struts.

public class AdicionaContato extends Action {

public ActionForward execute(ActionMapping map,
ActionForm form,HttpServletRequest req, HttpServletResponse res)
throws Exception {

Contato contato = new Contato();
contato.setNome(req.getParameter("nome"));
contato.setEndereco(req.getParameter("endereco"));
contato.setEmail(req.getParameter("email"));

ContatoDAO dao = new ContatoDAO(); // talvez alguns parâmetros aqui
dao.adiciona(contato);

return map.findForward("ok");

}
}

Baseado neste código, percebemos que estamos fortemente atrelados a HttpServletRequest e seu método getParameter. Fora isso, usamos diversas classes estranhas ao nosso projeto: Action, ActionMapping, ActionForward, HttpServletRequest e HttpServletResponse. E, em um código real, teríamos uma série de conversões e validações com Integer.parseInt, SimpleDateFormat e familiares.
É muito chato, e nada prático, repetir isso em toda a sua aplicação. Visando facilitar esse tipo de trabalho, o Struts abstrai o acesso aos parâmetros do request com o ActionForm. Veja Listagem 2.

Começando com o VRaptor

Você está apenas folheando a revista ou está com muita pressa?
Faça a configuração habitual de uma aplicação web e coloque o Vraptor e suas dependências no WEB-INF/lib (são elas XStream e log4j). Considere um POJO Produto com os atributos nome, descricao e preco e crie a classe ProdutoComponent em qualquer pacote que desejar, como na figura deste quadro.


O VRaptor descobrirá sozinho a sua @Component, e elá será registrada com o nome de produto. O formulário html da figura está apontando para produto.adiciona.logic, que o VRaptor irá interpretar e acessar o método adiciona do nosso componente produto, passando como parâmetro um produto instanciado e populado através dos inputs do formulário html. Depois de invocar esse método, o VRaptor irá fazer o dispatch para o arquivo adicionar.ok.jsp dentro do diretório contato da sua aplicação web. Onde isso tudo foi configurado? Em lugar algum!
Você pode configurar todos esses comportamentos: desde o nome dos parâmetros do formulário que vão popular o Produto passado como parâmetro até o nome do jsp para o qual você será dispatched. O importante é que para os casos mais comuns o VRaptor possui inúmeros defaults muito úteis. Neste artigo, você encontra um exemplo mais completo onde esses produtos são realmente gravados no banco de dados com apenas poucas linhas a mais.
E se você quer listar todos os produtos dessa List<Produto>? Basta colocar um c:forEach na variável ${produtos}, pois o VRaptor expõe todos os getters do seu componente para a view. Convenções em vez de configurações.

Listagem 2. Exemplo de AdicionaContato usando Struts Action 1.x

public class AdicionaContato extends Action {

public ActionForward execute(ActionMapping map, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {

Contato contato = ((ContatoForm) form).getContato();

ContatoDAO dao = new ContatoDAO(); // talvez alguns parâmetros aqui
dao.adiciona(contato);

return map.findForward("ok");

}
}


>>Desenvolvimento Web em alta velocidade

O desenvolvedor de software é cobrado constantemente para ser cada vez mais produtivo e repetitivo na construção de seus sistemas. Sendo assim, é necessário aprender novos frameworks, templates, bibliotecas e novas tecnologias para o desenvolvimento dos sistemas. A ferramenta JSenna foi elaborada para servir como uma plataforma de gerenciamento de metadados e geradores de aplicações para que, uma vez utilizada uma tecnologia/framework em um projeto, esta possa ser reutilizada de uma maneira mais produtiva e repetitiva em futuros projetos.

A produtividade em uma equipe de desenvolvimento de sistemas é fundamental para garantir o cumprimento de prazos e a manutenção de baixos custos dos projetos. Para a construção de aplicações baseadas na web, são utilizadas diversas tecnologias (HTML, JavaScript, XML, DHTML, Java, DOM, AJAX, XSL, SQL, etc.) que requerem um alto custo de treinamento de cada membro da equipe para desempenhar com qualidade suas tarefas. A ferramenta de software livre JSenna (licença LGPL), objeto de estudo deste artigo, gera aplicações web utilizando as melhores práticas e padrões definidos para diversas tecnologias, frameworks e plataformas, mesmo quando o desenvolvedor não as domina completamente. Dessa forma, a inclusão de um membro novo na equipe pode ser realizada de forma rápida e com baixo custo. O JSenna disponibiliza para o desenvolvedor um conjunto de recursos visuais e facilidades que tornam a criação de uma aplicação web uma tarefa extremamente rápida e intuitiva. A primeira seção deste artigo aborda a motivação que levou a criação dos projetos JSenna e JBanana, ambos projetos de software livre destinados a aumentar a velocidade e produtividade no desenvolvimento de aplicações web usando Java. A seção seguinte comenta e justifica a seleção das tecnologias empregadas para a construção da ferramenta JSenna. As próximas seções mostram uma visão geral da ferramenta JSenna, bem como seu funcionamento, seu uso e possíveis evoluções que o próprio desenvolvedor pode realizar na ferramenta; aspectos da ergonomia visual de uma aplicação web gerada através do JSenna; conclusões sobre o trabalho desenvolvido até este momento e as perspectivas futuras.

Motivação

No início do ano 2000, com a explosão da web, um grande número de empresas direcionou o desenvolvimento de seus sistemas para esse ambiente. Nessa época, os desenvolvedores e empresas sentiram uma drástica perda de produtividade ao trocarem as tradicionais ferramentas RAD pelas ferramentas de desenvolvimento para web. Mesmo imaturas, as ferramentas e o ambiente web já ofereciam uma melhor capacidade para resolver problemas complexos, oferecendo principalmente mais escalabilidade, muito mais portabilidade, mais organização do código resultando numa maior facilidade de manutenção dos mesmos. Porém, a produtividade do desenvolvimento era péssima. Não existia nenhuma ferramenta RAD ou CASE capaz de, com cliques de mouse ou no famoso estilo “CCNF”, construir sistemas de maneira rápida e eficiente. Nossa equipe de desenvolvimento, naquela época, cresceu de apenas três desenvolvedores para mais de 30 em menos de três meses devido a demanda por sistemas web que, no nosso caso, eram escritos em Java. O mundo web estava explodindo, mas tudo ainda era muito recente. A tecnologia Java tinha sido lançada somente em 1995/1996 enquanto que os primeiros servidores de aplicações Java para web começaram a ser usados em 1999.

Como não existia uma ferramenta que padronizasse e facilitasse todo o desenvolvimento, resolvemos nesse momento criar uma maneira de agilizar o processo de construção de software em Java voltado para a web. Foi aí que nasceu o projeto de software livre chamado JBanana. Resolvemos em um primeiro momento criar bibliotecas Java que padronizassem o desenvolvimento, fazendo com que os desenvolvedores criassem projetos web sempre de maneira semelhante. Também identificamos tarefas e algoritmos recorrentes entre os diversos sistemas implementados pela equipe que poderiam ser componentizados e reutilizados. Para isso, criamos bibliotecas Java que implementavam entre outras coisas o padrão de projeto MVC. A mais famosa destas bibliotecas foi o Framework JBanana Controller e foi por causa dele que o projeto foi batizado de Projeto JBanana. Várias bibliotecas Java com inúmeras funcionalidades foram implementadas dentro do projeto JBanana desde sua criação em 2000/2001. Hoje, no Projeto JBanana existem três frameworks diferentes implementando todo o modelo MVC proposto pela literatura como padrão para desenvolvimento web. Estes frameworks também implementam vários outros Design Patterns. Porém, toda essa “tecnologia” desenvolvida dentro do projeto JBanana era voltada para os desenvolvedores Java, pois exigia que estes adquirissem um alto conhecimento técnico para utilizar corretamente essas bibliotecas. Para minimizar este problema, foi construída uma ferramenta de desenvolvimento e geração de código, o JSenna.

Percebemos, em 2004, que existiam várias soluções “casadas” que facilitavam o desenvolvimento web. Uma solução casada, por exemplo, pode ser identificada no dueto das ferramentas IReport e o framework JasperReport, ambos usados para criação de relatórios usando a tecnologia Java. Observando-se a ferramenta IReport e o framework JasperReport, pode-se notar que elas funcionam de forma integrada, mesmo sendo projetos de software livre de diferentes autores (um é francês enquanto o outro é italiano). O JasperReports é uma biblioteca Java parametrizada através de arquivos XMLs que permite ao desenvolvedor gerar relatórios em diversos formatos, sem nenhuma codificação, desde que o desenvolvedor saiba como escrever e configurar corretamente os arquivos XMLs. O IReports nasceu para suprir essa deficiência do JasperReports e simplificar a vida do desenvolvedor que queria “desenhar” o relatório de forma visual e não somente escrever um arquivo XML. O IReports é esta ferramenta visual com a qual pessoas que não dominam totalmente a tecnologia Java, podem com alguns cliques de mouse, desenhar os relatórios, e automaticamente a ferramenta IReports pode gerar os arquivos XMLs de configuração do JasperReports. Notamos então que poderíamos usar a mesma estratégia em nossos frameworks Java que já eram todos parametrizáveis e configurados através de arquivos XML. Sendo assim, em 2004, resolvemos desenvolver a primeira versão de uma ferramenta visual, na qual o desenvolvedor não necessitasse mais codificar em Java para usar as bibliotecas do projeto JBanana e, assim, simplificar o desenvolvimento de aplicações web. Através dessa ferramenta, com cliques de mouse, drag and drop, menus e da configuração de uma paleta de propriedades, o desenvolvedor poderia configurar graficamente todo o seu sistema, e a ferramenta gráfica seria capaz de gerar uma aplicação Web usando todas as bibliotecas Java preexistentes. Foi nesse momento que nasceu o projeto JSenna, um projeto de software livre disponibilizado no site do SourceForge , atualmente maior repositório de software livre do mundo. O JSenna aumenta o nível de abstração e assim ao invés de codificar, o desenvolvedor pode descrever o sistema identificando as telas, os campos e tipos de dados, bem como toda a navegação entre as telas. Ele informa tudo isso em uma interface gráfica bastante intuitiva. Dessa maneira, protótipos do sistema são gerados rapidamente facilitando a validação dos requisitos com o cliente e permitindo que mesmo desenvolvedores sem muita expertise na tecnologia possam criar aplicações web voltadas para bancos de dados relacionais. Hoje, o JSenna encontra-se na versão 2 e foi totalmente remodelado e transformado em um plug-in do Eclipse. Ele estrapolou os limites dos três frameworks iniciais e também está gerando código para outros frameworks, como hibernate, jasperreports, BIRT, dentre outros. Mais do que isso, ele está sendo usado até mesmo em outras plataformas como .Net, Mono, indo além até mesmo do próprio Java.

Selecionando uma plataforma para o JSenna

A comunidade Eclipse é uma comunidade aberta cujos projetos são focados em prover uma plataforma de desenvolvimento independentemente de fabricante e frameworks de aplicações para construção de software. Dentre os produtos mais conhecidos desta comunidade, está o Eclipse IDE. O Eclipse IDE é uma ferramenta gráfica de arquitetura de plug-ins. Quando você faz download do Eclipse IDE, vários plug-ins já podem estar instalados. Por exemplo, para o desenvolvimento de soluções Java, o Eclipse pode vir previamente configurado com plug-ins para codificação, compilação e debug Java. Porém, existem inúmeros outros plug-ins no próprio site do Eclipse, ou mesmo em sites especializados, que permitem que o Eclipse IDE seja usado como uma ferramenta de desenvolvimento C, C++, C#, JavaScript, Cobol, HTML e muitas outras linguagens, com acesso a banco de dados e tudo mais que o desenvolvedor necessita para construir suas aplicações web ou desktop de maneira centralizada. Talvez seja por isso que essa IDE foi largamente adotada pelos desenvolvedores sendo hoje a ferramenta de software livre mais usada pela comunidade Java, competindo e ganhando a preferência da maioria, mesmo se comparada com as IDEs comerciais. Essa foi também uma das razões que nos levou a adotar o Eclipse como Plataforma de desenvolvimento para a segunda versão do JSenna. Para construir Plug-Ins para o Eclipse, você deve usar uma biblioteca gráfica conhecida como SWT. Apesar da SWT ser muito performática e ter um excelente acabamento visual, ela não possui um nível de abstração tão grande quanto a tradicional biblioteca Swing disponível na JRE do Java, que é normalmente utilizada na construção das demais IDEs Java. Existem algumas outras bibliotecas complementares como a JFaces, que melhoram a abstração da SWT, mas ainda assim dá muito trabalho codificar manualmente um plug-in para o Eclipse. Em suma, você tem que escrever muito código. Percebemos que isso dificultaria muito a manutenção e evolução do JSenna e então decidimos utilizar outros frameworks do próprio Eclipse para gerar grande parte do código do plug-in JSenna. A solução encontrada foi usar o framework EMF - Eclipse Modeling Framework. O EMF é um framework de modelagem e geração de código que facilita justamente a construção de ferramentas e aplicações baseadas em um modelo de dados estruturado.

Dentro do próprio Eclipse, começamos a construir o Plug-In JSenna. Definimos quais as informações que uma aplicação Web necessitaria serem coletadas pelo desenvolvedor junto ao cliente. Estruturamos e modelamos essas informações em estruturas de dados que foram definidas através de arquivos XML-Schemas (XSD ). Um exemplo da modelagem de informações estruturadas pode ser visto na figura 1.

Figura 1. Definição dos esquemas XMLs (XSD) representando como a informação deve ser coletada.

Graficamente, desenhamos e validamos estas estruturas de dados e o próprio Eclipse transformou-as, na medida em que construíamos os diagramas, em arquivos XML-Schemas. Com base nestes arquivos XSDs e usando o framework EMF do Eclipse, o Eclipse IDE gerou todas as estruturas de dados previamente definidas, criando todos os objetos e seus relacionamentos bem como o mecanismo de persistência dos dados em arquivos XML. O Eclipse também gera automaticamente vários plug-ins para visualizar, criar e editar estas estruturas de dados. Tudo através de wizards com muita produtividade. Dessa forma, se no futuro, o desenvolvedor decidir coletar informações adicionais para o seu projeto web, basta evoluir o esquema de dados (XSD) e regerar o plugin do JSenna. Isso é, grande parte das telas do JSenna são geradas automaticamente através da definição de arquivos XSDs com a ajuda do framework EMF. Com essa estratégia, a própria evolução do JSenna é realizada através dos wizards EMF do Eclipse, facilitando em muito a manutenção e evolução da ferramenta. Esses foram os motivos que nos levaram a adotar o Eclipse IDE e o EMF como plataforma core de desenvolvimento do JSenna.

 

Leia o artigo completo na revista MUNDOJAVA, já nas bancas!


 




 
© 2003 - MundoJava - Todos os direitos reservados <design: www.id-art.com.br >