DevSecOpsARTIGO

Implementar novos aplicativos no IBM PureSystems com plug-ins – Parte 01

A introdução do IBM PureSystems – um sistema em nuvem especialista, integrado e de nível corporativo que abrange aplicativos, serviços, hardware e até mesmo conhecimento (fornecido na forma de padrões de melhores práticas)  leva a computação em nuvem a novos patamares. Uma forma de preparar um aplicativo para aproveitar o IBM PureSystems é criar um plug-in, uma ponte entre o pacote de aplicativos e o sistema.

Nesta série de artigos de duas partes, os autores abrangem considerações de design, esforços de desenvolvimento e as lições aprendidas dos projetos. Este primeiro artigo descreve os esforços de desenvolvimento para ativar o SugarCRM, um aplicativo fornecedor de software independente, no IBM PureSystems. O SugarCRM é um aplicativo PHP que requer a pilha LAMP (Linux®, Apache, MySQL, PHP). LAMP não é suportado pelo IBM PureSystems simples de instalar, portanto, a equipe desenvolveu um novo tipo de padrão e um conjunto de plug-ins que oferecem suporte à modelagem, implementação e operação do aplicativo sobre a imagem base do Linux e IBM AIX. A Parte 2 abordará as lições aprendidas do projeto.

O IBM PureSystems gerencia todo o ciclo de vida de um aplicativo. Começamos adquirindo um entendimento profundo do SugarCRM ao consultar os especialistas no assunto do IBM PureSystems na IBM, realizando workshops com o ISV e fazendo experiências com o aplicativo. Também foi preciso considerar problemas de licenciamento, porque o software livre e o software de fornecedor estão envolvidos. Os bancos de dados suportados incluem o MySQL e o IBM DB2®, que são mais estratégicos para a IBM. O entendimento do cenário completo nos permite desenvolver a arquitetura dos plug-ins e definir como o IBM PureSystems oferece suporte a cada ciclo do SugarCRM.

Na modelagem do aplicativo, os plug-ins permitem que o usuário arraste e solte uma caixa do SugarCRM e se conecte a uma caixa do banco de dados, que pode ser o MySQL ou o DB2. O MySQL é modelado como um servidor existente, enquanto o DB2 pode ser um servidor novo ou existente.

Quando o usuário implementa o padrão do aplicativo SugarCRM na nuvem, os scripts de plug-ins automatizam a instalação e configuração de todos os middlewares e aplicativos. Os scripts interagem com o IBM PureSystems a fim de obter informações de implementação e fornecer atualização de status.

Depois que o aplicativo foi implementado, os plug-ins permitem que o usuário inicie e interrompa o serviço Apache e visualize os logs do SugarCRM.

Adquirimos uma experiência de valor do projeto ao entender não apenas o desenvolvimento do plug-in, mas também o processo de raciocínio ao ativar um aplicativo na nuvem. Durante o desenvolvimento, a equipe de desenvolvimento de plug-in do IBM PureSystems foi regularmente consultada a fim de obter sua orientação e fornecer feedback sobre o Kit de Desenvolvimento de Plug-in (PDK). Parte de nosso feedback resultou em novos itens de trabalho para a equipe de desenvolvimento e novas melhores práticas. Também consultamos a equipe do produto a fim de assegurar que o nosso design seja consistente com a direção estratégica da IBM.

Definindo o desafio

O SugarCRM é um ISV que fornece soluções para o gerenciamento de relacionamento com o cliente. Os pontos fortes da solução SugarCRM incluem uma experiência do usuário intuitiva e uma plataforma de software livre altamente flexível. A solução está disponível em quatro edições e pode ser implementada no site, hospedada pela empresa ou na nuvem.

O que é o SugarCRM

A solução SugarCRM é um aplicativo PHP que geralmente é executado em uma pilha LAMP (Linux, Apache, MySQL, PHP). O software de apoio adicional é usado para melhorar o desempenho, como o APC (Alternative PHP Cache), e para implementar a escalabilidade horizontal, memcache.

O suporte à pilha LAMP não é fornecido pelo IBM PureSystems como parte da configuração inicial. A equipe de laboratórios de nuvem desenvolveu o suporte necessário para executar o SugarCRM no IBM PureSystems.

Definir o cenário de negócios

