WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Instrução DECLARE

Use a instrução DECLARE para definir uma variável, o tipo de dados da variável e, opcionalmente, seu valor inicial.

É possível definir três tipos de variável com a instrução DECLARE:
  • Externo
  • Normal
  • Compartilhado
Veja informações adicionais na publicação Variáveis ESQL.

Sintaxe

Ler diagrama de sintaxeManter visual do diagrama de sintaxe
            .-<<-,-<<-.                         
            V         |                         
>>-DECLARE---- -Name--+--+------------------+------------------->
                         +-SHARED (1) (2)---+   
                         '-EXTERNAL (3) (4)-'   

>--+-+----------+--DataType (5)-+--+------------------------+--><
   | '-CONSTANT-'               |  '-InitialValueExpression-'   
   +-NAMESPACE (6)--------------+                               
   '-NAME (6)-------------------'                               

Notas:
  1. A palavra-chave SHARED não é válida em uma função ou procedimento.
  2. Não é possível especificar SHARED com um DataType de REFERENCE TO. Para armazenar uma árvore de mensagens em uma variável compartilhada, utilize o tipo de dados ROW.
  3. As variáveis EXTERNAL são implicitamente constantes.
  4. É uma boa prática de programação fornecer a uma variável EXTERNAL um valor inicial.
  5. Se você especificar um DataType de REFERENCE TO, deverá especificar um valor inicial (uma variável ou uma árvore) em InitialValueExpression.
  6. Quando as cláusulas NAMESPACE e NAME são utilizadas, seus valores são implicitamente constantes e do tipo CHARACTER.

Siga os links para visualizar mais informações sobre todos esses parâmetros:

CONSTANT

Utilize CONSTANT para definir uma constante. Você pode declarar constantes dentro de esquemas, módulos, rotinas ou instruções compostas (tanto implícitas como explícitas). O comportamento desses casos é mostrado na seguinte lista:

Uma constante ou variável declarada em uma rotina sobrepõe qualquer parâmetro com o mesmo nome e todas as constantes e variáveis com o mesmo nome que são declaradas em um módulo ou esquema de contenção.

DataType

Os valores que você pode especificar para DataType são:
  • BOOLEAN
  • INT
  • INTEGER
  • FLOAT
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL. Este valor não se aplica a variáveis externas (palavra-chave EXTERNAL especificada).
  • CHAR
  • CHARACTER
  • BLOB
  • BIT
  • ROW. Este valor não se aplica a variáveis externas (palavra-chave EXTERNAL especificada).
  • REFERENCE TO. Este valor não se aplica a variáveis externas ou compartilhadas (palavra-chave EXTERNAL ou SHARED especificada).

EXTERNAL

Utilize EXTERNAL para indicar uma UDP (User-Defined Property). Um UDP é uma constante definida pelo usuário cujo valor inicial (opcionalmente configurado pela instrução DECLARE) pode ser modificado, no tempo de design, pelo editor do Fluxo de Mensagens( consulte Editor de Fluxo de Mensagens) ou substituído no tempo da implementação, pelo editor Broker Archive (consulte Editor Broker Archive). O valor de um UDP não pode ser modificado pelo ESQL.

Quando é dado um valor inicial a uma UDP na instrução DECLARE, esse valor se torna seu padrão. No entanto, qualquer valor especificado no editor de Fluxo de Mensagens no tempo de design, ou no editor de Broker Archive no tempo de implementação (mesmo uma cadeia de comprimento zero) substitui qualquer valor inicial que foi codificado na instrução DECLARE.

Por exemplo, se você codificar:
       DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';
você definiu uma variável UDP de deployEnvironment com um valor inicial Dev.

Inclua a UDP ao fluxo de mensagens utilizando a guia UDP no editor de fluxo de mensagens. Ao incluir o fluxo ao arquivo BAR, o UDP está lá como um atributo do fluxo; você deve nomear o atributo para ser o mesmo que a variável ESQL na instrução DECLARE (neste caso deployEnvironment) para assegurar que o valor inicial que você definiu não é alterado.

Todas as UDPs em um fluxo de mensagens devem ter um valor, dado na instrução DECLARE ou pelo Fluxo de Mensagens ou editor do Broker Archive; caso contrário, ocorre um erro de tempo de implementação. No tempo de execução, depois que a UDP tiver sido declarada, seu valor pode ser consultado por instruções ESQL subsequentes.

