Migração de Aplicações Cobol para Web
Migration of Cobol Applications for Web
Luiz Sérgio Araújo Morais - netmoraisap@gmail.com
Este documento contêm:
Resumo da descrição e das caracteristicas da metolodogia.
Características gerais e sequência de atividades.
Especificação das tecnologias usadas.
Manutenção do Sistema.
Considerações sobre a Metodologia.
Requisitos do sistema.
Lista de itens que compõem a solução.
Instalando, Compilando, Configurando e Executando.
Esta Solução tem como objetivo mostrar que é possível através da padronização no Desenvolvimento de Sistemas Cobol e com sua subsequente migração para o ambiente Web, ter acesso às novas tecnologias inerentes e diminuir significativamente os custos no desenvolvimento e manutenção desses produtos. É uma metodologia que combina um conjunto de técnicas conhecidas para "Ensinar" os programas Cobol a "Escrever", automaticamente e em tempo real, páginas na Web a partir de um protocolo pré-estabelecido. Para atingir os objetivos propostos, será apresentado uma aplicação simples para demonstração, inicialmente no modo Caractére e posteriormente migrada para o ambiente Web, utilizando recursos Cobol.
A continuação será dividida em quatro fases principais, como mostrado na Tabela 1 abaixo:
Tabela 1 - Sequência de atividades
Como mostrado na Tabela 1, será discutido primeiro, de uma forma geral, os papéis dentro da solução proposta representada pelos recursos básicos utilizados para a sua execução, ou seja, o Cobol, Http, Html, Cgi, Css e Java Script.
Numa segunda fase, será apresentada uma aplicação simples de demonstração, baseada em caractére, contendo apenas algumas opções, contendo apenas algumas opções, será um modelo com condições operacionais, produzindo as condições básicas para que o usuário possa interagir com o sistema.
Na terceira fase, será apresentada a migração da aplicação para a Web, onde se pode observar os benefícios da metodologia, no que diz respeito ao desenvolvimento, bem como a percepção da redução de custos nesta fase. Neste ponto, será demonstrado o mecanismo de acesso que efetivamente permite a disponibilização de páginas na Web, e a visualização da geração automática de interface de usuário, ou seja, a produção dinâmica de páginas, as quais, após sua utilização são totalmente descartadas, sendo necessárias apenas no momento da comunicação do usuário com o sistema.
Na quarta etapa, simulando o processo de manutenção da interface, causado por um novo atributo inserido em um elemento da aplicação, será apresentada uma alteração no sistema de demonstração, para que se possa ter idéia do comportamento da metodologia frente a uma nova realidade.
O Cobol será usado para que possamos escrever uma aplicação simples de demonstração, e nesta, todos os serviços necessários, tais como lidar com a implementação da interface, tanto em Caratére como no ambiente Web. Quanto ao Cgi, por ser o meio escolhido para dar suporte ao tráfego de páginas entre o servidor Web eo navegador do Usuário. A Css, que cuidará dos aspectos de apresentação e posicionamento dos elementos das páginas e finalmente o JavaScript que carregado no programa navegador do usuário cuidará da lógica da edição da página no ambiente Web. Em adição, o servidor de páginas representada pelo Apache. Naturalmente para quase toda a tecnologia proposta existem outras equivalentes e até mais atuais, como por exemplo, Php, Java, Asp, etc, ou usando as muitas das novas características que estão atualmente disponíveis na linguagem Cobol. Tudo depende da relação custo-benefício a ser adotado na solução.
Para exemplificar o que foi dito até o momento, a seguir apresenta-se um modelo de aplicação com condições operacionais que possui apenas algumas opções, compondo os requisitos básicos para que o usuário possa interagir com o sistema, portanto, não tem nenhuma utilização prática, exceto o objetivo de demonstração. Incorpora o conceito de desenvolvimento em três camadas, sendo que a camada de interface possui um elemento comum para todos os módulos.
O sistema, “Controle de Clientes” contém os módulos: “Cadastro de Clientes”, “Atendimento a Clientes” e “Parametros do Sistema”. Os módulos são executados a partir de um menu de opções também chamado de “Controle de Clientes” com as seguintes informações básicas para cada módulo, conforme apresentado na tabela 2:
Tabela 2 – Tabelas do sistema
Clientes
Telefone
Nome
Endereco
Servico
Data
Telefone
Ocorrencia
Parametros
None
Cnpj
Endereco
Com o intuito de materializar o proposto, foi criado um protótipo, baseado em um conjunto de programas em Cobol, agrupados pelos seguintes prefixos: app-*, elementos da aplicação; srv-*, serviços para a aplicação, man-*, manutenção na aplicação, e tmp-*, informações temporárias, com distribuição dos módulos em camadas, conforme apresentado na tabela 3:
Tabela 3 – Distribuição dos módulos em camadas
A terceira camada, a interface, é comum para todos os módulos e é executada por um serviço, nomeado como "srv-interface.cbl/int", conforme apresentado na Figura 1. Observa-se neste esquema a utilização da terceira camada, a de interface, e adicionalmente a visão de que a esta se desmembra em outro conjunto, que recebe solicitações das aplicações e as trata de acordo com cada ambiente. Fica claro que o processo é totalmente transparente para a aplicação, esta apenas solicita à interface, por meio de um protocolo pré-estabelecido, o que quer, não é de sua responsabilidade o como deve ser feito.
Figura 1 - Interface comum para os módulos
Visualizando a distribuição de camadas do ponto de vista de um módulo e utilizando, por exemplo, o "Cadastro de Clientes", observa-se as três camadas conforme apresentado na Figura 2:
Figura 2 - Camadas para o "Cadastro de Clientes"
Para detalhes sobre os Módulos e a Interface a Caractére apresentados, veja o código fonte fornecido nos arquivos app-cadastro-cliente.cbl, app-cadastro-cliente-dado.cpy, app-cadastro-cliente-negocio.cpy, e srv-interface-txt.cbl. Abaixo, a Figura 3 ilustra a aplicação deste modelo em um terminal:
Figura 3 - Modulo app-cadastro-cliente.int e srv-interface-txt.int - execução
Neste momento observa-se a interface “srv-interface-txt.int” executando a edição com base nas informações previamente disponibilizadas pela aplicação. Nela notam-se os títulos, nomes de campo e conteúdos informados. Além disso, o prompt de campo “Telefone” em uma pequena relação de teclas de ação. Embora simples, já se percebe aqui, que foi estabelecido um padrão de desenvolvimento, com regras bem definidas, que se forem aceitas e atenderem as necessidades do negócio, podem ser utilizadas para outras aplicações. Naturalmente nenhum negócio no mundo real aceita requisitos tão primários, porém o princípio será basicamente o mesmo, variando apenas o grau de complexidade das suas especificações.
Migração para Web e Mecanismo de Acesso:
Para migrar para ambiente Web a solução passa pela implementação na camada de interface, dando a ela condições para executar no novo ambiente. Para isso, inicia-se alterando o esquema da interface comum, conforme apresentado na Figura 4:
Figura 4 - Interface Comum com módulo Web
Com o aparecimento de módulo “srv-interface-htm.cbl”, torna-se necessária a alteração do módulo "srv-interface.cbl" que agora se apresenta como a Figura 5. É possível agora notar a seleção do tipo de interface que deve ser usada em função da verificação da variável de ambiente Cgi “GATEWAY_INTERFACE”, e de acordo com a sua existência, executar o modelo “htm” ou o “txt”.
Figura 5 - Módulo "srv-interface.cbl"
Veja então veja o módulo "srv-interface-htm.cbl", que gera uma interface em Html para ser executada pelo navegador. Para detalhes sobre a Interface Web apresentada, veja o código fonte nos arquivos srv-interface.cbl e srv-interface-htm.cbl. Na Figura 6, um trecho do código da página temporária, resultante da implementação do modelo de interface em Html com a sua saída redirecionada para um arquivo.
Figura 6 - Arquivo de envio gerado por "srv-interface-htm.cbl/int"
Do ponto de vista da interface, as informações estão prontas para serem usadas. Mas falta o lado do cliente. É necessário criar um mecanismo que disponibilize o acesso a estas páginas em um navegador e retorne as informações à aplicação. É isto que será apresentado a seguir.
Para permitir um mecanismo de acesso à interface gerada, será utilizado um conjunto de componentes, que por meio de sua integração permitem o envio de páginas e o recebimento de formulários conforme o que segue:
Descrição dos componentes:
Figura 7 - Componentes do mecanismo de acesso
Os componentes apresentados na Figura 7 e descritos a seguir podem estar instalados em uma mesma máquina ou em máquinas distintas, dependendo basicamente de questões, como por exemplo, disponibilidade de recursos, eficiência e regras de segurança.
1. Navegador do usuário - Firefox : Programa navegador Web instalado na estação do usuário do sistema. Por meio deste recurso o usuário seleciona a aplicação que pretende usar, solicita a sua inicialização, o seu processamento e encerramento; fases estas que serão explicadas no módulo cliente de aplicação.
2. Servidor Web - Apache : Servidor de páginas Web que possa executar programas Cgi. Sua função é estabelecer a comunicação entre o Navegador do Usuário e o Cliente da Aplicação, "srv-cliente.cbl/int", recebendo e enviando requisições nos dois sentidos.
3. Servidor de Aplicações - srv-servidor.cbl/int : Trabalha em um único sentido. Executa continuamente, verificando de tempos em tempos, eventuais solicitações. Recebe requisições, na fase de inicialização do Cliente da Aplicação, solicitando o início de uma determinada aplicação, momento em que a executa em segundo plano e retorna à sua função normal de verificação de novas solicitações.
4. Cliente da Aplicação - srv-cliente.cbl/int : Trabalha em dois sentidos. Executa a comunicação entre o Servidor Web e a Aplicação propriamente dita. Deve ser, segundo o modelo proposto, uma aplicação Cgi, que é disparada pelo Servidor Web. A sua execução é caracterizada por três momentos distintos. O primeiro momento, identificado como inicialização, no qual solicita ao Servidor de Aplicações o início da aplicação escolhida. Num segundo, identificado como processamento, envia os formulários recebidos do Servidor Web para a Aplicação e aguarda novas páginas geradas para serem disponibilizadas ao Servidor Web, e após isso encerra. A rotina de processamento permanece sendo re-executada continuamente até que o usuário solicite sua finalização. Neste ponto ocorre o terceiro momento, o de encerramento, quando o Cliente da Aplicação envia a ela um formulário solicitando o seu término.
5. Aplicação Selecionada - app-controle-cliente.cbl/int - srv-interface-htm.cbl/int : Este módulo também trabalha nos dois sentidos. Pode ser materializado por qualquer aplicação que tenha sido selecionada pelo usuário, como por exemplo, um "Controle de Clientes", materializado por "app-controle-cliente.cbl/int" e interfaceado por "srv-interface-htm.cbl/int" com a capacidade de detectar a condição de estar sendo executada num ambiente Web e, consequentemente, se comunicar com o Cliente da Aplicação enviando páginas e recebendo formulários. O funcionamento da interface é totalmente transparente à aplicação propriamente dita, ou seja. A interface chamada pela Aplicação detecta o ambiente Web e gera as páginas que serão lidas pelo Cliente da Aplicação, disponibilizando ao Servidor Web, aguarda a interação do usuário, após isso lê os formulários retornados e permanece neste ciclo até que lhe seja solicitado o encerramento.
Para mais detalhes sobre o Servidor e Cliente da Aplicação, descritos no Mecanismo de Acesso, veja os códigos fonte apresentados nos arquivos srv-servidor.cbl e srv-cliente.cbl, respectivamente.
Para colocar efetivamente em funcionamento a aplicação acesse a pasta cgi onde se encontram os Programas Cobol e em seguida solicite a inicialização do servidor com: “$ srv-servidor.sh -i”, e "$ srv-servidor.sh -s" conforme apresentado na figura 8:
Figura 8 - Módulo "srv-servidor.int" - inicialização
Sua execução, comparando os modos Caractére e Web, após ter informado no endereço do navegador, por exemplo:
"http://localhost/cgi-bin/mfo/app-controle-cliente" pode ser visto nas Figuras 9 a 12.
Figura 9 - Controle de Clientes - Caractére
Figura 10 - Controle de Clientes - Web
Figura 11 - Cadastro de Clientes - Caractére
Figura 12 - Cadastro de Clientes - Web
Após a implementação, observa-se a interface "interface-srv-htm.int" em conjunto com "srv-cliente.int", por meio do mecanismo de acesso, executar "app-cadastro-cliente.int," ou o "Cadastro de Clientes". Neste novo modo é possível observar todas as características anteriores portadas para o ambiente Web e totalmente transparente para a aplicação. É importante notar que devido à Metodologia utilizada, não foi necessário qualquer alteração na Aplicação. Do ponto de vista da Aplicação, foram mantidas todas as mesmas regras de Acesso à Dados, Negócio e Interface. A Interface por sua vez, detecta o novo ambiente e "cria" os novos meios para sua operação.
Manutenção do Sistema:
Para exemplificar uma possível manutenção e seu impacto na atualização da aplicação, supõe-se aqui que seja necessária a inclusão de um novo atributo na estrutura de Clientes, a informação de seu E-mail, conforme exibido na tabela 4.
Tabela 4 - Tabela Clientes
Clientes - manutenção
Para implementação desta alteração na aplicação, basicamente altera-se as camadas do sistema, informando os novos requisitos e ao ser fazer isto, têm-se a oportunidade de se observar o grau de esforço necessário para sua efetivação, principalmente no que diz respeito à interface do usuário. Isto pode ser feito, tanto no modo Caractére como no Web, executando a opção "Inclui E-mail em Clientes", conforme apresentado no modo Web mode, nas Figuras 13 a 17 :
Figura 13 - Inclui E-mail em Clientes - Web
Inicialmente altera-se a camada de acesso a dados, informado a atributo email em "app-cadastro-cliente-dado.cpy". A seguir a camada relativa a negócio, que retorna o valor aditado e onde se inclui o teste do novo conteúdo do e-mail, no módulo "app-cadastro-cliente-negocio.cpy" conforme apresentado na Figura 14 :
Figura 14 - Alterando os Módulos de Dados e Negócio - Web
Continuando, na chamada da camada de interface, em "app-cadastro-cliente.cbl" acrescenta-se as referencias necessárias para a apresentação do e-mail, incluindo as informações para nome, tamanho, valor e prompt, conforme a Figura 15:
Figura 15 - Alterando a Chamada ao Módulo de Interface - Web
E finalmente, compila-se apenas a aplicação, porque a Interface nos dois modos, tanto no Caractére como no Web, reconhece automaticamente a alteração efetuada, como pode ser visto na Figura 16.
Figura 16 - Compilando somente a aplicação "app-cadastro-cliente.cbl" - Web
Executando a aplicação "Cadastro de Clientes", Figura 17, onde se apresenta o novo atributo, E-mail:
Figura 17 - Executando a aplicação "Cadastro de Clientes" com o atributo E-mail - Web
Considerações sobre a Metodologia:
A adoção de padrões no Desenvolvimento de Sistemas com recursos Cobol, tais como a utilização de camadas, os métodos baseados em interface comum e procedimentos para a geração automática, trazem resultados significativos, não só na fase de desenvolvimento, mas também na manutenção, além de proporcionar um fator facilitador na sua migração para o ambiente Web. Devido as suas características, permite de maneira mais simples o processo iterativo de desenvolvimento, um grande volume de testes, a criação de uma cultura corporativa na operação da interface, reduzindo custos de treinamento e permitindo uma maior abertura para se adaptar às novas tecnologias que estão presentes. A metodologia utilizada na solução permite escalabilidade, tais como o uso de novos recursos Cobol e outros relacionados ao ambiente Web. É possível para empresas de todos os portes, desde pequenas a grandes, e pode ser adotado na sua totalidade, em parte ou em combinação com outras novas tecnologias existentes.
Requisitos do sistema:
Para a sua instalação e implementação não é necessário equipamento de hardware especial. Só que é um equipamento que suporte a instalação de qualquer distribuição Linux Servidor ou Windows Server 2003 ou superior. Este equipamento será usado como um servidor, mas também pode ser usado como uma estação de trabalho. Nessa distribuição deve ser instalado:
Linux:
-O ambiente gráfico do Linux com o Kde ou Gnome.
-Apache, com a pasta liberada para executar Cgi.
-O prompt do Bash, para iniciar programas Cobol.
-Micro Focus Cobol 4.0 or superior, com Runtime and Compilador.
-Navegador Web Mozilla Firefox 3.0 ou superior.
Windows:
-Apache, com a pasta liberada para executar Cgi.
-O prompt do Bash para Windows, para iniciar programas Cobol, "bash-win.zip".
-Micro Focus Cobol Net Express 3.1 ou superior, com Runtime and Compilador.
-Navegador Web Mozilla Firefox 3.0, Internet Explorer 6.0 ou superior.
Lista de itens:
Em seguida, a lista de arquivos que compõem o arquivo compactado "mfo.tar.gz":
Tabela 5 - Descrição dos arquivos
Instalando, Compilando, Configurando e Executando:
Para detalhes de instalação, compilação, configuração e execução nos modos Caractére e Web, veja o arquivo "app-antes-de-iniciar.txt", compactado no arquivo "mfo.tar.gz". No caso do Bash para Windows, veja "instalar.txt" em "bash-win.zip".
Luiz Sérgio Araújo Morais - netmorais@ig.com.br