Chamada a Aplicativos e Bibliotecas Externas – Parte 01

por Paulo Campos

Diversas vezes durante a integração de um sistema ou durante o desenvolvimento de alguma aplicação / servlet para um ambiente corporativo, baseado em diversos sistemas e ferramentas diferentes, nos deparamos com a necessidade de interagir com programas de terceiros ou com o próprio sistema operacional.

Temos dois meios de resolver esse pequeno contra-tempo:

    1 – Executar ferramentas e/ou aplicações através de um programa Java

    2 – Utilizar métodos nativos em seu programa (Esse será explicado na 2ª parte dessa matéria)


Execução de Ferramentas e/ou Aplicativos através de seu programa Java

Primeiramente, vamos levantar uma questão importante: Utilizando-se de qualquer um dos métodos você perderá portabilidade, pois vamos estar, muitas vezes, executando comandos ou aplicações especificas de um sistema operacional, o que impossibilitaria portar nossa aplicação. Em segundo plano, devemos levar em consideração que a utilização de bibliotecas nativas em Java e bem mais complexo do que a execução de programas. Dados os devidos alertas, vamos começar!

 

Assim como na linguagem C temos a função fork(), em Java temos a classe Runtime[1] e o método exec(), que será o que utilizaremos para realizar nossa tarefa. Devemos levar em consideração que diferente da função fork(), o método exec() não lhe da a possibilidade de controlar diretamente o ambiente de execução, ele simplesmente lhe fornece uma interface para a execução de aplicativos e/ou comandos dependentes da plataforma onde rodam. Tendo em vista um ambiente empresarial onde diferentes aplicações precisam coexistir, usar Runtime.exec() ao custo de portabilidade pode ser uma ótima opção.

 

[1] Classe Runtime – Métodos Mais Utilizados

 

Process exec(String command)


     
Descrição:

Executa o comando passado através de uma String em um processo separado

      Parâmetros:

         command – Um comando especifico do sistema.

 

      Retorna:

Um objeto Process para poder gerenciar os sub processos

 

      Throws:

SecurityException – se uma gerenciador de segurança (security manager) existir e seu método
                                  
checkExec não permitir a criação de um sub processo

IOException – se um erro de I/O ocorrer

NullPointerException – se for passado nulo para a String command

IllegalArgumentException – se a String command estiver vazia

 

      Exemplo:

Process p = Runtime.getRuntime().exec(“/bin/ls”);

 

Process exec(String[] cmdarray)

 

      Descricao:

Executa o comando e seus argumentos passados através de um Array de String em um
             processo separado

 

      Parametros:

Cmdarray – array contendo o comando a ser executado e seus argumentos

      Retorna:

Um objeto Process para poder gerenciar os sub processos

 

      Throws:

SecurityException – se uma gerenciador de segurança (security manager) existir e seu método
                                  
checkExec não permitir a criação de um sub processo

IOException – se um erro de I/O ocorrer

NullPointerException – se for passado nulo para a String command
     IndexOutOfBoundsException
- se cmdarray for um array vazio (tem tamanho 0).

 

      Exemplo:

String[] cmd = {"/bin/ls ", "-la"};

Process p = Runtime.getRuntime().exec(cmd);

 

 

void exit(int status)

      Descrição:

Termina a Java virtual machine (JVM) que está em execução iniciando sua seqüência de
             desligamento. Sua forma mais comum de uso é chamando System.exit(int status) .

 

      Parâmetros:

         status – status do termino da aplicação. Por padrão qualquer status diferente de zero indica
                               um termino anormal do programa

 

      Retorna:
         nada

 

      Throws:

SecurityException – se uma gerenciador de segurança (security manager) existir e seu método
                                  
checkExec não permitir o termino do aplicativo com o status desejado

 

      Exemplo:

Runtime.getRuntime().exit(2);

Ou

System.exit(2);

 

 

static Runtime getRuntime()

      Descrição:

Retorna o Objeto Runtime associado a aplicação java executada

 

      Parâmetros:
         nenhum

 

      Retorna:
         O objeto Runtime associado a aplicação Java executada

 

 

      Throws:

         nada

 

      Exemplo:

Runtime.getRuntime()

 

void halt(int status)

      Descrição:

Termina forçadamente a Java virtual machine (JVM) que esta em execução.

      Parâmetros:

         status – status do termino da aplicação. Por padrão qualquer status diferente de zero indica
                               um termino anormal do programa. Se o método exit() já tiver sido invocado, então, o 
                               código de status do método halt() vai sobrepor código de status do método exit();

 

      Retorna:
         nada

 

      Throws:

SecurityException – se uma gerenciador de segurança (security manager) existir e seu método
                                  
checkExec não permitir o termino do aplicativo com o status desejado

      Exemplo:

Runtime.getRuntime().halt(2);

 

 

void traceInstructions(boolean on)

      Descrição:

Habilita / Desabilita  o rastreio das instruções.

 

      Parâmetros:

on - true habilita o rastreio de instruções; false desabilita o rastreio.

      Retorna:
         Nada.

      Throws:

         Nada.

      Exemplo:

Runtime.getRuntime().traceInstructions(true);

 

void traceMethodCalls(boolean on)


      Descrição:

      Liga / Desliga o rastreio das chamadas a métodos

 

      Parâmetros:

on - true habilita o rastreio de chamadas a métodos; false desabilita o rastreio.

      Retorna:
         Nada

 

      Throws:

         Nada.

 

      Exemplo:

Runtime.getRuntime().traceMethodCalls(true);