Chamada a Aplicativos e Bibliotecas Externas – Parte 01
Veja neste artigo chamada a aplicativos e bibliotecas externas.
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
<I ><SPAN ><STRONG> </STRONG></SPAN></I>
<B><I ><SPAN lang=EN-US >Process <SPAN >exec</SPAN></SPAN></I></B><I ><SPAN lang=EN-US >(<B>String</B> command)</SPAN></I>
Descrição:
Executa o comando passado através de uma String em um processo separado
Parâmetros:
<I ><SPAN >command</SPAN></I> – Um comando especifico do sistema.
Retorna:
Um objeto <B><I ><SPAN >Process</SPAN></I></B> para poder gerenciar os sub processos
Throws:
<I ><U><SPAN >SecurityException</SPAN></U></I> – se uma gerenciador de segurança (security manager) existir e seu método
<B><I ><SPAN >checkExec</SPAN></I></B> não permitir a criação de um sub processo
<I ><U><SPAN >IOException</SPAN></U></I> – se um erro de I/O ocorrer
<I ><U><SPAN >NullPointerException</SPAN></U></I> – se for passado nulo para a String <I ><SPAN >command</SPAN></I>
<I ><U><SPAN >IllegalArgumentException</SPAN></U></I> – se a String <I ><SPAN >command</SPAN></I> estiver vazia<I ><SPAN ></SPAN></I>
Exemplo:
Process p = Runtime.getRuntime().exec(“/bin/ls”);
<B><I ><SPAN lang=EN-US >Process <SPAN >exec</SPAN></SPAN></I></B><I ><SPAN lang=EN-US >(<B>String</B>[] cmdarray)</SPAN></I>
Descricao:
Executa o comando e seus argumentos passados através de um Array de String em um
processo separado
Parametros:
<I ><SPAN >Cmdarray – array contendo o comando a ser executado e seus argumentos<BR ><BR ></SPAN></I>
Retorna:
Um objeto <B><I ><SPAN >Process</SPAN></I></B> para poder gerenciar os sub processos
Throws:
<I ><U><SPAN >SecurityException</SPAN></U></I> – se uma gerenciador de segurança (security manager) existir e seu método
<B><I ><SPAN >checkExec</SPAN></I></B> não permitir a criação de um sub processo
<I ><U><SPAN >IOException</SPAN></U></I> – se um erro de I/O ocorrer
<I ><U><SPAN >NullPointerException</SPAN></U></I> – se for passado nulo para a String <I ><SPAN >command<BR><U><SPAN >IndexOutOfBoundsException</SPAN></U></SPAN></I> - se <I ><SPAN >cmdarray</SPAN></I> for um array vazio (tem tamanho <I ><SPAN >0</SPAN></I>).<I ><SPAN ></SPAN></I>
Exemplo:
String[] cmd = {"/bin/ls ", "-la"};
Process p = Runtime.getRuntime().exec(cmd);
<B><I ><SPAN lang=EN-US >void</SPAN></I></B> <B><I ><SPAN lang=EN-US >exit</SPAN></I></B><I ><SPAN lang=EN-US >(<B>int</B> status)</SPAN></I>
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:
<I ><SPAN >status</SPAN></I> – status do termino da aplicação. Por padrão qualquer status diferente de zero indica
um termino anormal do programa
Retorna:
nada
Throws:
<I ><U><SPAN >SecurityException</SPAN></U></I> – se uma gerenciador de segurança (security manager) existir e seu método
<B><I ><SPAN >checkExec</SPAN></I></B> não permitir o termino do aplicativo com o status desejado
Exemplo:
Runtime.getRuntime().exit(2);
Ou
System.exit(2);
<B><I ><SPAN lang=EN-US >static </SPAN></I></B>Runtime <B><I ><SPAN lang=EN-US >getRuntime</SPAN></I></B><I ><SPAN lang=EN-US >()</SPAN></I>
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()
<B><I ><SPAN >void</SPAN></I></B> <B><I ><SPAN >halt</SPAN></I></B><I ><SPAN >(<B>int </B>status)</SPAN></I>
Descrição:
Termina forçadamente a Java virtual machine (JVM) que esta em execução.
Parâmetros:
<I ><SPAN >status</SPAN></I> – 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:
<I ><U><SPAN >SecurityException</SPAN></U></I> – se uma gerenciador de segurança (security manager) existir e seu método
<B><I ><SPAN >checkExec</SPAN></I></B> não permitir o termino do aplicativo com o status desejado
Exemplo:
Runtime.getRuntime().halt(2);
<B><I ><SPAN lang=EN-US >void</SPAN></I></B> <B><I ><SPAN lang=EN-US >traceInstructions</SPAN></I></B><I ><SPAN lang=EN-US >(<B>boolean</B> on)</SPAN></I>
Descrição:
Habilita / Desabilita o rastreio das instruções.
Parâmetros:
<I ><SPAN >on</SPAN></I> - <I ><SPAN >true</SPAN></I> habilita o rastreio de instruções; <I ><SPAN >false</SPAN></I> desabilita o rastreio.
Retorna:
Nada.
Throws:
Nada.
Exemplo:
Runtime.getRuntime().traceInstructions(true);
<B><I ><SPAN lang=EN-US >void <SPAN >traceMethodCalls</SPAN></SPAN></I></B><I ><SPAN lang=EN-US >(<B>boolean</B> on)</SPAN></I>
Descrição:
Liga / Desliga o rastreio das chamadas a métodos
Parâmetros:
<I ><SPAN >on</SPAN></I> - <I ><SPAN >true</SPAN></I> habilita o rastreio de chamadas a métodos; <I ><SPAN >false</SPAN></I> desabilita o rastreio.
Retorna:
Nada
Throws:
Nada.
Exemplo:
Runtime.getRuntime().traceMethodCalls(true);
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo