Duvida com Timer Beans

Java

24/09/2012

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.

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

Rogério Martins

Curtidas 0

Respostas

Rogério Martins

Rogério Martins

24/09/2012

ninguem??
GOSTEI 0
POSTAR