Fórum Duvida com Timer Beans #424533
24/09/2012
0
Tenho um ejb contendo 2 métodos que geram backp do banco de dados. Ambos anotados como timer beans e funcionam normalmente. porém já tive problemas umas 4 vezes com os mesmos, a classe está em ambiente de produção e diariamente é executada, porém os casos de problema ocorreram aparentemente a uma reinicialização forçada um dos métodos é disparado em loop e começa a gerar arquivos em disco, meu backup atual tem 1.4M compactado, os arquivos gerados são em torno de 2k.
segue a classe.
alguma sugestão de qual seria o problema e uma possivel solução??
outra coisa este timer bean estão programados em horários específicos, nestes casos aparentemente os mesmos são disparados após o servidor reinicializar, isto é correto??
segue a classe.
package br.com.usinaweb.secom.util;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.LocalBean;
import javax.ejb.Schedule;
import javax.ejb.Stateless;
import org.apache.commons.mail.EmailException;
/**
*
* @author Rogério Martins da Silva 08/03/2012 http://www.usinaweb.inf.br
*/
@Stateless
@LocalBean
public class UsinaBackup {
@Schedule(hour = "5", minute = "00")
public void backupDiario() {
try {
StringBuilder sb = new StringBuilder();
String nomeBackup = this.geraNomeBackup("Bkp_Diario");
sb.append("mysqldump -uroot -psenha --default-character-set=utf8 --routines secom > ");
sb.append(nomeBackup);
Process processo = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", sb.toString()});
int retornoProcesso = processo.waitFor();
if (retornoProcesso == 0) {
//compacta o arquivo
String nomeCompactado = nomeBackup.substring(0, nomeBackup.indexOf(".")).concat(".zip");
UsinaCompactador.compactarParaZip(nomeCompactado, nomeBackup);
String nomeBkp = "Bkp_SECOM_CCFRV";
SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyyyy");
nomeBkp = nomeBkp.concat(dateFormat.format(new Date()));
nomeBkp = nomeBkp.concat(".zip");
//envia o email
UsinaEmailAnexo emailAnexo = new UsinaEmailAnexo();
emailAnexo.setAssunto("Backup Diário CPMG-CCF");
emailAnexo.setDe("secom@usinaweb.inf.br", "SECOM");
emailAnexo.setPara("backup@usinaweb.inf.br", "Backup Sistemas UsinaWeb");
emailAnexo.setMensagemTextoSimples("Backup Diário da unidade de Rio Verde ");
emailAnexo.setNome(nomeBkp);
emailAnexo.setDescricaoAnexo("Backup Dia");
emailAnexo.setCaminhoArquivoLocal(nomeCompactado);
emailAnexo.adicionarAnexo();
emailAnexo.enviaEmail();
}
} catch (EmailException ex) {
Logger.getLogger(UsinaBackup.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(UsinaBackup.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(UsinaBackup.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Schedule(hour = "19", minute = "00", dayOfWeek = "Fri")
public void backupSemanal() {
try {
StringBuilder sb = new StringBuilder();
sb.append("mysqldump -uroot -pcpmgccf --default-character-set=utf8 --routines secom > ");
sb.append(this.geraNomeBackup("Bkp_Semanal"));
Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", sb.toString()});
} catch (IOException ex) {
Logger.getLogger(UsinaBackup.class.getName()).log(Level.SEVERE, null, ex);
}
}
private String geraNomeBackup(String nome) {
SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyyyyHHmmss");
String nomeBackup = "/bkp/";
nomeBackup = nomeBackup.concat(nome.concat("_SECOM_"));
nomeBackup = nomeBackup.concat(dateFormat.format(new Date()));
nomeBackup = nomeBackup.concat(".sql");
return nomeBackup;
}
}
alguma sugestão de qual seria o problema e uma possivel solução??
outra coisa este timer bean estão programados em horários específicos, nestes casos aparentemente os mesmos são disparados após o servidor reinicializar, isto é correto??
Rogério Martins
Curtir tópico
+ 0
Responder
Posts
04/10/2012
Rogério Martins
ninguem??
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)