Customizando Transferências de Arquivo Utilizando Scripts Ant com o WebSphere MQ File Transfer Edition

Este artigo mostra como utilizar scripts Ant e classes Java para customizar o WebSphere MQ FTE para transferir automaticamente arquivos novos e modificados de uma pasta de origem a uma pasta de destino e assegurar que os arquivos nas pastas de origem e de destino sejam sempre sincronizados da maneira mais eficiente possível.

Shashi R Thambrahalli, Advisory Software Engineer, WebSphere MQ Client Development team, IBM

Photo of Shashi R. ThambrahalliShashikanth (Shashi) R. Thambrahalli é Advisory Software Engineer na equipe WebSphere MQ Client Development no IBM India Software Lab, em Bangalore. Possui nove anos de experiência com IBM, com foco em clientes WebSphere MQ, C/C++ e Microsoft .NET, XMS .NET e WCF. Desenvolve novos recursos para clientes MQ e fornece serviços de consultoria no WebSphere MQ, WebSphere MQ FTE e WebSphere MQ Advanced Message Security para clientes na Índia e na região da Ásia-Pacífico. É possível entrar em contato com Shashi no endereço shashikanth@in.ibm.com.



Bala Subramanian Vetrivel, Technical Specialist, IBM

Author1 photoBala Subramanian Vetrivel é Technical Specialist na equipe Worldwide WebSphere Business Partner. Possui sete anos de experiência no segmento de mercado de TI e suas áreas de especialização incluem BPM, C/C++, IBM Blueworks, IBM Component Business Model, IBM PureSystems, produtos IBM Rational, IBM Workload Deployer, Java, SOA, WebSphere Application Server, WebSphere Business Modeler and Monitor, WebSphere Business Services Fabric, WebSphere Industry Content Packs, WebSphere Integration Developer, WebSphere MQ, WebSphere Process Server e WebSphere TX. Em sua função atual, trabalha com Parceiros de Negócios e clientes IBM no design de arquiteturas, provas de conceito, solicitações de propostas e ativação de tecnologia. Também contribuiu para os artigos do developerWorks, o projeto Biztech e os IBM Redbooks. É possível entrar em contato com Bala pelo endereço bvetrive@in.ibm.com.



06/Jul/2012

Introdução

O IBM® WebSphere® MQ File Transfer Edition (FTE) fornece uma plataforma corporativa para operações de transferência de arquivos gerenciados. Para grande parte dos requisitos de transferência de arquivos, o WebSphere MQ FTE fornece uma maneira direta de configuração. No entanto, em algumas situações, o WebSphere MQ FTE precisa ser estendido para desenvolver uma solução de transferência de arquivos customizada. Este artigo explica o cenário de um cliente com os requisitos a seguir:

Na origem:

  • Transferir somente os arquivos criados ou modificados após um tempo determinado e copiar esses arquivos recursivamente.

No destino:

  • Excluir os arquivos que não se encontram nas mesmas pastas na origem; essa exclusão deve ser feita recursivamente.

Ao final dessa operação, o destino deve estar em sincronização com a origem por um determinado tempo com o mínimo esforço e sem copiar todas as pastas de origem. Somente essas pastas modificadas após um determinado tempo serão consideradas para sincronização.

Como o WebSphere MQ, o WebSphere MQ FTE pode chamar saídas de usuário antes do início de uma transferência de arquivos e após sua conclusão. É possível ter saídas nos agentes de origem e de destino. Antes do início da transferência de arquivos, é possível utilizar uma saída no agente de origem para renomear o arquivo nesse sistema de destino. Após o término da transferência de arquivos, é possível utilizar a saída no agente de destino para enviar uma notificação de evento àqueles que precisam saber o status da transferência. Para mais informações sobre as saídas do WebSphere MQ FTE, consulte WebSphere MQ FTE source and destination user exit routines no Centro de Informações do WebSphere MQ FTE.

O WebSphere MQ FTE também fornece um rico conjunto de tarefas Ant que pode ser utilizado para customizar suas soluções de transferência de arquivos. É possível utilizar o comando fteAnt para executar um script Ant em um ambiente com WebSphere MQ FTE.

Visão geral do cenário e da solução