É possível definir uma UDP para um subfluxo. Uma UDP possui escopo global e não é específica para um subfluxo em particular. Se você reutilizar um subfluxo em um fluxo de mensagens e esses subfluxos tiverem UDPs idênticas, não será possível configurar UDPs com valores diferentes.

A vantagem de UDPs é que seus valores podem ser alterados no tempo de implementação. Por exemplo, se você usar as UDPs para armazenar dados de configuração, isso significa que é possível configurar um fluxo de mensagens para um computador particular, tarefa ou ambiente no tempo de implementação, sem ter de alterar o código no nível do nó. UDPs também podem ser modificados no tempo de execução usando o CMP API.

É possível declarar UDPs apenas em módulos ou esquemas; isso significa que você pode utilizar a instrução DECLARE com a palavra-chave EXTERNAL apenas no nível MODULE ou SCHEMA. Se você utilizar uma instrução DECLARE com a palavra-chave EXTERNAL dentro de um PROCEDURE ou FUNCTION, uma exceção BIP2402E ocorrerá ao implementar o fluxo de mensagens.

Os seguintes tipos de nó do broker são capazes de acessar UDPs:
  • Compute
  • Banco de Dados
  • Filter
  • Nós derivados desses tipos de nó

Tome cuidado ao especificar o tipo de dados de uma UDP, porque um CAST é utilizado para alterar o valor para o DataType solicitado.

Para uma visão geral de UDPs, consulte Propriedades Definidas pelo Usuário no ESQL.

Exemplo 1:

DECLARE mycolor EXTERNAL CHARACTER 'blue'; 

Exemplo 2:

DECLARE TODAYSCOLOR EXTERNAL CHARACTER;
SET COLOR = TODAYSCOLOR;
em que TODAYSCOLOR é uma propriedade definida pelo usuário que possui um TYPE de CHARACTER e um VALUE configurado pelo editor do Fluxo de Mensagens.

NAME

Utilize NAME para definir um alias (um nome alternativo) pelo qual uma variável pode ser conhecida.

Exemplo 1:

-- A instrução a seguir fornece um alias 'Joe' para o Schema1.
DECLARE Schema1 NAME 'Joe';  
-- A instrução a seguir produz um campo chamado 'Joe'.
SET OutputRoot.XMLNS.Data.Schema1 = 42; 
 
-- A instrução a seguir insere um valor em uma tabela chamada Table1 
-- no esquema chamado 'Joe'.
INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42; 

Exemplo 2:

-- No escopo do Módulo, defina ColourElementName e configure-o como externo
-- para que seu valor padrão 'preto' possa ser substituído por uma UDP  
DECLARE ColourElementName EXTERNAL NAME 'black';


-- Use ColourElementName em uma função
CREATE FIRSTCHILD OF OutputRoot.XMLNSC.TestCase.ColourElementName
                     Domain('XMLNSC') 
                     NAME 'Node1' VALUE '1';

Se o fluxo de mensagens de propriedade tiver sido configurado com uma UDP denominada ColourElementName do tipo Cadeia, a que foi dado o valor vermelho, a seguinte mensagem de saída é gerada:

<xml version="1.0"?>
<TestCase>
  <red>
    <Node1>1</Node1>
  </red>

NAMESPACE

Utilize NAMESPACE para definir um alias (um nome alternativo) pelo qual um espaço de nomes pode ser conhecido.

Exemplo:

Este exemplo ilustra a declaração de namespaces, seu uso como um SpaceId em um caminho, e seu uso como constante de caracteres em uma expressão:

       DECLARE prefixOne
NAMESPACE 'http://www.example.com/PO1';

       -- No lado direito da designação, uma constante de namespace
       -- está sendo utilizada como tal, enquanto que do lado esquerdo, uma está 
       -- sendo utilizada como uma constante ordinária (ou seja, em uma expressão).

       SET OutputRoot.XMLNS.{prefixOne}:{'PurchaseOrder'} = 
                      InputRoot.XMLNS.prefixOne:PurchaseOrder;

SHARED

Utilize SHARED para definir uma variável compartilhada. As variáveis compartilhadas são privadas no fluxo (se declaradas em um esquema) ou nó (se declaradas em um módulo), mas são compartilhadas entre as instâncias do fluxo (encadeamentos). Nenhum tipo de variável é visível além do nível do fluxo; por exemplo, não é possível compartilhar variáveis através de grupos de execução.

