Artigo no estilo: Curso

De que se trata o artigo:

Apresentação do jCompany Full-Stack Framework. O jCompany Free, como é chamado, faz a integração em nível de “Caso de Uso”, reutilizando integradores de mais baixo nível para prover e gerenciar um ambiente com alto índice de reuso, típico do mundo Java EE Open-Source.


Para que serve:

Desenvolver aplicações corporativas Java EE 5 para Web com apoio do jCompany Free GPLv3, framework integrador que especializa 20 frameworks líderes de mercado, definindo uma arquitetura de base reutilizável que provê alta qualidade e produtividade.


Em que situação o tema é útil:

É muito complicado para as empresas controlarem a arquitetura de seus vários sistemas sem possuírem uma definição arquitetural coorporativa. Muitas tentam desenvolver sua própria plataforma de desenvolvimento e não obtém o sucesso desejado por essa tarefa estar fora do seu core-business.

Explicando Padrões de Projeto – Parte 2:

Se você trabalha em desenvolvimento corporativo envolvendo aplicações em grande quantidade e com largo volume de documentos (agregações de classes a serem persistidas), montar uma arquitetura de base Open-Source do zero é um grande risco. Construir padrões de alto nível, que exijam pouca programação, e evoluir dezenas de produtos de base internamente são em grande parte atividades fora do core-business da maior parte das organizações, mesmo com integradores de mais baixo nível, tais como Spring e JBoss Seam. Este trabalho de base com desvio de foco costuma culminar em soluções de arquitetura “artesanais”, com variabilidade indesejável entre diversas equipes, isso quando possuem uma gerência de configuração! Pergunte-se: qual a versão e release atual da arquitetura (Open-Source) do sistema A ou B? Se você não tiver um único número para oferecer, possivelmente enfrentará dificuldades no futuro.

O jCompany Full-Stack Framework – Community & International Version, chamado resumidamente de jCompany Free, é uma versão gratuita e de código aberto (licenciada sob GPLv3) da parte framework do jCompany Developer Suite 5.1, suíte de desenvolvimento mantida pela Powerlogic SA.

O jCompany Free foi introduzido em dois artigos anteriores, publicados nas Edições 63 e 67. No primeiro discutimos fundamentos, instalação e configuração (dois itens importantes por se tratar de um framework de integração de alto nível) e fizemos o desenvolvimento de uma aplicação básica introduzindo e reutilizando o conceito de Caso de Uso Padrão “Manter Agregação Mestre/Detalhe”, para manutenção de Funcionários e seus Dependentes.

No segundo artigo apresentamos outros Casos de Uso Padrões disponíveis para reuso imediato. Implementamos uma manutenção recursiva e com visão hierárquica (Treeview) para Departamentos; fizemos uma alteração no cadastro de Funcionários para vincular Departamentos através de diálogo de seleção; implementamos exclusão lógica e regras de negócio via “programação por exceção” e ainda discutimos conceitos como caching em escopo de aplicação e Inversão de Controle por convenção de nomenclatura (Pattern Based Auto-Wiring IoC).

Neste terceiro e último artigo da série, vamos apresentar padrões de programação úteis para cenários onde não se torna possível a “programação por exceção”, ou seja, a “interceptação simples de algoritmos padrões do framework”, como fizemos com Template Method, no último artigo.

Em seguida, iremos apresentar os padrões ricos de modularização do jCompany: Módulos de Negócio e Técnicos, Camada Bridge, Plugins, etc. E, finalmente, implementaremos um primeiro jCompany Plugin como exemplo de extensão com baixíssimo acoplamento, via Design Pattern Observer já utilizando o emergente padrão Java EE 6 Web-Beans.

Na verdade, o tipo de programação jCompany que veremos neste artigo é o mais próximo do comumente encontrado no mercado, onde o desenvolvedor se responsabiliza pela seqüência em todas as camadas MVC: codifica classe de controle, contrato e implementação de fachada, classes de negócio (Application Services, Business Objects ou Managers), DAOs e Design Patterns de Criação (Factory, Service Locator/Business Delegate, etc.) para instanciar e destruir a parcela de classes não gerenciada pelo contêiner.

Programando MVC sem IoC

Nosso tutorial visa produzir uma nova funcionalidade no Caso de Uso Padrão “Manter Agregação Simples” (CRUD). Desenvolvemos este caso de uso no artigo anterior, para manter a entidade Departamento. Quem não acompanhou ou não possui disponível esta aplicação pode fazer download a partir do site da Java Magazine ou do jCompany Free.

