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

Há certos 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 é diferente entre a Versão 5.0 (na qual o formato de arquivo é .mfmap) e a Versão 6.0 (na qual o formato é .msgmap). Os mapas de mensagens da Versão 5.0 têm um modelo de programação processual, que é essencialmente um ESQL alternativo, no qual você descreve todas as etapas requeridas para executar 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 esses mapas de mensagens, a migração é ativada alterando-se o arquivo .mfmap de forma que seções "how to" sejam separadas em uma função ou procedimento ESQL que pode ser chamado pelo mapa de mensagens. O arquivo .mfmap chama o ESQL em vez de contê-lo como uma expressão. O comando mqsimigratemfmaps migra o arquivo .mfmap, mas chama o ESQL em vez de registrar um erro de migração.

Uma limitação é que ESQL (o tempo de execução para os arquivos .mfmap e .msgmap) não pode definir funções que retornam valores do 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 informações e exemplos adicionais sobre como chamar ESQL a partir de mapas, consulte a amostra de mapeamento WebSphere Message Brokers em Ajuda > Samples Gallery > Amostras de Tecnologia > Intermediários de Mensagens > Mapa de Mensagens.

  1. Determine se você pode definir uma função ESQL para o arquivo .mfmap.
    1. Quando o valor de destino é um elemento complexo ou, em termos ESQL, uma REFERENCE, o mapeamento individual deve 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 listada 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 nenhum erro.
    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 a 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.

  • Os arquivos .mfmap que utilizam variáveis de índice mfmap nas 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, pois os arquivos .msgmap ainda não suportam acesso indexado para campos de repetição.

  • Os arquivos .mfmap que utilizam expressões ROW para computar valores:
    src_msg.e IN (1, 2, 3)  
    devem ser regravados em ESQL, pois os arquivos .msgmap não suportam expressões ROW ESQL.
Tarefas relacionadas
Desenvolvendo ESQL
Referências relacionadas
Comando mqsimigratemfmaps
Migração dos Mapeamentos de Mensagens da Versão 5.0
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ar25255_