Um departamento meteorológico possui centros de monitoramento de clima em toda a Inglaterra - por exemplo, em Bristol, Dover, Manchester e Southampton. Esses centros de monitoramento medem os parâmetros do clima, como temperatura, umidade e pressão do ar. As medições ocorrem ao longo do dia e os dados são armazenados em arquivos em servidores localizados em cada centro de monitoramento. O departamento possui um datacenter central em Londres, onde os dados de cada centro é armazenado em uma pasta nomeada para cada um deles, como Data_Bristol. Os centros enviam os arquivos que contêm os dados do clima para o datacenter em intervalos predefinidos ao longo do dia. Os arquivos dos centros de monitoramento e do datacenter sempre devem estar em sincronização. Este artigo mostra como configurar um ambiente para manter essa sincronização utilizando uma combinação de scripts Ant do WebSphere MQ FTE, XML e classes Java na origem e no destino.

Na origem:

  • Transferir somente os arquivos criados ou modificados após um tempo determinado.
  • Também transferir arquivos de subpastas.

No destino:

  • Excluir todos os arquivos que não se encontram na mesma pasta nas pastas de origem e subpastas.
  • Criar um log de todos os arquivos excluídos.

Para mais informações sobre os Scripts Ant do WebSphere MQ FTE, consulte Using Apache Ant with WebSphere MQ FTE no Centro de Informações do WebSphere MQ FTE.


Pré-requisitos

Definir o ambiente do WebSphere MQ FTE a seguir:

  1. Em um servidor, defina e instale os componentes a seguir. Um servidor Microsoft® Windows® é utilizado como o servidor administrativo no "datacenter".
  2. Instale o WebSphere MQ V7.0.3 ou mais recente, incluindo o WebSphere MQ Explorer.
  3. Defina um gerenciador de filas do WebSphere MQ denominado LONDON.DATA.CENTER.QMGR, que será utilizado como gerenciador de filas de coordenação, comando e agente.
  4. Defina um listener em uma porta não usada e inicie-o. Ele será usado pelos agentes remotos.
  5. Instale o WebSphere MQ FTE V7.0.3 Server Edition.
  6. Como parte da instalação do servidor, defina um agente denominado LONDON.DATA.CENTER.AGNT. Como é um agente local para o gerenciador de filas, ele pode ser definido como um agente de conexão.
  7. Instale o plug-in do WebSphere MQ FTE V7.0.3 WebSphere MQ Explorer a partir da instalação de Ferramentas Remotas e Documentação.
  8. Nos servidores que estão agindo como centros de monitoramento (utilize Bristol e Dover para esse exemplo), instale o WebSphere MQ FTE Client Edition.
  9. Defina um agente de conexão do cliente em cada servidor - BRISTOL.AGENT e DOVER.AGENT - para que eles se conectem ao gerenciador de filas LONDON.DATA.CENTER.QMGR utilizando a porta definida pelo listener anteriormente e na qual ele está recebendo. Utilize o gerenciador de filas LONDON.DATA.CENTER.QMGR como seu gerenciador de filas de agente, comando e coordenação.

Se for novo no WebSphere MQ FTE e precisa de informações sobre sua configuração, consulte o artigo do developerWorks Passo a passo do WebSphere MQ FTE . Agora você está pronto para seguir as Etapas 1 a 6 abaixo.

1. Desenvolver saída para o agente de origem

A principal tarefa da saída é remover todos os arquivos cujo registro de data e hora criado ou modificado é anterior ao especificado. É possível especificar o registro de diversas maneiras - este artigo utiliza um arquivo XML como o abaixo:

<property  name="syncTimeStamp" value="06/21/2012 23:55:00" />

Também é possível utilizar os metadados de transferência definidos pelo usuário para passar um registro e modificar a saída a fim de utilizar esse registro para excluir arquivos da lista de transferência. A saída implementa a interface com.ibm.wmqfte.exitroutine.api.SourceTransferStartExit e substitui onSourceTransferStart. O WebSphere MQ FTE irá chamar esse método antes do início da transferência de um arquivo.

Compile a origem para criar uma classe. Segue a listagem de amostra do método:

public class RemoveUnmodifiedFilesFromList implements SourceTransferStartExit {
    public TransferExitResult onSourceTransferStart (String sourceAgentName, 
        String destinationAgentName, 
        Map <String, String> envMetaData,
        Map <String, String> transferMetaData,
        List <SourceFileExitFileSpecification>fileSpec)
    {
        // Read timestamp from XML file
        final String parmTS = transferMetaData.get("syncTimeStamp");
        if(syncTS > createdDate)
        {
            fileSpecs.remove(i); // No So remove it
        }
    }
}