A primeira etapa foi alinhar as metas de negócio e as soluções técnicas. Os seguintes cenários de negócios foram identificados para oferecer suporte à experiência de ponta a ponta, desde a ativação até a execução de um aplicativo, para um cliente do IBM PureSystems que deseja executar o aplicativo SugarCRM.

  • Ativar o SugarCRM e o software livre no IBM PureSystems;
  • Modelar e configurar aplicativos SugarCRM;
  • Implementar e executar o aplicativo SugarCRM na nuvem do IBM PureSystems;
  • Gerenciar o ciclo de vida das instâncias em execução do SugarCRM;
  • Suportar dois bancos de dados como o repositório de dados: MySQL e DB2.

Definir a arquitetura do plug-in

Para definir a arquitetura do plug-in, veja as topologias típicas do SugarCRM mais de perto, as considerações de design e os problemas de licenciamento que podem afetar o desenvolvimento da tecnologia.

SugarCRM como um aplicativo PHP

A pilha de software recomendada pelo ISV para o System x e System p é resumida na Tabela 1: 

System x System p
Red Hat Enterprise Linux 5 AIX 7.1
Apache 2.2 Apache 2.2
PHP 5.3 com extensões necessárias PHP 5.3 com extensões necessárias
APC 3.1 APC 3.1
MySQL 5.1 DB2 9.7

A equipe do SugarCRM indicou que a topologia típica é um servidor Apache único conectado a um servidor de banco de dados, conforme mostrado na Figura 1.

Menos comum é uma tecnologia de cluster que manipula um volume mais alto de usuários ampliando a escala do número de servidores Apache, conforme mostrado na Figura 2.

Nesse caso, o SugarCRM usa o memcache como o gerenciador de sessões e o nginx como o balanceador de carga. Como o aplicativo realiza o writeback no diretório local, no qual o Apache hospeda os arquivos e os dados do PHP, os vários servidores Apache devem compartilhar o mesmo diretório local; isso é realizado hospedando o diretório em um servidor NFS. O sistema de arquivo compartilhado também ajuda no upgrade para uma nova versão do SugarCRM, porque permite que todos os servidores sejam atualizados ao mesmo tempo.

Considerações de design

O principal conceito no IBM PureSystems é fornecer ao usuário uma visualização da nuvem centralizada no aplicativo, para que o usuário possa focar no aplicativo e ignorar a infraestrutura subjacente. O IBM PureSystems gerencia três aspectos de um aplicativo: modelagem, implementação e operação. Pode haver um vasto número de cenários envolvidos nesses três aspectos. Seguem as considerações utilizadas ao fazer nossas escolhas:

  • Embora o IBM PureSystems possa oferecer suporte a uma topologia em cluster para o SugarCRM aproveitando a política de ajuste de escala, o escopo do nosso projeto é limitado a uma topologia de servidor único;
  • Embora o MySQL seja usado com mais frequência para o banco de dados em implementações típicas, queremos focar no DB2 ao acomodar o MySQL. Isso foi feito permitindo que o usuário modele o DB2 como uma instância nova ou existente, mas o MySQL só é suportado como uma instância existente;
  • A pilha de software do Apache/PHP é uma plataforma comum para um servidor da web de software livre; portanto, uma nova coleção de plug-ins suportando essa pilha pode ser reutilizada na identificação de outros negócios. Outro pensamento inicial era modelar essa pilha como um componente independente e o SugarCRM como um componente separado vinculado a ele para nos permitir adicionar suporte de forma rápida para um novo aplicativo PHP. Tínhamos a preocupação de que esse padrão de aplicativo não se ajustasse bem na abordagem centralizada no aplicativo, porque expõe a pilha de software como parte da infraestrutura, portanto, decidimos modelar o aplicativo SugarCRM e toda a pilha de software de apoio como um componente único;
  • A configuração do SugarCRM é relativamente simples e envolve apenas um pequeno conjunto de parâmetros. Selecionamos um subconjunto de parâmetros para expor o componente SugarCRM;
  • O conjunto integral de parâmetros para configuração do banco de dados é muito mais significativo: expusemos apenas os parâmetros relevantes ao SugarCRM e configuramos os parâmetros restantes nos valores padrão. O conjunto de parâmetros é idêntico para o DB2 e MySQL, embora eles pertençam a componentes diferentes.

