Posts
09/04/2009
Anderson Wagner
mas é isso mesmo
coloque o
System.out.println(“Backup finalizado com sucesso.”)
no final do "FazBackup"
ou depois da chamada dele no main ai depende de você
09/04/2009
Jeferson Mayer
[quote="anderson.wagner"]mas é isso mesmo
coloque o
System.out.println(“Backup finalizado com sucesso.”)
Negativo. O método [b]exec()[/b] irá iniciar um processo separado, então não adianta só fazer isso.
A solução seria obter a instância de [b]Process[/b] retornada pelo método [b]exec()[/b] e chamar [b]waitFor()[/b].
Algo como (mais ou menos pseudo-código):
public class BackupOracle {
private static Process start() {
try {
return Runtime.getRuntime().exec("nao-sei-o-que");
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Process process = start();
process.waitFor();
System.out.println("Fim");
}
}
09/04/2009
Mauricio Souza
jackinabox,
Fiz o que vc falou. Quando boto pra executar um comando simples do oracle para testar a conexao "tnsping dbdoc" funciona, mas quendo coloco um comando pra gerar uma exportaçao como "exp system/******@dbdoc file=dbdoc.dmp log=dbdoc.log direct=y consistent=y" o precesso fica em execucao e dá impressao que travou...e só gera o arquivo de backup e de log quando aborto o processo. Tem alugma coisa que possa facilitar a finalização deste processo?
09/04/2009
Jeferson Mayer
[quote="Morys"]jackinabox,
Quando boto pra executar um comando simples do oracle para testar a conexao "tnsping dbdoc" funciona, mas quendo coloco um comando pra gerar uma exportaçao como [...] o precesso fica em execucao e dá impressao que travou...e só gera o arquivo de backup e de log quando aborto o processo.
Bem, essas coisas às vezes são complicadas... A própria documentação de [b]Process[/b] diz que "Os métodos [b]Runtime.exec[/b] podem não funcionar bem para processos especiais em certas plataformas nativas..."
Diz também que "não é requerido que o processo execute assincronamente ou concorrentemente em relação ao processo Java que o iniciou".
Ou seja, o comportamento não é garantido.
A única idéia que me vem à mente é de que o processo iniciado esteja entupindo ao escrever em [b]stdout[/b] (e/ou [b]stderr[/b]). Nesse caso, você poderia tentar redirecionar as streams padrão do processo na linha de comando, ou capturar essas streams no seu programa Java utilizando [b]Process.getOutputStream()[/b] e [b]Process.getErrorStream()[/b], e ficar monitorando essas streams. Pelo menos por curiosidade, eu faria isso.
Mas, se eu estivesse mais preocupado em "fazer o que deve ser feito", eu faria funcionar através da mais sofisticada comunicação entre processos já inventada: trocas de mensagens através de arquivos, hahaha...! Quando o processo terminar, grava um arquivo. O programa Java fica monitorando e quando o arquivo estiver lá, é porque terminou.
Uma $#%@!, mas deve funcionar...