Caros colegas venho há muitos dias tentando implementar uma rotina de restauração de backup no sistema que estou desenvolvendo.
Estou utilizando Firebird 2.5 + JPA e para o backup/restore a api FBBackupManager.
Meu problema é apenas na opção de restauração, pode sempre é retornada a mensagem de que o banco de dados pode estar em uso.
Postarei a seguir os métodos que implementei, peço aos colegas que me dêem alguma dica de como resolver esse problema.
/*Este método deve ser chamado na tela de login, no momento em que o usuário tentar logar no sistema.*/
public static EntityManager getConexao(Map properties) throws PersistenceException, GDSException {
try {
if (fabrica == null) {
fabrica = Persistence.createEntityManagerFactory("fluxocaixaPU", properties);
}
return fabrica.createEntityManager();
} catch (ClassCastException erro) {
JOptionPane.showMessageDialog(null, "Erro ao gerar a conexão!\n\n" + erro.getMessage());
return null;
}
}
public static void fecharEntityManagerFactory() {
fabrica.close();
fabrica = null;
}
método responsável por disparar a rotina de backup
private void jbtRestaurarActionPerformed(java.awt.event.ActionEvent evt) {
Map<String, String> dados = new HashMap();
fecharConexoes();
try {
//pegar login e senha do usuário que tem poderes para fazer restore do banco de dados.
FBBackupManager backup = new FBBackupManager();
backup.setUser(DadosUsuario.getInstanceOf().getUsuario().getNome());
backup.setPassword(DadosUsuario.getInstanceOf().getUsuario().getSenha());
backup.setPort(3050);
backup.setHost("127.0.0.1");
backup.setDatabase("C:/bd/FluxoCaixa.FDB");
backup.setBackupPath(getRestaurado());
backup.setVerbose(true);
backup.setRestoreReplace(true);
backup.restoreDatabase();
JOptionPane.showMessageDialog(null, "Restauração concluída com sucesso!");
jtxCaminhoRestauracao.setText("");
} catch (SQLException | NullPointerException | PersistenceException e) {
JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage());
e.printStackTrace();
} finally {
try {
dados.put("javax.persistence.jdbc.user", DadosUsuario.getInstanceOf().getUsuario().getNome());
dados.put("javax.persistence.jdbc.password", DadosUsuario.getInstanceOf().getUsuario().getSenha());
//conectando novamente ao banco de dados
FabricaConexao.getConexao(dados);
ConexaoRelatorio.getConexaoNova(dados);
} catch (PersistenceException | GDSException ex) {
JOptionPane.showMessageDialog(null, "Erro: " + ex.getMessage());
}
}
}
private void fecharConexoes() {
//desconecta o banco de dados
FabricaConexao.fecharEntityManagerFactory();
}
, mas funciona.