terça-feira, 31 de maio de 2011

Configuração do JDK para o Maven no Eclipse

Ao instalar o plugin do Maven para o Eclipse é solicitado que o Eclipse esteja configurado para trabalhar com JDK. Quando isso não acontece, é exibida uma mensagem semelhante a:


Como a própria mensagem sugere, é preciso realizar duas alterações: uma em Installed JREs e outra em eclipse.ini.

Portanto, cria uma nova entrada em Installed JREs, definindo uma JDK como default do Eclipse.

E em eclipse.ini coloque as linhas da seguinte forma:
-vm
C:\desenvolvimento\java\jdk1.6.0_24\bin\javaw.exe

quinta-feira, 12 de maio de 2011

Execução de comandos de forma síncrona

"Esse post é escrito com a colaboração de "@ed_sobrinho".

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();
}
}