Criar o Subfluxo de Mensagem de Débito em Conta Corrente

Utilize as seguintes instruções para criar o subfluxo de mensagem de débito em conta corrente.

  1. Crie um novo fluxo de mensagens:
    1. Clique com o botão direito do mouse no projeto do Message Broker SCANodesSample existente, clique em Novo > Fluxo de Mensagens.
    2. Configure Nome do Fluxo de Mensagens para CurrentAccountDebit e clique em Concluir.
  2. No editor de Fluxo de Mensagens inclua e renomeie os nós relacionados na seguinte tabela.
    Tipo de Nó Nome de Nó
    Input Input
    JavaCompute RetrieveCurrentAccountBalance
    JavaCompute DebitCurrentAccountBalance
    JavaCompute UpdateCurrentAccountBalance
    Saída Saída

  3. Conecte os nós como descrito na tabela a seguir.

    Nome de Nó Terminal Conectar a esse Nó
    Input Out RetrieveCurrentAccountBalance
    RetrieveCurrentAccountBalance Out DebitCurrentAccountBalance
    DebitCurrentAccountBalance Out UpdateCurrentAccountBalance
    UpdateCurrentAccountBalance Out Saída
  4. Customize o nó RetrieveCurrentAccountBalance:
    1. Dê um clique duplo no nó RetrieveCurrentAccountBalance, assegure que o Nome do projeto seja SCANodesSampleJava e clique em Avançar.
    2. Assegure que Pastas de origem no caminho de construção e Pasta de saída padrão contenham SCANodesSampleJava, clique em Avançar.
    3. Configure o Pacote para sca.broker.sample.currentaccount, clique em Avançar.
    4. Selecione o modelo Modificando a classe de mensagem, clique em Concluir.
    5. Clique com o botão direito do mouse no nó RetrieveCurrentAccountBalance, clique em Abrir Java.
    6. Inclua as seguintes instruções de importação:
      import java.io.BufferedReader;
      import java.io.File;
      import java.io.FileReader;
      import java.io.IOException;
      		
    7. Inclua o seguinte código Java:
      MbMessage locEnv = inAssembly.getLocalEnvironment();
      // create new message
      MbMessage newLocEnv = new MbMessage(locEnv);
      BufferedReader bufferedReader = null;
      try {
        //Read the current account balance from the local file system
        File file = null;
        String OS = System.getProperty("os.name").toLowerCase();
        if (OS.indexOf("windows") > -1) {
            file = new File("C:\\tmp\\CurrentAccount.txt");        	
        } else {
            file = new File("/tmp/CurrentAccount.txt");        	
        }
        //Construct the BufferedReader object
        bufferedReader = new BufferedReader(new FileReader(file));
        //Put the current account balance in the LE
        MbElement variables = newLocEnv.getRootElement()
        .createElementAsLastChild
        (MbElement.TYPE_NAME, "Variables", null);
        variables.createElementAsLastChild(MbElement.TYPE_NAME_VALUE,
        "oldBalance",
        bufferedReader.readLine());
      } catch (Exception e) {
        throw new MbUserException(
        CurrentAccount_RetrieveCurrentAccountBalance.class.getName(),
      					"evaluate()",
      					"",
      					"",
      					e.getMessage(),
      					null);
      } finally {
        //Close the BufferedReader
        try {
          if (bufferedReader != null)
            bufferedReader.close();
        } catch (IOException e) {
          throw new MbUserException(
          CurrentAccount_RetrieveCurrentAccountBalance.class.getName(),
          					"evaluate()",
          					"",
          					"",
          					e.getMessage(),
          					null);
        }
      }
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,
      				newLocEnv, inAssembly.getExceptionList(),
      				inAssembly.getMessage());
              
    8. Remova o código Java a seguir pois ele está em conflito com o MbMessageAssembly que você acaba de criar:
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
         		
  5. Customize o nó DebitCurrentAccountBalance:
    1. Dê um clique duplo no nó DebitCurrentAccountBalance, assegure que o Nome do projeto seja SCANodesSampleJava e clique em Avançar.
    2. Assegure que Pastas de origem no caminho de construção e Pasta de saída padrão contenham SCANodesSampleJava, clique em Avançar.
    3. Configure o Pacote para sca.broker.sample.currentaccount, clique em Avançar.
    4. Selecione o modelo Criando classe de mensagem, clique em Concluir.
    5. Clique com o botão direito do mouse no nó DebitCurrentAccountBalance, clique em Abrir Java.
    6. Inclua a seguinte instrução de importação:
      import java.math.BigDecimal;
      		
    7. Inclua o seguinte código Java:
      //Go to tree roots
      MbElement inRoot = inMessage.getRootElement();			
      MbElement outRoot = outMessage.getRootElement();	
      MbMessage locEnv = inAssembly.getLocalEnvironment();
      MbMessage newLocEnv = new MbMessage();
      //Get the operation name
      MbElement sca = locEnv.getRootElement().getFirstElementByPath("SCA");
      MbElement input = sca.getFirstElementByPath("Input");
      MbElement operation = input.getFirstElementByPath("Operation");
      String operationName = operation.getValue().toString();			
      //Get the old balance
      MbElement variables = locEnv.getRootElement().getFirstElementByPath("Variables");
      float oldBalance = Float.parseFloat(variables.getFirstElementByPath("oldBalance").getValue().toString());			
      //Get the amount to transfer
      MbElement soap = inRoot.getFirstElementByPath("SOAP");
      MbElement body = soap.getFirstElementByPath("Body");
      MbElement action = body.getLastChild();
      MbElement request = action.getLastChild();
      MbElement amount = request.getFirstElementByPath("amount");
      float transferValue = Float.parseFloat(amount.getValue().toString());	
      //Calculate the difference
      float newBalance = oldBalance - transferValue;
      MbElement newVariables = newLocEnv.getRootElement().createElementAsLastChild(MbElement.TYPE_NAME, "Variables", null);
      //Setup the message reply
      MbElement newXMLNSC = outRoot.createElementAsLastChild
      (MbXMLNSC.PARSER_NAME);
      MbElement newOperation = newXMLNSC.createElementAsLastChild
      (MbElement.TYPE_NAME,
      operationName + "Response", null);
      newOperation.setNamespace("http://CurrentAccount/");
      MbElement newResponse = newOperation.createElementAsLastChild
      (MbElement.TYPE_NAME,
      "CurrentAccountResponse", null);
      //If the difference is negative then do not accept the
      transfer and retain old balance
      if (newBalance < 0) {	
      newVariables.createElementAsLastChild(MbElement.TYPE_NAME_VALUE,
      "newBalance",
      new BigDecimal(oldBalance).setScale
      (2, java.math.BigDecimal.ROUND_HALF_UP).toString());	
      newResponse.createElementAsLastChild(MbElement.TYPE_NAME_VALUE,
      "accept", "no");
      //Otherwise accept the transfer and set new balance in LE
      } else {	              newVariables.createElementAsLastChild
      (MbElement.TYPE_NAME_VALUE,
      "newBalance", new BigDecimal(newBalance).setScale
      (2, java.math.BigDecimal.ROUND_HALF_UP).toString());	
       newResponse.createElementAsLastChild(MbElement.TYPE_NAME_VALUE,
       "accept", "yes");				
      }
      // Create the new assembly with the new property overrides
      MbMessageAssembly outAssembly = new MbMessageAssembly(
      					inAssembly,
      					newLocEnv,
      					inAssembly.getExceptionList(),
      					outMessage);
              
    8. Remova o código Java a seguir pois ele está em conflito com o MbMessageAssembly que você acaba de criar:
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
         		
  6. Customize o nó UpdateCurrentAccountBalance:
    1. Dê um clique duplo no nó UpdateCurrentAccountBalance, assegure que o Nome do projeto seja SCANodesSampleJava e clique em Avançar.
    2. Assegure que Pastas de origem no caminho de construção e Pasta de saída padrão contenham SCANodesSampleJava, clique em Avançar.
    3. Configure o Pacote para sca.broker.sample.currentaccount, clique em Avançar.
    4. Selecione os modelos Filtrando classe de mensagem, clique em Concluir.
    5. Clique com o botão direito do mouse no nó UpdateCurrentAccountBalance, clique em Abrir Java.
    6. Inclua as seguintes instruções de importação:
      import java.io.BufferedWriter;
      import java.io.File;
      import java.io.FileWriter;
      import java.io.IOException;
      import java.math.BigDecimal;
      		
    7. Inclua o seguinte código Java:
      MbMessage locEnv = assembly.getLocalEnvironment();		 //Read the new balance from the LE MbElement variables =
      locEnv.getRootElement().getFirstElementByPath("Variables"); String newBalance = new
      BigDecimal(variables.getFirstElementByPath ("newBalance").getValue().toString()).setScale(2,
      BigDecimal.ROUND_HALF_UP).toString(); BufferedWriter bufferedWriter = null; try {
        //Update current account balance on local file system
        File file = null;;
        String OS = System.getProperty("os.name").toLowerCase();
        if (OS.indexOf("windows") > -1) {
            file = new File("C:\\tmp\\CurrentAccount.txt");        	
        } else {
            file = new File("/tmp/CurrentAccount.txt");        	
        }
        //Construct the BufferedWriter object
        bufferedWriter = new BufferedWriter(new FileWriter(file));
        //Start writing new balance to the output stream
        bufferedWriter.write(newBalance); } catch (Exception e) {
        throw new MbUserException( CurrentAccount_UpdateCurrentAccountBalance.class.getName(), 					"evaluate()",
      					"", 					"", 					e.getMessage(),
      					null);
      } finally {
        //Close the BufferedWriter
        try {
          if (bufferedWriter != null) {
            bufferedWriter.flush();
            bufferedWriter.close();
          }
        } catch (IOException e) {
          throw new MbUserException( CurrentAccount_UpdateCurrentAccountBalance.class.getName(),
          					"evaluate()",
          					"",
          					"",
          					e.getMessage(),
          					null);
        }
      }
              

Agora você pode criar o subfluxo de mensagem de crédito de conta corrente, consulte Criar subfluxo de mensagem de crédito de conta corrente.

Voltar para Estender a Amostra

Voltar para o Início da Amostra