/**
  * * Metodo que sincroniza os bancos de dados
  *
  * @throws RemoteException
  */
 public void sincronizar() throws RemoteException {
   List<TeacherTO> endidadesInseridas = new ArrayList<>();
   List<TeacherTO> endidadesAtualizadas = new ArrayList<>();
   List<TeacherTO> a = postgre.list();
   List<TeacherTO> b = mysql.list();
   List<TeacherTO> c = datastore.list();
   try {
     tx.prepareAll();
     if (mustChanges(a)) {
       for (TeacherTO teacherTO : a) {
         if (!b.contains(teacherTO) || !c.contains(teacherTO)) {
           endidadesInseridas.add(teacherTO);
         } else {
           endidadesAtualizadas.add(teacherTO);
         }
       }
       add(endidadesInseridas, mysql);
       add(endidadesInseridas, datastore);
       update(endidadesAtualizadas, mysql);
       update(endidadesAtualizadas, datastore);
     } else if (mustChanges(b)) {
       for (TeacherTO teacherTO : b) {
         endidadesAtualizadas.add(teacherTO);
       }
       update(endidadesAtualizadas, postgre);
       update(endidadesAtualizadas, datastore);
     } else if (mustChanges(c)) {
       for (TeacherTO teacherTO : c) {
         endidadesAtualizadas.add(teacherTO);
       }
       update(endidadesAtualizadas, mysql);
       update(endidadesAtualizadas, postgre);
     } else {
       throw new RemoteException("Erro ao sincronizar bancos");
     }
     tx.commitAll();
     mrm.setPropBancoHash("bancoHash", gh.hashBanco(c));
   } catch (RemoteException e) {
     e.printStackTrace();
     tx.rollbackAll();
   }
 }
 /**
  * * Método que verifica se houve mudanças em um banco de dados
  *
  * @param list
  * @return
  */
 public Boolean mustChanges(List<TeacherTO> list) {
   if (mrm.getProp("bancoHash").equals(gh.hashBanco(list))) return false;
   return true;
 }
 /**
  * * Metodo que inicia o repositorio com os dados hash do banco
  *
  * @param list
  */
 public void init(List<TeacherTO> list) {
   mrm.setPropBancoHash("bancoHash", gh.hashBanco(list));
   mrm.setDatahash(repo.dataHash(list));
 }