Problemas de licenciamento

Normalmente, os problemas de licenciamento não significam muito no design da tecnologia, mas como algumas cargas de trabalho de ISV podem exigir software não IBM, é necessário gerenciar o licenciamento de software e de middleware de forma correta. Decidimos sobre estas abordagens:

  • Empacotar o software nos plug-ins. Os binários do software ou o código fonte estão incluídos no arquivo zip do plug-in e são disponibilizados para uso quando o tipo de padrão e o plug-in são ativados no console administrativo do IBM PureSystems. Durante o processo de ativação do tipo de padrão, o administrador de nuvem revisa e aceita os contratos de licença de software. A abordagem de software empacotado torna o software altamente integrado com os processos de desenvolvimento e ativação do plug-in;
  • Permitir que o administrador de nuvem forneça os binários do software ou o código fonte durante a ativação do plug-in. Os plug-ins serão importados para o IBM PureSystems juntamente com o pacote de tipos de padrão e permanecerão no estado “desativado”. O administrador de nuvem reúne o software necessário seguindo procedimentos típicos de licenciamento e, em seguida, utiliza a opção de configuração de plug-ins individuais no console administrativo do IBM PureSystems. Como resultado, o plug-in é ativado e os arquivos do software são mantidos no armazém do IBM PureSystems. Nesse caso, o processo do contrato de licença de software é realizado fora do ambiente do IBM PureSystems;
  • Desenvolver os binários do software ou o código fonte na imagem do sistema operacional de base. Os contratos de licença devem ser aceitos pelo administrador de nuvem quando a máquina virtual é adicionada ao catálogo do IBM PureSystems. Como a mesma imagem do sistema operacional de base é compartilhada entre vários tipos de padrão e plug-ins, essa abordagem funciona melhor com um software genérico para todo o domínio do IBM PureSystems do que com um software específico ao plug-in.

O aplicativo SugarCRM depende de alguns softwares de terceiros e softwares livres, portanto, decidimos empacotar apenas os arquivos do SugarCRM em nossos plug-ins e utilizar binários do software e código fonte adicionais, da IBM e de software livre, como entrada do administrador de nuvem durante a ativação do plug-in.

Design e desenvolvimento

A ordem dessas subseções representa aproximadamente o fluxo de nossos processos de design e de implementação no desenvolvimento dos plug-ins do SugarCRM.

Design de Solução

A principal decisão do design de solução é identificar as funções e responsabilidades dos plug-ins. Consideramos especialmente duas abordagens:

  • A primeira é desenvolver um conjunto de plug-ins genéricos para oferecer suporte ao Apache, PHP e conectividade do banco de dados, e aplicar o SugarCRM como uma entrada para os plug-ins. Ela é mais flexível para desenvolver e fornecer recursos PHP de uso realmente geral que podem ser estendidos para outros aplicativos PHP de maneira semelhante;
  • A segunda é desenvolver e implementar plug-ins PHP e do banco de dados específicos ao SugarCRM a fim de assegurar aplicativos do SugarCRM totalmente funcionais. O design centralizado no aplicativo se ajusta bem ao conceito de aplicativo virtual e facilita a definição da propriedade e das responsabilidades dos plug-ins entre todas as partes envolvidas.

Dada a natureza altamente dinâmica da configuração do PHP, optamos pelo design centralizado no aplicativo (ou seja, desenvolvido para o SugarCRM) como a solução de ativação imediata; nosso objetivo era revisitar a abordagem mais genérica e reutilizável, implementando o código modular. Com base nas diretrizes de interação do plug-in do IBM PureSystems no Guia de Desenvolvimento do Plug-in, nossos três plug-ins foram desenvolvidos para ter responsabilidades distintas.

  • Plug-in do SugarCRM
    • Definir e coletar a entrada do usuário para a instalação do SugarCRM
    • Instalar os pacotes necessários do sistema operacional
    • Instalar e configurar o software necessário, incluindo Apache, PHP e APC
    • Copiar e preparar o pacote SugarCRM Enterprise
    • Fornecer monitoramento de log do SugarCRM
    • Suportar operações básicas de tempo de execução
  • Plug-in de link do DB2
    • Definir e coletar a entrada do usuário para uma instância existente do DB2
    • Suportar uma nova instância do DB2 no mesmo padrão de aplicativo do SugarCRM
    • Instalar e configurar o software necessário, incluindo o cliente de servidor de dados da IBM e a extensão PHP do IBM DB2
    • Reconfigurar o PHP para trabalhar com o DB2
    • Instalar e configurar o SugarCRM Enterprise com o DB2 como um banco de dados de backend
  • Plug-in de link do MySQL
    • Definir e coletar entrada do usuário para uma instância existente do MySQL
    • Instalar e configurar o software necessário, incluindo pacotes do lado do cliente do MySQL
    • Reconfigurar o PHP para trabalhar com o MySQL
    • Instalar e configurar o SugarCRM Enterprise com o MySQL como um banco de dados de backend