A funcionalidade que escolhemos é denominada “Excluir com Remanejamento”. Ela prevê um novo botão na barra de ações que aciona o remanejamento de todos os funcionários contidos no departamento correntemente editado para o departamento imediatamente superior, antes de sua exclusão. Como queremos que ela conviva com a exclusão existente (que continuará a ser uma opção alternativa para o usuário) não é o caso de somente alterarmos o cenário de exclusão com “programação por exceção” – e, portanto, iremos programar um novo cenário do zero*. Lembrando do último artigo que o botão padrão faz uma “exclusão lógica” que tornava um Departamento “Inativo” – mas não se importava com os funcionários nele lotados.

* Importante: A programação deste caso deve se restringir aos problemas adequados. Alguns desenvolvedores iniciando no jCompany tendem a se manter em uma “zona de conforto” programando fluxos de controle excessivos como fariam utilizando integradores de mais baixo nível como JBoss Seam ou Spring. Com a experiência percebem que o modelo IoC/DI de alto nível do jCompany, conforme vimos no último artigo, baseado na programação declarativa e “por exceção” – não somente é mais produtivo como garante maior padronização, diminui as chances de erro e de problemas diversos como performance e segurança.

Passo 1: Adicionar botão na barra de ações para o Caso de Uso “Departamento”

O Caso de Uso Padrão reutilizado para Departamento provê as ações básicas para manutenção de ciclo de vida CRUD (“Create, Retrieve, Update e Delete”), além da funções de “Clonar”, “Painel de Impressão”, “Ajuda” e formulário auxiliar para “pesquisa e seleção”, fornecidos de forma genérica pelo framework.

O jCompany Free leva a generalização ao extremo, fornecendo inclusive botões de ação padrões na camada visão. Fornece ainda “pontos de extensão” padrões também em JSPs, como o arquivo “/plc/jsps/geralAcoesComplemento.jsp”, página vazia pré-configurada na criação do projeto, representando um espaço padrão da arquitetura para conter novos botões de ação, como o que queremos. Estes botões aparecem ao lado dos botões genéricos do jCompany e de forma indistinta para o usuário, graças à arquitetura de gestão de peles e leiautes.

Vamos alterar o arquivo “/plc/jsps/geralAcoesComplemento.jsp” no projeto “javamagazine” para adicionar o botão desejado na barra de ações. A Listagem 1 apresenta o código fonte necessário.

Listagem 1. Trecho de código para inserção do botão na barra de ações


  <%@ taglib uri="/WEB-INF/plcf.tld" prefix="plcf"%> 
  <plcf:buttonAction id="botaoExcluirRemanejamento" actionPlc="excluirComRemanejamento" 
    partialSubmit="#{requestScope.ajaxUsa}" label="jcompany.evt.excluirComRemanejamento" 
    buttonArrayID="EXCLUIR_REMANEJAMENTO" 
    blocking="true"
    rendered="#{plcEntity.class eq 'class com.powerlogic.javamagazine.entity.Departamento' 
     and  plcEntity.id != null and not empty plcEntity.departamentoPai}" />

Note que a barra de ações é global, mas o botão somente irá aparecer no formulário quando a entidade principal for Departamento, o identificador da entidade não for nulo (há uma instância sendo editada) e o departamento contiver um nível superior para realocarmos os funcionários para ele.

Lembre-se de adicionar a chave de internacionalização jcompany.evt.excluirComRemanejamento ao arquivo ApplicationResources.properties com o valor “Excluir com Remanejamento”.

Passo 2: Criar classe DepartamentoAction

Como estamos criando um botão específico, será necessário um Backing Bean (Action) para receber a ação. Tipicamente um método de controle dá prosseguimento ao cenário chamando uma fachada de negócio e, posteriormente, controlando o despacho do retorno para o usuário. Esta classe deverá possuir um método excluirComRemanejamento(), em conformidade com o valor de “actionPlc” que colocamos no código do botão.

Crie a classe DepartamentoAction no pacote com.javamagazine.control.jsf, estendendo de AppAction. A classe AppAction é uma classe de arquitetura vazia para conter possíveis programações genéricas de controle, para toda a aplicação. A ...

Quer ler esse conteúdo completo? Tenha acesso completo