É possível utilizar variáveis compartilhadas para implementar um cache em memória no fluxo de mensagens; consulte Otimizando Tempos de Resposta do Fluxo de Mensagens. As variáveis compartilhadas têm uma existência longa e são visíveis para várias mensagens transmitidas por um fluxo; consulte Variáveis de Existência Longa.

As variáveis compartilhadas existem pelo tempo de vida do:
  • Processo do grupo de execução
  • Fluxo ou nó, ou
  • Código ESQL do nó que declara a variável
(a que for mais curta). Elas são inicializadas quando a primeira mensagem é transmitida pelo fluxo ou nó, após a inicialização de cada broker.

Não é possível definir uma variável compartilhada em uma função ou um procedimento.

As vantagens de variáveis compartilhadas, em relação a bancos de dados, são:
  • O código de gravação é muito mais rápido.
  • O acesso de leitura a pequenas estruturas de dados é mais rápido.
  • O acesso é direto; ou seja, não é preciso utilizar uma função especial (SELECT) para obter dados ou instruções especiais (INSERT, UPDATE, ou DELETE) para modificar dados. Você pode referir-se aos dados diretamente em expressões.
As vantagens dos bancos de dados, em relação a variáveis compartilhadas, são:
  • Os dados são persistentes.
  • Os dados são alterados de modo transacional.

Essas variáveis de leitura/gravação são ideais para usuários preparados para desconsiderar as vantagens de persistência e transacionais dos bancos de dados a fim de obter um melhor desempenho, pois elas possuem uma existência maior que apenas uma mensagem e desempenham melhor que um banco de dados.

Como as variáveis SHARED podem ser atualizadas por diversas instâncias adicionais, você deve garantir que não alterou as variáveis SHARED, que poderão causar resultados inesperados, por exemplo, se a variável estiver sendo usada como um contador.

Como as variáveis SHARED são inicializadas uma vez na primeira mensagem através de um nó, é possível inicializar uma variável SHARED ROW uma vez com os resultados a partir de uma consulta de Banco de Dados. O seguinte código mostra um exemplo de como isso é obtido:
      CREATE SCHEMA testSchema 
         DECLARE mySharedRow SHARED ROW; 
         DECLARE initialized SHARED BOOLEAN myINIT(); 
  
         CREATE COMPUTE MODULE testModule 
        
         CREATE FUNCTION Main() RETURNS BOOLEAN 
         BEGIN 
         SET OutputRoot.XMLNSC.Top.TEST.Result1 VALUE = initialized; 
         SET OutputRoot.XMLNSC.Top.TEST.Result2 = mySharedRow; 
       END; 

     END MODULE; 

     CREATE FUNCTION myINIT() RETURNS BOOLEAN 
     BEGIN 
         LOG EVENT VALUES('myINIT CALLED'); 
         SET mySharedRow.Top[] = SELECT A.MyCol1, A.MyCol2 from Database.Test AS A; 
         RETURN TRUE; 
     END; 

É possível evitar que outras instâncias vejam os estágios brokers dos dados utilizando uma construção BEGIN ATOMIC; consulte Instrução BEGIN ... END.

O programa do usuário pode fazer uma leitura eficiente, ou gravação, copiar de uma mensagem de entrada no nó de entrada usando variáveis de linha compartilhada, o que simplifica a técnica para manipular mensagens grandes.

Restrição:

As subárvores não podem ser copiadas diretamente de uma variável de linha compartilhada para outra variável de linha compartilhada. As subárvores podem ser copiadas indiretamente utilizado uma variável de linha não compartilhada. Os valores escalares extraídos de uma variável de linha compartilhada (utilizando a função FIELDVALUE) podem ser copiados para outra variável de linha compartilhada.

Programa de Amostra

A amostra a seguir demonstra como utilizar variáveis compartilhadas e externas:

Você só pode visualizar informações sobre amostras quando usa o centro de informações que está integrado ao WebSphere Message Broker Toolkit ou o centro de informações on-line. Você só poderá executar amostras quando usar o centro de informações que está integrado ao WebSphere Message Broker Toolkit.

Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:29:53


Tópico de ReferênciaTópico de Referência | Versão 8.0.0.5 | ak04980_