Devido à natureza de software livre do Apache e PHP, outra decisão importante para nós é empacotar binários de software de terceiros ou desenvolver o software obrigatório durante a execução. Decidimos desenvolver a partir das fontes fornecidas pelo usuário para mais flexibilidade e extensibilidade.

Empacotamento da solução

Com base nas decisões de design e nas considerações de licença, a solução de ativação do SugarCRM é empacotada como vários arquivos, que são utilizados para ativar os cenários de negócios no IBM PureSystems.

O principal arquivo de plug-in é o pacote de tipos de padrão que consiste na definição do tipo de padrão e em quatro plug-ins. Ele possui o código™ Java, a configuração JSON, o Python e shell scripts que foram desenvolvidos para suportar a modelagem, a implementação e a operação do aplicativo SugarCRM. O nome do arquivo é sugarcrm-1.0.0.0.tgz.

Nome do arquivo Subpasta no TGZ Descrição
sugarcrm-1.0.0.0.tgz Definição do tipo de padrão do Sugarcrm para a versão 1.0.0.0
sugarcrm-1.0.0.2.tgz plugins Plug-in do Sugarcrm que oferece suporte ao Apache, PHP, APC e SugarCRM Enterprise Edition v6.4.0
sugarcrmdb2-1.0.0.2.tgz plugins Plug-in de link do DB2 para Sugarcrm que suporta a conectividade do SugarCRM com o DB2
sugarcrmmysql-1.0.0.2.tgz plugins Plug-in de link do DB2 para Sugarcrm que suporta conectividade do SugarCRM com o MySQL
sugarcrm-samples-1.0.0.2.tgz plugins O plug-in de amostra do Sugarcrm fornece padrões e modelos de aplicativo de amostra

Acesse o site do SugarCRM para fazer o download desses arquivos de soluções empacotados.

Os outros são arquivos de ativação de plug-in contendo produtos e fontes de terceiros para download gratuito. Os administradores de nuvem podem escolher entre desenvolver seus próprios ou fazer o download de pacotes pré-desenvolvidos e, em seguida, configurar plug-ins individuais na interface com o usuário do IBM PureSystems. Como uma das primeiras plataformas suportadas no IBM PureSystems é o Linux, os detalhes dos arquivos de ativação para o Linux são descritos a seguir.

Nome do arquivo Subpasta no TGZ Source Descrição
autoconf-latest.tgz Linux\SOURCES http://www.gnu.org/software/autoconf/ Uma ferramenta necessária pelo PHPize para compilar extensões do PHP
httpd-2.2.21.tgz Linux\SOURCES http://httpd.apache.org/download.cgi Pacote de origem do Apache
PHP-5.3.8.tgz Linux\SOURCES http://www.PHP.net/ Pacote de origem do PHP
APC-3.1.9.tgz Linux\SOURCES http://pecl.PHP.net/package/APC Pacote de origem do APC
Nome do arquivo Subpasta no TGZ Source Descrição
ibm_data_server_client_linuxx64_v97.tar.gz Linux\Products http://www-01.ibm.com/support/docview.wss?rs=4020&uid=swg21385217 Cliente de servidor de dados da IBM v9.7, usado para desenvolver a extensão do db2
ibm_db2-1.9.2.tgz Linux\SOURCES http://pecl.PHP.net/package/ibm_db2 Fonte para a extensão do PHP “ibm_db2”
Nome do arquivo Subpasta no TGZ Source Descrição
mysql-shared-compat-5.0.92-1.rhel5.x86_64.rpm Linux\RPMS http://dev.mysql.com/downloads/mysql/5.0.html#downloads RPM necessário para o PHP com opção de MySQL
mysql-devel-5.0.77-4.el5_4.2.x86_64.rpm Linux\RPMS http://dev.mysql.com/downloads/mysql/5.0.html#downloads RPM necessário para o PHP com opção de MySQL

