O Ed enfrentou uma situação onde ele precisava executar uma exportação de uma base de dados Oracle para um arquivo. Para saber o resultado da exportação (sucesso/erro), seria necessário ler um arquivo de log gerado pela própria rotina de exportação.
A primeira tentativa foi feita com a classe Runtime do Java:
public static void main(String[] args) {
String command = "cmd.exe /c EXP <usuario>/<senha>@<instancia> file=<caminho_do_arquivo_do_dump>.dmp log=<caminho_do_arquivo_do_log>_log.log owner=<owner> STATISTICS=NONE";
try {
Runtime.getRuntime().exec(command);
} catch (IOException e) {
e.printStackTrace();
}
}
Essa implementação não supriu a necessidade porque era preciso tratar como chamada síncrona, ou seja, era necessário aguardar a conclusão da exportação para ler o arquivo de Log. O que não estava acontecendo.
Então, através da biblioteca da Apache Commons Exec, o Ed obteve esse sucesso. O código ficou assim:
public static void main(String[] args) {
String command = "cmd.exe /c EXP <usuario>/<senha>@<instancia> file=<caminho_do_arquivo_do_dump>.dmp log=<caminho_do_arquivo_do_log>_log.log owner=<owner> STATISTICS=NONE";
CommandLine cmdLine = CommandLine.parse(command);
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(1);
try {
executor.execute(cmdLine);
} catch (Exception e) {
e.printStackTrace();
}
}
Nenhum comentário:
Postar um comentário