Dicas de Codificação para Programação de Mediações
Dicas de programação para ajudá-lo quando estiver escrevendo um código de mediação.
- Tenha cuidado para evitar o loop no Caminho de Roteamento de Avanço. Por exemplo, se você definir um destino no caminho que seja o mesmo que o destino atual, a mensagem entrará em círculo infinito, com o caminho de roteamento sendo reconfigurado para o destino atual toda vez. A estrutura de mediação não procura por loops nos caminhos de roteamento.
- Evite o uso dos campos estáticos onde houver possibilidade. Uma única mediação pode ser implementada para processar várias mensagens simultaneamente.
- Não armazene em cache os valores calculados do contexto da mensagem ou do conteúdo da mensagem. Tais valores podem mudar de mensagem para mensagem. A exceção é o armazenamento em cache dos valores derivados unicamente das propriedades da rotina de tratamento de mediação para fins de desempenho.
- A programação de mediação está sujeita às mesmas restrições da programação de um EJB. Para obter informações adicionais sobre a restrições, consulte a Seção 18.1.2 da especificação EJB 1.1.
- Escolha o nível apropriado de controle transacional para sua mediação: por exemplo, é improvável que uma mediação que opere em campos em uma mensagem tenha implicações para controle transacional. No outro extremo, se sua mediação atualizar os campos do banco de dados, ela precisará de controle transacional, e você deve alertar o seu administrador para configurar o sinalizador UseGlobalTransaction na definição de mediação. Esse sinalizador assume um valor Falso.
- Sugestões que se aplicam especificamente ao formato da mensagem:
- É aconselhável verificar se sua mensagem ainda está de acordo com o formato esperado após a função de mediação ter operado nela. Você deve utilizar o método isWellFormed na interface SIMessage para verificar se todos os valores das propriedades da mensagem podem ser serializados e se o gráfico de dados da mensagem está em conformidade com o formato da mensagem.
- Dependendo de como você deseja processar a mensagem, poderá especificar um formato que atende às suas necessidades em vez de aceitar o formato natural. Por exemplo, se você quiser tratar de uma mensagem SOAP como uma cadeia de bytes, use o método getNewDataGraph na interface SIMessage e especifique um formato de JMS/bytes. O getNewDataGraph retorna um novo gráfico de dados SDO que contém uma cópia do conteúdo de carga útil SIMessage na representação em árvore especificada pelo campo de formato, nesse exemplo como uma cadeia de byte.
- É uma boa prática verificar o formato da mensagem no código de mediação porque é improvável que uma mediação processe com êxito uma mensagem com um formato inesperado. Utilize o método getFormat na interface SIMessage.
- A versão de SDO suportada por mediações é somente a Versão 1.
- Devido a uma restrição na interface com o usuário do SDO para a mensagem, os métodos de acesso a mensagens não têm uma cláusula 'throws'. Como resultado, uma exceção
emitida por um método de acesso, em decorrência de um erro de análise ser uma exceção não
verificada. Sua mediação pode capturar uma exceção de análise, verificando a classe de
exceção SIMessageParseException no pacote
com.ibm.websphere.sib.exception.
Utilize um código semelhante ao exemplo a seguir:
try { // Função envolvendo o acesso à mensagem SDO } catch (SIMessageParseException e) { // Verifique a causa real da exceção do tempo de execução e realize uma ação. // É provável que indique uma falha de análise... Throwable cause = e.getCause(); }
Nota: Se uma mediação não capturar o SIMessageParseException, a versão original da mensagem será enviada para o destino de exceção. - Ao implementar a mediação, atribua à rotina de tratamento e à lista de rotinas de tratamento, nomes descritivos e memoráveis.
- Ao implementar uma única mediação em um único destino, utilize exatamente o mesmo nome para a sua rotina de tratamento de mediação, a lista de rotina de tratamento de mediação e o objeto de mediação no console administrativo.
- Por motivos de desempenho, especifique as regras do seletor de modo que a mediação medie os subconjuntos requeridos apenas das mensagens que passam por meio de um destino.