Foros del Web » Programación para mayores de 30 ;) » Java »

Barra de Progreso en Backup a Postgresql desde Java

Estas en el tema de Barra de Progreso en Backup a Postgresql desde Java en el foro de Java en Foros del Web. Estoy intentando agregar una barra de progreso pero no logro implementar ninguno de los ejemplos encontrados a mi caso, resulta que quiero que mientras se ...
  #1 (permalink)  
Antiguo 21/11/2014, 10:07
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 11 años, 4 meses
Puntos: 2
Exclamación Barra de Progreso en Backup a Postgresql desde Java

Estoy intentando agregar una barra de progreso pero no logro implementar ninguno de los ejemplos encontrados a mi caso, resulta que quiero que mientras se realiza un backup a mi base de datos en postgresql la barra vaya informando el porcentaje de avance de este proceso.

Estoy trabajando con el patrón MVC y el siguiente código es el controlador que ejecuta el backup:

Código Java:
Ver original
  1. public void eventoGenerarBackup() {
  2.         JFileChooser backup = new JFileChooser();
  3.         int resp;
  4.         boolean retorno = true;
  5.         backup.setDialogTitle("Respaldar");
  6.         resp = backup.showSaveDialog(backup);//JFileChooser
  7.         if (resp == JFileChooser.APPROVE_OPTION) {//Si el usuario presiona aceptar; se genera el Backup
  8.             retorno = respaldo.generarBackup(backup.getSelectedFile().toString());
  9.        
  10.             if (retorno) {
  11.                 JOptionPane.showMessageDialog(null, "Operación de Respaldo con Exito");
  12.  
  13.             } else {
  14.  
  15.                 JOptionPane.showMessageDialog(null, "Operación de Respaldo no Exitosa");
  16.  
  17.             }
  18.         } else if (resp == JFileChooser.CANCEL_OPTION) {
  19.             JOptionPane.showMessageDialog(null, "Operación de Respaldo Cancelada");
  20.             retorno = false;
  21.         }
  22.     }

Quisiera que luego de yo llamar al método del modelo:
Código Java:
Ver original
  1. retorno = respaldo.generarBackup(backup.getSelectedFile().toString());
Y antes de verificar la variable (retorno), implementar una barra de progreso que me vaya mostrando el progreso de este proceso que puede llegar a ser bastante tardío.

Muchas gracias de antemano por su ayuda.
  #2 (permalink)  
Antiguo 21/11/2014, 13:23
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Barra de Progreso en Backup a Postgresql desde Java

Buenas,

En principio solo tienes que añadir una JProgressBar e ir actualizando su valor según vas procesando. No veo donde está el problema.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 21/11/2014, 13:32
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Barra de Progreso en Backup a Postgresql desde Java

Si suena sencillo como lo mencionas, pero como puedo ir aumentando la JProgressBar de 1 en 1 conforme se va realizando el backup, donde debo colocar esto? Me podrías dar un ejemplo?
  #4 (permalink)  
Antiguo 22/11/2014, 04:00
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Barra de Progreso en Backup a Postgresql desde Java

Buenas,

No te puedo dar un ejemplo concreto porque no puedo adivinar lo que haces en dicho método de backup. Sin embargo el componente no tiene más misterio que el de incrementar su value según va avanzando el procesado.

Si el backup, por ejemplo, inserta 100 registros, deberías ir actualizando el value del progressbar a cada inserción, o cada cinco inserciones, etc.
Aquí tienes decenas de ejemplos de Jprogressbar: http://www.java2s.com/Code/Java/Swin...sbarSample.htm


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 23/11/2014, 13:39
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Barra de Progreso en Backup a Postgresql desde Java

Este es el método que realiza el backup:

Código Java:
Ver original
  1. public boolean generarBackup(String path) {
  2.         String ruta;
  3.         String hora = getHoraActual();
  4.         String fecha = getFechaActual();
  5.         try {
  6.             Runtime r;
  7.             //concatenar hora con nombre del backup
  8.            
  9.             ruta = path.replace("\\\\", "\\\\\\\\");
  10.            
  11.             //PostgreSQL variables            
  12.             String password = "12345";
  13.             Process p;
  14.             ProcessBuilder pb;
  15.  
  16.             r = Runtime.getRuntime();
  17.            
  18.             pb = new ProcessBuilder("C:\\Archivos de programa\\PostgreSQL\\9.3\\bin\\pg_dump.exe", "-i", "-h", "localhost", "-p", "5432", "-U", "postgres", "-F", "c", "-b", "-v", "-f", ruta, "ihavey");
  19.             //pb = new ProcessBuilder("/opt/PostgreSQL/9.3/bin/pg_dump", "-i", "-h", "localhost", "-p", "5432", "-U", "postgres", "-F", "c", "-b", "-v", "-f", ruta, "integrada");
  20.             pb.environment().put("PGPASSWORD", password);
  21.             pb.redirectErrorStream(true);
  22.             p = pb.start();
  23.             return true;
  24.         } catch (Exception e) {
  25.             JOptionPane.showMessageDialog(new JFrame(), e,
  26.                     "INFORMACION", JOptionPane.ERROR_MESSAGE);
  27.             return false;
  28.         }
  29.     }

En que lugar y como podría ir incrementando la JProgressBar?
  #6 (permalink)  
Antiguo 23/11/2014, 13:55
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Barra de Progreso en Backup a Postgresql desde Java

Buenas,

Lo que haces es hacer una única llamada a un comando externo que no es java y sobre el que no tienes ningún control, por lo que obviamente no puedes saber el progreso de la tarea.

La única posibilidad que veo es que dicho programa (pg_dump.exe) devuelva alguna salida y que puedas

Código Java:
Ver original
  1. p = pb.start();
  2. BufferedReader reader =   new BufferedReader(new InputStreamReader(p.getInputStream()));
  3. String line = "";          
  4. while ((line = reader.readLine())!= null) {
  5.     //Compruebo e interpreto la salida y en función de ello actualizo la barra de progreso si procede
  6. }
  7. return true;



Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 08/05/2015, 15:15
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Barra de Progreso en Backup a Postgresql desde Java

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

Lo que haces es hacer una única llamada a un comando externo que no es java y sobre el que no tienes ningún control, por lo que obviamente no puedes saber el progreso de la tarea.

La única posibilidad que veo es que dicho programa (pg_dump.exe) devuelva alguna salida y que puedas

Código Java:
Ver original
  1. p = pb.start();
  2. BufferedReader reader =   new BufferedReader(new InputStreamReader(p.getInputStream()));
  3. String line = "";          
  4. while ((line = reader.readLine())!= null) {
  5.     //Compruebo e interpreto la salida y en función de ello actualizo la barra de progreso si procede
  6. }
  7. return true;



Un saludo

Gracias por darme tu ejemplo pero creo que es algo un poco complicado de asimilar para mi. Con el código que te pasé anteriormente me podrías ayudar a implementar esta barra de progreso? De nuevo me veo en la necesidad de aplicar esto a un mini proyecto que estoy realizando. Muchas gracias de antemano.

Etiquetas: backup, barra, postgresql, progreso, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:22.