Usando o PDK como um ponto de início

Um plug-in pode ser estruturado como um projeto Eclipse, portanto, aproveitando uma plataforma flexível e eficiente para o desenvolvimento. No entanto, a organização interna do plug-in não segue um conjunto estrito de regras e convenções, para que possa ser desenvolvido em pacotes bem formados e para que possa ser processado pelos subsistemas do IBM PureSystems. Descobrimos que uma ferramenta de desenvolvimento era necessária em duas áreas: introdução e depuração. Para isso, o Kit de Desenvolvimento do Plug-In (PDK) está disponível como parte do IBM PureSystems como um arquivo ZIP para download na página inicial.

O PDK ajuda na introdução, fornecendo um conjunto de amostra de dois plug-ins de componente e um plug-in de link. Utilizamos os plug-ins de amostra como um exemplo de aprendizado e também como um ponto de início para o desenvolvimento, modificando as amostras. As regras e convenções implícitas podem ser difíceis de discernir durante o desenvolvimento e os erros resultantes geralmente se manifestam de formas misteriosas durante o tempo de execução, dificultando a depuração. Se houver violações a essas regras, esses erros serão muito provavelmente detectados durante o desenvolvimento.

O PDK também ajuda com a depuração por meio de um plug-in de depuração. Esse componente pode ser arrastado e solto em qualquer padrão de aplicativo virtual. Ele fornece duas técnicas de depuração:

  1. O usuário pode implementar o padrão sem realmente implementar as VMs na nuvem, para que o artefato de topologia possa ser inspecionado. Isso pode ser útil no estágio inicial do desenvolvimento, quando o código ainda não está funcional e o usuário pode evitar o longo ciclo de implementação de uma VM.
  2. Depois que o padrão é implementado na nuvem, os arquivos usados durante a ativação são preservados na VM para que o usuário possa efetuar login e depurar. Isso é útil durante a última fase do desenvolvimento para depuração de shell scripts e scripts Python.

O uso do tipo de padrão

Um tipo de padrão é uma coleção de plug-ins que identifica uma solução e uma topologia específicas. Em um ambiente de desenvolvimento, um tipo de padrão aparece como um projeto. O desenvolvedor pode definir o nome, a versão, a descrição e os contratos de licença no patterntype.json e usar o script de desenvolvimento fornecido pelo PDK para gerar os arquivos de pacote do tipo de padrão.

Empacotamos três plug-ins funcionais e um plug-in de amostras no arquivo de tipo de padrão do SugarCRM. Um administrador de nuvem simplesmente importa o tipo de padrão, ativa-o e utiliza os arquivos TGZ descritos na seção Empacotamento da solução para ativar os plug-ins funcionais. O plug-in de amostras é ativado quando o tipo de padrão é ativado, porque não requer configuração.

Desenvolvendo o modelo de aplicativo

Os componentes, links, políticas e parâmetros de entrada do usuário associados a um plug-in são modelados no arquivo appmodel/metadata.json. Com base nas decisões de modelagem descritas na seção Considerações de design, construímos o plug-in do SugarCRM para ser de componente apenas e os plug-ins do banco de dados para suportar os componentes e links.

  • O atributo do ID do componente ou link deve ser exclusivo e é usado como o nome do componente na transformação;
  • O atributo de tipo identifica o componente, o link ou a política;
  • O aspecto do gráfico do componente, como imagem e miniatura, também pode ser especificado.

A abordagem declarativa permite que o desenvolvedor do aplicativo IBM PureSystems interaja com todos os plug-ins, colete a entrada do usuário e persista o modelo de aplicativo como um documento JSON no armazém.

O segmento JSON mostra como definimos um componente e um link no mesmo arquivo metadata.json.

{
"id":"xDB2",
"type":"component",
"thumbnail" : "appmodel/images/thumbnail/existing_DB2_thumb.png",
"image" : "appmodel/images/existing_DB2.png"
}
{
"id":"SugarCRMDB2",
"type":"link",
"source":[
"SugarCRM"
],
"target":[
"DB2",
"xDB2"
]
}