2. Configurar o agente de origem

  1. Crie um arquivo XML conforme mostrado abaixo. Altere o valor da propriedade conforme necessário.
    <property  name="syncTimeStamp" value="06/21/2012 23:55:00" />
  2. Especifique a classe exit no arquivo agent.properties do agente de origem:
    sourceTransferStartExitClasses=com.ibm.wmqfte.example.RemoveUnmodifiedFilesFromList
  3. Copie a classe de saída para a pasta exits do gerenciador de filas de coordenação do agente. Por exemplo,
    <fte install folder> config/LONDON.DATA.CENTER.QMGR/agents/BRISTOL.AGENT/exits

3. Script Ant do WebSphere MQ FTE no agente de origem

  1. O arquivo Ant do WebSphere MQ FTE chama uma tarefa Ant customizada para listar todos os arquivos na origem. Após a transferência do arquivo, essa lista será utilizada no agente de destino para excluir arquivos que não se encontram no agente de origem.
    <listFiles dir="${srcDir}" />
    <echo message="recurive.Files***" />
    <echo message="${recurive.Files}" />
  2. Chame o arquivo do script Ant externo para excluir os arquivos desnecessários no destino:
    <fte:filespec srcfilespec="${srcDir}" conversion="binary" 
         dstdir="${dstDir}" overwrite="true" />
    <fte:postdst command="DeleteDest.xml" type="antscript" successrc="0">
    <fte:property name="recurive.Files" value="${recurive.Files}"/>
    <fte:property name="destDir" value="${dstDir}"/>
    </fte:postdst>
  3. No script Ant externo, chame uma tarefa Ant customizada que exclui os arquivos desnecessários comparando a listagem do arquivo de origem com a pasta de destino:
    <SyncDir srcList="${recurive.Files}" destDir="${destDir}"/>

4. Configurar o agente de destino

  1. Especifique o local do script Ant externo no arquivo do agente de destino:
    agent.properties
    commandPath=C\:\\IBM\\WMQFTE\\jre\\bin;C\:\\IBM\\WMQFTE\\bin\\;
    C\:\\WINDOWS\\system32\\;

5. Criando a tarefa Ant customizada

  1. Estenda a classe org.apache.tools.ant.Task.
  2. Substitua o método execute e inclua sua funcionalidade:
    public @Override  void execute() throws BuildException
  3. Empacote essa tarefa customizada como um arquivo JAR e coloque-a em C:\IBM\WMQFTE\ant\lib.

Etapa 6. Chamando a tarefa Ant customizada

  1. Inclua o recurso taskdef :
    <taskdef resource="net/sf/antcontrib/antlib.xml"/>
  2. Defina a tarefa Ant customizada fornecendo um nome de classe:
    <taskdef 
    name="listFiles" classname="com.ibm.mq.fte.file.sync.ant.util.ListFilesTask" 
    classpath="{ant.home}/lib" 
    />
    <taskdef 
    name="listDir" classname="com.ibm.mq.fte.file.sync.ant.util.ListDirectoriesTask“ 
         classpath="{ant.home}/lib" 
    />
  3. Coloque os arquivos JAR a seguir em ant/lib: Ant-contrib-1.0b3-bin e AntExtras.

Download de arquivos

Os arquivos a seguir estão incluídos no arquivo de download AntScript.zip:

agent.properties
Especifica o local da classe de saída do agente de origem.
mq-ant-utils.jar
Classes relacionadas ao comando Ant customizado. Localizadas na biblioteca ant dos agentes de origem e de destino.
SyncDirWithLoggingSingleXferSyncTS.xml
Script Ant do FTE a ser executado no agente de origem.
DeleteDest.xml
Script do FTE chamado pelo script Ant do FTE do agente de origem. Especifique o local desse script Ant externo no arquivo agent.properties do agente de destino.

Download

DescriçãoNomeTamanho
Code sampleAntScript.zip15 KB

Recursos

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=WebSphere
ArticleID=823974
ArticleTitle=Customizando Transferências de Arquivo Utilizando Scripts Ant com o WebSphere MQ File Transfer Edition
publish-date=07062012