Avançar para a área de conteúdo

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

A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

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

  • Fechar [x]

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.

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

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

  • Fechar [x]

Migrando os aplicativos SPADE do InfoSphere Streams para SPL, Parte 3: Migrar aplicativos SPADE com funções definidas pelo usuário

Um guia introdutório de exemplos

Kevin Erickson, Senior Software Engineer, I.B.M.
Photo of Kevin Erickson
Kevin Erickson passou a fazer parte da IBM em Rochester, MN, em 1981, como engenheiro eletricista trabalhando no desenvolvimento e teste de unidades de disco rígido. Ele contribuiu para uma grande variedade de produtos e tecnologias IBM, desde sistemas de controle de servomecanismo de eixo e atuador de disco rígido até componentes de kernel do sistema operacional do AS/400 e sucessor. Mais recentemente, Kevin trabalhou no teste de desempenho do supercomputador Roadrunner, o primeiro computador a quebrar a barreira de 1 petaflop. Em 2009, ele se transferiu para o Software Group para trabalhar com a equipe do InfoSphere Streams, primariamente em diversas funções relacionadas a testes. Ao longo de sua carreira na IBM, Kevin recebeu 14 patentes nos EUA e várias em outros países. Ele possui bacharelado em Engenharia Elétrica da Universidade de Minnesota.
Richard P. King, Senior Programmer, IBM
Richard King é membro da equipe do InfoSphere Streams há vários anos. Quando ele passou a fazer parte da IBM em 1977, trabalhou como Associate Programmer no desenvolvimento do System/38. Desde sua transferência para a Research Division da IBM no IBM Thomas J. Watson Research Center in Yorktown em 1981, ele trabalhou em uma ampla gama de projetos, incluindo o design e o desenvolvimento do que se tornou a IBM Sysplex Coupling Facility. Richard é bacharel em Engenharia Industrial e Pesquisa de Operações pela Universidade Cornell e mestre em Pesquisa de Operações e Engenharia Industrial pela Universidade Northwestern.

Resumo:  O novo recurso mais significativo da Versão 2.0 do produto IBM InfoSphere® Streams é a transformação do modelo de linguagem de programação de Stream Processing Application Declarative Engine (SPADE) para Stream Processing Language (SPL). Os usuários com aplicativos SPADE de versões anteriores precisarão migrar e portar seus aplicativos para SPL ao atualizar suas instalações para a Versão 2.0. Este tutorial é a Parte 3 de uma série com 5 partes que usa exemplos reais de SPADE para demonstrar uma série de procedimentos detalhados para migrar e portar diferentes tipos de conteúdo de aplicativos SPADE. A Parte 3 demonstra a migração de aplicativos SPADE com funções definidas pelo usuário.

Visualizar mais conteúdo nesta série

Data:  18/Jul/2011
Nível:  Intermediário

Atividade:  2895 visualizações

Atualizando o arquivo de modelo de função

Tablela 2 mostra o esqueleto da seção do arquivo function.xml que pertence à forma de função em linha.


Tablela 2. Esqueleto da seção do conjunto de funções em linha
Nº da linhaCódigo
6  <functionSet>
7    <!-- header file to include from within C++ code -->
8    <headerFileName>Sample.h</headerFileName>
9    <!-- functions lists the SPL prototypes of the functions implemented in this library -->
10    <functions>
11      <function>
12        <!-- use of CDATA allows easy use of <> in the prototypes -->
13        <prototype><![CDATA[ public void replaceMe() ]]></prototype>
14      </function>
15    </functions>
16    <dependencies>
17      <!-- This library can have several dependencies. Only one is used here. -->
18      <library>
19        <!-- A description for this library -->
20        <cmn:description>Sample-Functions</cmn:description>
21        <cmn:managedLibrary>
22          <!-- the name of the library for linking. Will be used as -lSample -->
23          <cmn:lib>Sample</cmn:lib>
24          <!-- Where to find the library. Relative to the current directory.
25            Will be used as -L<dir>/lib -->
26          <cmn:libPath>lib</cmn:libPath>
27          <!-- Where to find the include file. Relative to the current directory.
28            Will be used as -I<dir> -->
29          <cmn:includePath>./</cmn:includePath>
30        </cmn:managedLibrary>
31      </library>
32    </dependencies>
33  </functionSet>