Conforme ilustrado na Figura 3, o usuário pode selecionar um componente do SugarCRM e um dos dois componentes suportados de banco de dados: DB2 e MySQL.

O usuário preenche os parâmetros, conforme necessário, para cada componente (Figuras 4 e 5) e, em seguida, simplesmente arrasta e conecta os dois componentes. O componente DB2 pode ser um servidor novo ou existente, enquanto o componente MySQL só é suportado como um servidor existente.

A Figura 6 mostra um padrão de exemplo com o SugarCRM e o DB2 existente. Como uma conveniência, diversos modelos já prontos estão incluídos no tipo de padrão para o SugarCRM.

Implementando transformadores

Uma tarefa importante no desenvolvimento de plug-ins é a implementação de transformadores. Todos os plug-ins fornecem transformadores para converter um componente, link ou política do modelo de aplicativo em um fragmento do documento de topologia que pode ser usado para implementação pela estrutura do IBM PureSystems. O modelo de aplicativo e o documento de topologia são documentos JSON.

Há duas formas de implementar um transformador:

  • Para modelos simples, o IBM PureSystems tem uma classe TemplateTransform que permite que o desenvolvedor do plug-in grave transformadores como um modelo baseado no JSON usando o Apache Velocity Engine. Portanto, o desenvolvedor pode ser transformado mais visualmente usando macros do JSON e do Velocity;
  • Para modelos mais complexos, o desenvolvedor grava uma implementação Java que estende a classe TopologyProvider para desenvolver um objeto JSON de topologia mais dinâmica e flexível no código Java.

Escolhemos a abordagem de modelo para nossos plug-ins de banco de dados, porque a transformação é relativamente direta. O componente de banco de dados existente e o link podem ter um modelo cada. Esse segmento de modelo mostra a transformação de parâmetro para um banco de dados DB2 existente.

#set( $db_type = $provider.componentName.substring(1) )
{
"name" : "xDB2",
"type" : "xDB2",
"parms" : {
"db_type" : "$db_type",
"db_name" : "$attributes.db_name",
"db_hostname" : "$attributes.db_hostname",
"db_port" : "$attributes.db_port",
"user" : "$attributes.user",
"password" : "$attributes.password",
"service" : "$prefix"
}
}

A transformação do componente SugarCRM requer mais funcionalidade, portanto, desenvolvemos o transformador usando uma implementação de Java.

O uso de modelos do Velocity ou do código Java é declarado nos arquivos XML no diretório OSGI-INF. Esse segmento XML mostra o uso de um modelo, templates/xdb2_component.vm, como o transformador.

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="xDB2">
<implementation class="com.ibm.maestro.model.transform.template.TemplateTransformer"/>
<service>
<provide interface="com.ibm.maestro.model.transform.TopologyProvider"/>
</service>
<property name="component.template" type="String" value="templates/xdb2_component.vm"/>
</scr:component>

