Artigo
· Maio 20, 2021 5min de leitura

Migrando do Java Business Host para o PEX

Migrando do Java Business Host para o PEX

Com o lançamento do PEX a partir do InterSystems IRIS 2020.1 e InterSystems IRIS for Health 2020.1, nossos clientes tem agora uma melhor forma de utilizar Java nas Produções de interoperabilidade que através da utilização do Java Business Host. O PEX (Production EXtension) disponibiliza um conjunto completo de APIs para criar componentes de interoperabilidade e está disponível tanto em Java quanto em .NET. O Java Business Host foi descontinuado e será aposentado em versões futuras.

Vantagens do PEX

  • Permite que desenvolvedores criem qualquer componente da Produção de interoperabilidade em Java ou em .NET
  • Estruturas de mensagens mais complexas podem ser enviadas através dos componentes
  • Configurações simplificadas
  • Fluxo de trabalho simplificado , sem utilização de ObjectScript.

O resto deste artigo está focado em como realizar a migração de código existente do Java Business Host para o PEX.

Visão Geral

As classes e interfaces utilizadas pelo PEX são diferentes das do Java Business Host (JBH). Nós iremos disponibilizar uma visão geral das diferenças neste artigo mas a documentação completa te dará maior profundidade sobre o assunto.

Convertendo um Business Service do Java Business Host para o PEX

Para criar um Business Service PEX você precisará implementar a com.intersystems.enslib.pex.BusinessService ao invés da com.intersystems.gateway.bh.BusinessService.

O padrão de design utilizado pelo PEX para Business Service mudou de um onde era esperado que o serviço iniciasse o processo de produção de mensagens para o padrão onde o serviço implementa uma função que é invocada periodicamente para produzir mensagens.

No JBH, seu código seria algo como isso

  @Override
  public boolean OnInit(Production p) throws Exception {
    production = p;

    if (messageThread == null) {
      Messager messager = new Messager();
      messageThread = new Thread(messager);
      messageThread.start();
    }

    return true;
  }

No PEX, você precisa apenas implementas três funções

  public void OnInit() throws Exception {
    // Inicialização
    return;
  }

  public Object OnProcessInput(Object messageInput) throws Exception {
    // Aqui é onde você invoca a SendMessage() ou SendMessageAsync()

    return null;
  }

  public void OnTearDown() throws Exception {
    // Desligar
    return;
  }

Você também precisará alterar como as configurações são utilizadas, mensagens são entregues e onde o registro de log é feito. Falaremos mais sobre estas alterações abaixo.

Convertendo um Business Operation do Java Business Host para PEX

Para criar um Business Operation PEX você precisará implementar a com.intersystems.enslib.pex.BusinessOperation ao invés da com.intersystems.gateway.bh.BusinessOperation.

O padrão de design para os Business Operations é estruturalmente o mesmo entre o JBH e o PEX entretanto os parâmetros para os dois principais pontos de entrada forma alterados.

Mudanças no OnInit()

No PEX o OnInit() não recebe parâmetros.

Mudanças no OnMessage()

No PEX o OnMessage() recebe um Object genérico no lugar da String utilizada no JBH. Isto permite que o criador da produção de interoperabilidade envie qualquer tipo de mensagem desejada.

No JBH sua aplicação ficaria mais ou menos algo assim:

  public boolean OnMessage(String message) throws Exception {
    // Lógica de negócio aqui
    return true;
  }

No PEX o parâmetro é um Objeto Java genérico, que você deve instanciar apropriadamente, que permite que você transmita mensagens mais complexas que apenas strings. Aqui está um exemplo de como extrair uma requisição que é do tipo file stream.

  public Object OnMessage(Object request) throws Exception {
    com.intersystems.jdbc.IRISObject streamContainer = (com.intersystems.jdbc.IRISObject)request;
    com.intersystems.jdbc.IRISObject str = (com.intersystems.jdbc.IRISObject)streamContainer.get("Stream");
    String originalFilename = (String)streamContainer.get("OriginalFilename");

    Long contentSize = (Long)str.get("Size");
    String content = (String)str.invoke("Read", contentSize);

    // Lógica de negócio aqui

    return null;
  }

Você também precisará alterar como as configurações são utilizadas, mensagens são entregues e onde o registro de log é feito. Falaremos mais sobre estas alterações abaixo.

Settings

A declaração das configurações também foi simplificada.

No JBH as configurações era declaradas através da string SETTINGS e recuperada através de código, algo como isso:

  String setting = production.GetSetting("Min");
  if (!setting.isEmpty()) {
    min = Integer.parseInt(setting);
  }

No PEX as configurações são apenas campos de membros públicos, desta forma elas são automaticamente carregadas quando a classe é instanciada.

  public int Min = 0;

Qualquer campo de membro público está disponível para ser atribuído em sua produção de interoperabilidade desde que o campo do membro seja um tipo base Java (String, int, etc.).

Mensagens

O envio de Mensagens no PEX é mais poderoso. No JBH mensagens são enviadas como strings. No PEX as mensagens são enviadas como objetos - tanto IRISObject, para objetos definidos em ObjectScript, ou uma subclasse subclass of com.intersystems.enslib.pex.Message, para classes definidas em Java.

No JBH seu código seria algo assim

  production.SendRequest(value.toString());

No PEX seria algo como isso

  MyExampleMessageClass req = new MyExampleMessageClass("mensagem a ser enviada"); 
  SendRequestAsync(Target, req);

Logging

As funções para registro de Logs são todas similares, apenas nomeadas de forma diferente.

No PEX você registraria uma mensagem informativa através da LOGINFO()

  LOGINFO("mensagem recebida");

Gateway de Objetos

O Java Business Host precisava de seu próprio gateway. Com o PEX você pode utilizar um Java gateway apenas para toda sua necessiade de Java. Ou então usar vários, você escolhe. Aqui você encontra uma boa introdução ao gateway.

Conclusão e Feedback

Se você ainda não experimentou utilizar o PEX, o que falta ? O PEX disponibiliza a habilidade de resolver uma quantidade muito mais ampla de problemas de negócio com menos codificação, além de permitir que agora tudo também seja feito em .NET.

Se você tiver dúvidas ou problemas migrando suas aplicações de JBH para PEX, entre em contato conosco pelo WRC.

Discussão (0)1
Entre ou crie uma conta para continuar