Complete as seguintes etapas para modificar essa seção. Como o número de linhas muda à medida que você faz modificações, cada modificação é feita com referência aos números de linha do esqueleto original.

  1. Edite o arquivo de modelo de função function.xml para adicionar protótipos de função declarados como uma função de recebedor de chamada desconhecida pela compilação anterior.
    my_editor functions/native.function/function.xml &
    

  2. Na linha 8, substitua Sample.h pelo seguinte como o <headerFileName>.
    CalculateStateTaxInline.h

  3. Replique as linhas 11 a 14 duas vezes para alcançar três seções, que se tornam as linhas 11 a 22. Como três funções de recebedor de chamada foram identificadas como desconhecidas, você precisa criar três seções de tag <function>.
  4. Substitui a seção <prototype> para cada uma das três linhas correspondentes à linha 13 replicada da seguinte maneira:
    1. Substitua a linha 13 por
      <![CDATA[ public float32 getStateTaxPercentage(rstring stateName) ]]>
      

    2. Substitua a nova linha 17 por
      <![CDATA[ public float32 getTotalTax(rstring stateName, float32 unitPrice,
      int32 quantity) ]]>
      

    3. Substitua a nova linha 21 por
      <![CDATA[ public int32 getShipmentTrackingNumber(rstring buyerName, rstring
      productName) ]]>
      

  5. Na linha 20 (nova linha 28), substitua Sample-Functions por
    UDF-Inline Functions
    

    como o <cmn:description>. O nome pode ser qualquer texto descritivo.
  6. Nas linhas 23 e 26 (novas linhas 31 e 34), comente as seções da tag <cmn:lib> e <cmn:libPath>. A implementação de inclusão em linha não tem nenhum artefato de biblioteca verdadeiro.
  7. Na linha 29 (nova linha 37), substitua ./ por
    ../../opt/include
    

    como o <cmn:includePath>.
  8. Salve e saia de my_editor.

Tablela 3 mostra os resultados da seção do conjunto de funções em linha após todas essas modificações.


Tablela 3. Seção do conjunto de funções em linha preenchida
Nº da linhaCódigo
6  <functionSet>
7    <!-- header file to include from within C++ code -->
8    <headerFileName>CalculateStateTaxInline.h</headerFileName>
9    <!-- functions lists the SPL prototypes of the functions implemented in this library -->
10    <functions>
11      <function>
12        <!-- use of CDATA allows easy use of <> in the prototypes -->
13        <prototype><![CDATA[ public float32 getStateTaxPercentage(rstring
        stateName) ]]></prototype>
14      </function>
15      <function>
16        <!-- use of CDATA allows easy use of <> in the prototypes -->
17        <prototype><![CDATA[ public float32 getTotalTax(rstring stateName, float32
        unitPrice, int32 quantity) ]]></prototype>
18      </function>
19      <function>
20        <!-- use of CDATA allows easy use of <> in the prototypes -->
21        <prototype><![CDATA[ public int32 getShipmentTrackingNumber(rstring
        buyerName, rstring productName) ]]></prototype>
22      </function>
23    </functions>
24    <dependencies>
25      <!-- This library can have several dependencies. Only one is used here. -->
26      <library>
27        <!-- A description for this library -->
28        <cmn:description>UDF-Inline Functions</cmn:description>
29        <cmn:managedLibrary>
30          <!-- the name of the library for linking. Will be used as -lSample -->
31          <!-- <cmn:lib>Sample</cmn:lib> -->
32          <!-- Where to find the library. Relative to the current directory.
33            Will be used as -L<dir>/lib -->
34          <!-- <cmn:libPath>lib</cmn:libPath> -->
35          <!-- Where to find the include file. Relative to the current directory.
36            Will be used as -I<dir> -->
37          <cmn:includePath>../../opt/include</cmn:includePath>
38        </cmn:managedLibrary>
39      </library>
40    </dependencies>
41  </functionSet>

4 de 10 | Anterior | Próximo

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=699981
TutorialTitle=Migrando os aplicativos SPADE do InfoSphere Streams para SPL, Parte 3: Migrar aplicativos SPADE com funções definidas pelo usuário
publish-date=07182011
author1-email=kjerick@us.ibm.com
author1-email-cc=
author2-email=rpk@us.ibm.com
author2-email-cc=