Restrições na Migração de Mapeamentos de Mensagens

Existem alguns cenários nos quais a migração de arquivos mfmap não é suportada. Este tópico explica por que a migração não é automática nestas situações e fornece instruções sobre como concluir uma migração bem-sucedida.

O modelo de programação para mapas de mensagens é muito diferente entre a Versão 5.0 (em que o formato de arquivo é mfmap) e a Versão 6.0 (em que o formato é msgmap). Os mapas de mensagens da Versão 5.0 possuem um modelo de programação orientado por procedimentos, que é, basicamente, um ESQL alternativo, no qual você descreve todas as etapas requeridas para desempenhar uma transformação. A Versão 6.0 utiliza um modelo de programação declarativo, no qual você descreve o resultado da transformação e as ferramentas determinam como obter esse resultado.

A maioria das falhas de migração resultam de mapas de mensagens que contêm uma grande quantidade de informações sobre as etapas que desempenham a transformação e não possuem informações suficientes sobre o resultado desejado. Para estes mapas de mensagens, a migração é ativada alterando o arquivo mfmap para que as seções específicas "como" sejam separadas em uma função ou procedimento ESQL que pode ser chamado pelo mapa de mensagem. O arquivo mfmap chama o ESQL em vez de contê-lo como uma expressão. O comando mqsimigratemfmaps então migra o arquivo mfmap, mas chama o ESQL em vez de registrar um erro de migração.

Uma limitação é que o ESQL (o tempo de execução para os arquivos mfmap e msgmap) não pode definir funções que retornam valores de elemento complexo (ou REFERENCE). O procedimento a seguir explica como resolver esta limitação de destino do elemento complexo; em muitos casos, isto significa que o mapa deve ser regravado como ESQL. Para obter exemplos e informações adicionais sobre como chamar o ESQL a partir de mapas, consulte a amostra de mapeamento de intermediários em Ajuda > Samples Gallery > Amostras de Tecnologia > Intermediários de Mensagens > Mapa de Mensagem.

  1. Determine se você pode definir uma função ESQL para o arquivo mfmap.
    1. Quando o valor de destino for um elemento complexo ou, em termos de ESQL, um REFERENCE, o mapeamento individual deverá ser regravado no arquivo msgmap. Exclua o mapeamento do arquivo mfmap e prossiga para a Etapa 4.
    2. Utilize uma função para todos os outros casos: cadeia CHAR, números e data e hora. Prossiga para a Etapa 2.
  2. Determine os parâmetros de origem e tipo de retornos para sua função.
    1. Para cada caminho de origem no mapeamento, deve haver um parâmetro na função ou procedimento. Para uma função, todos os parâmetros são inalteráveis. O tipo do parâmetro deve corresponder ao tipo de dados de origem.
    2. O tipo de retorno da função é o tipo de dados ESQL identificado acima.
  3. Atualize o arquivo mfmap para ativar a migração. Altere o arquivo mfmap para chamar a função no mapeamento, transmitindo os parâmetros de origem para a função na ordem em que eles foram listados na etapa 2a.
  4. Execute novamente o comando mqsimigratemfmaps para migrar o arquivo mfmap modificado.
  5. Repita as Etapas 1 a 4 até que não existam mais erros no registro de migração.
  6. Inicie o Message Brokers Toolkit Versão 6.0 e abra o arquivo msgmap migrado.
    1. Para ESQL migrado como funções, não deve haver erros.
    2. Para destinos de elemento complexo, regrave o mapeamento utilizando os recursos da Versão 6.0.
Os exemplos a seguir ilustram a migração de arquivos mfmap para arquivos msgmap.
  • Para migrar uma referência múltipla para uma expressão de origem de repetição:
    src_msg.e[1] + src_msg.e[2]  
    calcule o resultado de uma função ESQL como:
    CREATE FUNCTION addOneAndTwo(IN src_msg)
    BEGIN
    	RETURN src_msg.e[1] + src_msg.e[2]; 	
    END;  
    No arquivo msgmap, chame a função ESQL addOneAndTwo utilizando o elemento pai src_msg como um parâmetro.

  • Uma expressão que não utiliza nomes de elementos:
    src_msg.* 
    ou
    src_msg.*[]  	
    pode ser processada utilizando uma função que utiliza o pai do campo de repetição:
    CREATE FUNCTION processAny(IN src_msg)  	
    BEGIN 		
    	DECLARE nodeRef REFERENCE TO src_msg.e.*; 		
    	DECLARE result <dataType> <initialValue>;
    	WHILE LASTMOVE nodeRef DO 			
    		-- colocar expressão aqui
    		SET result = result; 		
    	END WHILE; 		
    	RETURN RESULT; 	
    END;  
    No arquivo msgmap, chame a função ESQL utilizando o elemento pai src_msg como um parâmetro.

  • Expressões que calculam dinamicamente nomes de elementos:
    src_msg.{'a' || 'b'}  
    podem ser processadas por funções ESQL que processam o pai do campo de repetição:
    CREATE FUNCTION processDynamicName(IN src_msg)  	
    BEGIN 		
    	RETURN src_msg.{'a' || 'b'}; 	
    END;  
    No arquivo msgmap, chame a função ESQL utilizando o elemento pai src_msg como um parâmetro.

  • Expressões que utilizam as funções select MIN, MAX e COUNT:
    SELECT MAX("#T".FIRSTNAME)  		
    	FROM Database.CUSTOMER AS "#T"  		
    	WHERE "#T".CUSTOMERID = custId  
    podem ser processadas por funções ESQL que processam o pai do campo de repetição:
    CREATE FUNCTION processMAX(IN custId)  	
    BEGIN 		
    	RETURN  			
    	SELECT MAX("#T".FIRSTNAME) 				
    		FROM Database.CUSTOMER AS "#T" 				
    		WHERE "#T".CUSTOMERID = custId 	
    END;  
    No arquivo msgmap, chame a função ESQL utilizando o elemento custId como um parâmetro.

  • Mfmaps que utilizam variáveis de índice mfmap em expressões:
    e || "#I"  
    devem ser totalmente regravados em ESQL. Por definição, deve haver um elemento pai de repetição complexo e isto não é suportado por funções ESQL.

  • Expressões que utilizam expressões de origem para calcular valores:
    src_msg.e[src_msg.a]  
    devem ser regravadas utilizando linhas if, funções msgmap:occurrence() e funções ESQL:
    for src_msg.e 		
    	if 			
    		condition msgmap:occurrence(src_msg/e) = src_msg/a 

  • Para expressões que utilizam expressões de índice para calcular valores:
    src_msg.e["#I" +5] 	
    src_msg.e[< 3]  
    todo o arquivo mfmap deve ser regravado em ESQL, porque os arquivos msgmap ainda não suportam acesso indexado a campos de repetição.

  • Arquivos Mfmap que utilizam expressões ROW para calcular valores:
    src_msg.e IN (1, 2, 3)  
    devem ser regravados em ESQL, porque os arquivos msgmap não suportam expressões ESQL ROW.
Referências relacionadas
Comando mqsimigratemfmaps
Migrando Mapeamentos de Mensagens da Versão 5.0
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2005 Última Atualização: 04/11/2005
ar25255_