Os documentos do componente, OSGI-INF/*.xml, devem ser listados no arquivo de manifesto META-INF/MANIFEST.MF. Esse segmento do arquivo de manifesto mostra dois documentos do componente usados para o plug-in de link do DB2.

Componente de serviço: OSGI-INF/SugarCRMDB2Transform.xml,OSGI-INF/xDB2Transform.xml

Scripts de automação

O conjunto de novos plug-ins para suportar o SugarCRM inclui estes componentes:

  1. DB2 Existente: representa um servidor DB2 existente e executa a configuração necessária, como a inicialização do banco de dados para o SugarCRM;
  2. MySQL existente: representa um servidor MySQL existente e executa a configuração necessária, como inicializar o banco de dados para o SugarCRM;
  3. Link do DB2: representa a dependência entre os componentes do SugarCRM e do DB2 e executa a configuração final quando os servidores do SugarCRM e do DB2 estão prontos. Isso inclui propagar o endereço IP do servidor DB2 para o servidor do SugarCRM;
  4. Link do MySQL: representa a dependência entre os componentes do SugarCRM e do MySQL e executa a configuração final quando os servidores do SugarCRM e do MySQL estão prontos. Isso inclui propagar o endereço IP do servidor MySQL para o servidor do SugarCRM.

Para a implementação real, organizamos o código para esses plug-ins, conforme os projetos Eclipse a seguir:

  1. Componente do SugarCRM como um projeto único;
  2. Componente e link do DB2 existente como um projeto combinado;
  3. Componente e link do MySQL existente como um projeto combinado.

O Guia de Desenvolvimento do Plug-in descreve a estrutura bem definida para o projeto Eclipse, que deve ser seguida por uma implementação de plug-in. As Figuras 7 e 8 mostram o layout interno dos três projetos Eclipse, focando o diretório de plug-ins onde nosso código reside.

Os arquivos destacados em vermelho são os pontos de entrada para o IBM PureSystems: eles contêm o código Phyton para instalar e configurar o software. Seus nomes e locais são fixos, para que o mecanismo de ativação possa chamá-los durante a implementação.

A sequência padrão é:

  1. install.py
  2. configure.py
  3. start.py

Os scripts restantes servem de apoio e são chamados a partir dos scripts principais. Os binários que podem ser empacotados com o plug-in estão no diretório de arquivos e são colocados em diretórios Linux e AIX separados. Da mesma forma, os scripts também são colocados em diretórios Linux e AIX separados.

Em algumas implementações, os scripts são de origem única; isso significa que são gravados para serem executados em plataformas Linux e AIX. No nosso caso, achamos que a implementação é muito diferente entre as duas plataformas, portanto, consideramos mais gerenciável mantê-las separadamente.

Observe, na Figura 8, como o código para o componente e para o link está organizado no mesmo plug-in.

Para melhor consumabilidade, adicionamos um plug-in de amostras com padrões e modelos de aplicativos predefinidos como um projeto Eclipse separado. Os padrões incluídos ajudam os usuários finais a obter um padrão funcional rapidamente e os modelos permitem uma rápida implementação.

A Figura 9 mostra uma tela de implementação de modelo com entrada do usuário simples.

Usamos o recurso de exportação do aplicativo do IBM PureSystems para coletar os metadados e colocamos os arquivos descompactados na pasta /plug-in/applications, conforme visto na Figura 10.

Reutilize plug-ins existentes

No caso da implementação de um novo servidor DB2 com o nó do SugarCRM no mesmo padrão de aplicativo, queríamos aproveitar ao máximo os recursos de plug-in do DB2 para o IBM PureSystems. Trabalhando com as equipes de desenvolvimento do IBM PureSystems, identificamos e articulamos dois novos recursos:

  • A capacidade de reutilizar os plug-ins existentes em novos tipos de padrão customizado.
  • A capacidade de estender os recursos do plug-in e as configurações do banco de dados.

Reutilizar os plug-ins existentes em novos tipos de padrão customizado

Queremos incluir um novo componente do DB2 durante a modelagem de aplicativo e configurar um novo servidor DB2 para trabalhar com o SugarCRM durante a implementação do aplicativo. Com os novos recursos do produto, isso não é possível, porque os plug-ins do DB2 são definidos e carregados no IBM PureSystems para trabalhar com tipos de padrão conhecidos, como dbaas e webapp.

Solicitamos um novo recurso, permitindo que um plug-in customizado indique a inclusão de tipos de padrão existentes e, portanto, plug-ins, na definição do plug-in. O recurso de links do IBM PureSystems foi desenvolvido para que uma cláusula “links” possa ser declarada em plug-ins config.json e a estrutura usará os plug-ins vinculados como se fossem associados pela declaração de tipo de padrão secundário.

Isso se revela um recurso genérico e útil do produto, que ativa de forma conveniente a reutilidade de plug-ins de todos os tipos de padrão.

Estenda recursos de plug-in do DB2 e configurações do banco de dados

Dois dos requisitos de instalação do SugarCRM são:

  • O recurso de busca de texto completo do servidor de banco de dados. O DB2 possui busca de texto completo como um recurso complementar que, por padrão, não é ativado na implementação de padrão de aplicativo virtual do IBM PureSystems usando plug-ins do DB2;
  • Uma configuração customizável do banco de dados no buffer pool e no espaço de tabela.

Para assegurar que o banco de dados provisionado pelo padrão de aplicativo virtual atenda a todos os requisitos, definimos claramente os pontos de extensão adequados com a equipe de desenvolvimento de plug-in do DB2. Um novo recurso do produto – padrão de carga de trabalho do banco de dados customizado – foi desenvolvido e entregue. Ele permite que os usuários finais criem um novo padrão de carga de trabalho do banco de dados, incluindo um arquivo de pacote de scripts com scripts customizados a serem executados em cada ponto de extensão. O padrão de carga de trabalho do banco de dados customizado pode ser utilizado para configuração do DB2 em um padrão de aplicativo virtual.

Para isso, customizamos e empacotamos estes scripts:

  • tune_inst.sh: customize a instância do DB2 depois de ser instalada e iniciada pela primeira vez;
  • tune_db.sh: customize a configuração do banco de dados depois de ser criado;
  • post_start_inst.sh: inicie a busca de texto completo toda vez que o DB2 for (re)iniciado.

Com esses dois recursos recém-desenvolvidos, atingimos com sucesso nossos objetivos de reutilizar os plug-ins do DB2 para a ativação do SugarCRM.

Conclusão

Neste artigo, demonstramos as considerações de design que nossa equipe usou como modelo de guia na criação de um plug-in que permita a implementação da solução SugarCRM existente no IBM PureSystems. Também orientamos em nossos esforços de desenvolvimento:

  • Desenvolvendo os três plug-ins para ativar o SugarCRM;
  • Empacotando os plug-ins;
  • Usando as amostras no Kit de Desenvolvimento do Plug-in como um ponto de início (e especialmente para depuração de nossos plug-ins);
  • Definindo um tipo de padrão e modelo de aplicativo para nossos plug-ins (para torná-los rapidamente implementáveis);
  • Implementando transformadores, os “mecanismos” que convertem bits de modelo de aplicativo em um fragmento do documento de topologia que pode ser usado para a implementação pelo IBM PureSystems;
  • Construindo scripts para automatizar tarefas de implementação;
  • Construindo dois novos recursos de plug-in de reutilização de tipo de padrão e de configuração do banco de dados de acordo com os requisitos da solução SugarCRM.

Agradecimentos

Gostaríamos de agradecer os importantes defensores deste projeto:

  • Willy Chiu, Larry Hsiung, Thomas Truong, Jeffrey Coveyduc, Kai Young, Nauman Fakhar, Chris Kiernan, Raymond Wong dos laboratórios de nuvem e da equipe HiPODS
  • Steve Ims, Lin Sun, Ted Kirby da equipe de desenvolvimento do IBM Workload Deployer
  • Ning Wang, Qi Rong Wang da equipe de desenvolvimento do IBM Database as a Service
  • Nasser Momtaheni, Joseph Peterson, Rodney Johnson da equipe do IBM Innovation Center
  • Stas Malyshev do SugarCRM

***

Faça o download do PureSystems – IBM Virtual Pattern Kit for Developers e descubra a flexibilidade de sistemas integrados especiais e o valor ao utilizar padrões comprovados e implementáveis de especialistas. Com ele, você pode alavancar ou estender os padrões IBM localmente em seu próprio sistema!

Recursos

Aprender

Obter produtos e tecnologias

Discutir

***

Sobre os autores:

  • Chin Huang é arquiteto de soluções de nuvem especializado em TI e arquitetura de software. Possui experiência profissional no desenvolvimento de soluções avançadas, incluindo a plataforma IaaS, integração SaaS, nuvem analítica, serviços da web e plug-ins IWD. Chin é consultor de solução de computação em nuvem certificado e autor de mais de 10 artigos técnicos. Ele vive e trabalha no Vale do Silício, Califórnia.
  • Ton Ngo é arquiteto de soluções de nuvem e desenvolvedor senior no Laboratório do Vale do Silício da IBM, em San Jose, Califórnia. Recentemente, trabalhou como arquiteto para a Nuvem do High Performance Computing na Nanyang Technological University, Singapura, e para a Nuvem de Teste e Desenvolvimento no Royal Bank of Canada. Antes disso, trabalhou como pesquisador no IBM T.J. Watson Research Center e Almaden Research Center por 17 anos e publicou artigos de diversos assuntos.

é o portal de tecnologia da IBM para profissionais de TI de todo o mundo. Colabore, aprenda a criar aplicativos inovadores e compreenda tecnologias avançadas. Acesse mais artigos e tutoriais em www.ibm.com/developerworks/br

Ver perfil