Use a instrução DECLARE para definir uma variável, o tipo de dados da variável e, opcionalmente, seu valor inicial.
.-<<-,-<<-. V | >>-DECLARE---- -Name--+--+------------------+-------------------> +-SHARED (1) (2)---+ '-EXTERNAL (3) (4)-' >--+-+----------+--DataType (5)-+--+------------------------+-->< | '-CONSTANT-' | '-InitialValueExpression-' +-NAMESPACE (6)--------------+ '-NAME (6)-------------------'
Siga os links para visualizar mais informações sobre todos esses parâmetros:
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.
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.
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.
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.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>
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;
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.
Não é possível definir uma variável compartilhada em uma função ou um procedimento.
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.
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.
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.
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.