Java - programa parace corriendo aun despues de haber terminado

 
Vista:

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 08/04/2015 00:17:43
Estoy testeando un programa y despues de haber terminado me sigue saliendo en la ventana de OUTPUT como si el programa estuviera corriendo

Alguien me puede decir a que se debe?
este es el codigo de testeo


import com.mps.dao.HibernateUtil;
import com.mps.dao.InterfaceMenu;
import com.mps.modelo.Menu;
import com.mps.modelo.Programa;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import com.mps.dao.MenuDao;
import com.mps.modelo.Aplicacion;
import com.mps.modelo.PerfilPrograma;
import java.awt.List;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import org.hibernate.Query;


/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author MMENDINUETA
*/
public class Test {

public static void main(String args[]) {
// /*
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
ArrayList<Aplicacion> lstAplicacion = new ArrayList();
ArrayList<PerfilPrograma> lstPerfilPrograma = new ArrayList();
ArrayList<Menu> lstMenu = new ArrayList();
ArrayList<Programa> lstPrograma = new ArrayList();
//Programa prg = new Programa();
Integer codigoAplicacion = 1;
Integer codigoPerfil = 1;
String cmdSql = new String();
try {
//ArrayList<Programa> prg_new =new ArrayList();
/*
cmdSql = "Select f FROM PerfilPrograma f LEFT JOIN FETCH f.programa prg "
+ "LEFT JOIN FETCH f.programa.menu mnu "
+ "LEFT JOIN FETCH f.programa.aplicacion apl "
+ "LEFT JOIN FETCH f.perfil prf "
+ "Where prf.perfilId=:codigoPerfil and apl.aplicacionId=:codigoAplicacion ";
*/
cmdSql = "Select prfprg "
+ "FROM PerfilPrograma prfprg "
+ "LEFT JOIN prfprg.programa prg "
+ "LEFT JOIN prfprg.programa.menu mnu "
+ "LEFT JOIN prfprg.programa.aplicacion apl "
+ "LEFT JOIN prfprg.perfil prf "
+ "Where apl.aplicacionId=:codigoAplicacion and prf.perfilId=:codigoPerfil "
+ "Order By apl.aplicacionOrden,mnu.menuOrden,prfprg.perfilProgramaOrden ";

//listaMenu.addAll(session.createQuery(cmdSql).list());
Query jQuery = session.createQuery(cmdSql);
jQuery.setParameter("codigoAplicacion", codigoAplicacion);
jQuery.setParameter("codigoPerfil", codigoPerfil);
lstPerfilPrograma.addAll(jQuery.list());
//session.close();
/*
Set<Menu> mnu = new LinkedHashSet<Menu>(lista);
lista.clear();
lista.addAll(mnu);
*/
// /*
/*Llenamos la lista de programas */
for (PerfilPrograma prf : lstPerfilPrograma) {
lstPrograma.add(prf.getPrograma()); //Llenamos los programas de la opcion del menu
lstMenu.add(prf.getPrograma().getMenu()); //Llenamos el menu
lstAplicacion.add(prf.getPrograma().getAplicacion()); //Llenamos la aplicacion

}
/*Borramos las aplicaciones que estan repetidas */
Set<Aplicacion> apl_new = new LinkedHashSet<Aplicacion>(lstAplicacion);
lstAplicacion.clear();
lstAplicacion.addAll(apl_new);
/*Borramos las opciones del menu que estan repetidas */
Set<Menu> mnu_new = new LinkedHashSet<Menu>(lstMenu);
lstMenu.clear();
lstMenu.addAll(mnu_new);
//
for (Menu mnu : lstMenu) {
JOptionPane.showMessageDialog(null, "id :" + mnu.getMenuId() + " programaNombre: " + mnu.getMenuNombre());
//JOptionPane.showMessageDialog(null," Menu id :" + prg.getMenu().getMenuId()+"Nombre: "+prg.getMenu().getMenuNombre());
//JOptionPane.showMessageDialog(null,"Programa id :" + prg.getProgramaId()+"Nombre: "+prg.getProgramaNombre());
}
if (!tx.wasCommitted()) {
tx.commit();
}
session.close();

} catch (Exception ex) {
// if (tx!=null)
// {
// tx.rollback();
// }
//throw new RuntimeException("No se pudo actualizar la clase");
throw new RuntimeException(ex.getMessage());
} finally {
HibernateUtil.closeSessionFactory();
// session.close();

}
// */
/*
ArrayList<Menu> lista = new ArrayList();
InterfaceMenu dao = new MenuDao();
lista.addAll(dao.lista());
for (Menu mnu : lista) {
JOptionPane.showMessageDialog(null,"Id :"+ mnu.getMenuId()+" Nombre :"+mnu.getMenuNombre());
}
// */

}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

programa parace corriendo aun despues de haber terminado

Publicado por Fernando (82 intervenciones) el 09/04/2015 19:04:00
tiene que se que te queda corriendo algun proceso, verifica bien los metodos alguno se queda esperando respuesta, es dificil correr el codigo pues sin la base de datos no funciona lo que dificulta brindarte ayuda , pero debe de ser algun metodo que se queda esperando respuesta o alguna variable
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 09/04/2015 19:42:17
Este es el metodo que estoy llamando

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mps.dao;
 
import com.mps.modelo.Aplicacion;
import com.mps.modelo.Menu;
import com.mps.modelo.PerfilPrograma;
import com.mps.modelo.Programa;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.swing.JOptionPane;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
 
/**
 *
 * @author MMENDINUETA
 */
public class MenuDao implements InterfaceMenu {
 
    private ArrayList<Aplicacion> lstAplicacion = new ArrayList();
    private ArrayList<PerfilPrograma> lstPerfilPrograma = new ArrayList();
    private ArrayList<Menu> lstMenu = new ArrayList();
    private ArrayList<Programa> lstPrograma = new ArrayList();
 
    public MenuDao() {setMenuAcordeon();
    }
 
    public ArrayList<Aplicacion> getLstAplicacion() {
        return lstAplicacion;
    }
 
    public ArrayList<PerfilPrograma> getLstPerfilPrograma() {
        return lstPerfilPrograma;
    }
 
    public ArrayList<Menu> getLstMenu() {
        return lstMenu;
    }
 
    public ArrayList<Programa> getLstPrograma() {
        return lstPrograma;
    }
 
    @Override
    public ArrayList<Menu> lista() {
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction tx;
        ArrayList<Menu> lista = new ArrayList();
        tx = session.beginTransaction();
        String sqlString = new String();
        sqlString = "SELECT NEW com.mps.modelo.Menu(f.menuId,f.menuNombre,f.menuOrden,f.programas) FROM Menu f  ";
        Query cmdSql = session.createQuery(sqlString);
        // Query cmdSql = session.createQuery("From Menu f inner join fetch f.programas");
        //cmdSql.setParameter("codigo","100");
        lista.addAll(cmdSql.list());
        tx.commit();
        session.close();
        sessionFactory.close();
        return lista;
    }
 
    @Override
 
    public void setMenuAcordeon() {
 
        SessionFactory sessionFactory =  HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        Integer codigoAplicacion = 2;
        Integer codigoPerfil = 1;
        String cmdSql = new String();
        ///
        cmdSql = "Select prfprg "
                + "FROM PerfilPrograma prfprg "
                + "LEFT JOIN  prfprg.programa prg "
                + "LEFT JOIN  prfprg.programa.menu mnu "
                + "LEFT JOIN  prfprg.programa.aplicacion apl "
                + "LEFT JOIN  prfprg.perfil prf "
                + "Where apl.aplicacionId=:codigoAplicacion and prf.perfilId=:codigoPerfil "
                + "Order By apl.aplicacionOrden,mnu.menuOrden,prfprg.perfilProgramaOrden ";
 
        Query jQuery = session.createQuery(cmdSql);
        jQuery.setParameter("codigoAplicacion", codigoAplicacion);
        jQuery.setParameter("codigoPerfil", codigoPerfil);
        if (lstPerfilPrograma == null || lstPerfilPrograma.size()==0) {
            lstPerfilPrograma.addAll(jQuery.list());
            for (PerfilPrograma prf : lstPerfilPrograma) {
                if (!Hibernate.isInitialized(prf.getPrograma())) {
                    Hibernate.initialize(prf.getPrograma());
                }
                lstPrograma.add(prf.getPrograma()); //Llenamos los programas de la opcion del menu
                if (!Hibernate.isInitialized(prf.getPrograma().getMenu())){
                    Hibernate.initialize(prf.getPrograma().getMenu());
                }
                lstMenu.add(prf.getPrograma().getMenu()); //Llenamos el menu
                if (!Hibernate.isInitialized(prf.getPrograma().getAplicacion())){
                    Hibernate.initialize(prf.getPrograma().getAplicacion());
                }
                lstAplicacion.add(prf.getPrograma().getAplicacion()); //Llenamos la aplicacion
            }
            /*Borramos las aplicaciones que estan repetidas */
            Set<Aplicacion> apl_new = new LinkedHashSet<Aplicacion>(lstAplicacion);
            lstAplicacion.clear();
            lstAplicacion.addAll(apl_new);
            /*Borramos las opciones del menu que estan repetidas */
            Set<Menu> mnu_new = new LinkedHashSet<Menu>(lstMenu);
            lstMenu.clear();
            lstMenu.addAll(mnu_new);
            //
        }
        tx.commit();
        session.close();
        sessionFactory.close();
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa parace corriendo aun despues de haber terminado

Publicado por Alberto (303 intervenciones) el 09/04/2015 20:09:29
Hola...

Porque no intentas cerrando las conexiones a la base de datos, posiblemente tiene conexiones abiertas y por eso parece como si estuviera ejecutando.

Cambia el @Override por esto, @Transactional, esto cerrara las conexiones una vez termina las transacciones a la base de datos. Debes tener en cuenta en hacer este proceso de cambiar la línea mencionada anteriormente en todos los métodos que tengas que hacen una llamada a la base de datos, de esa manera se cerraran todas las conexiones abiertas que tengas en tu app.

Nos comentas que tal te fue, cualquier duda y/o comentario, aquí estamos. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 09/04/2015 20:28:23
Nada igual manda el mismo error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 09/04/2015 20:46:32
En trace el error que manda es en esta linea :
Session session = sessionFactory.openSession();
y este es mi codigo de HibernateUtil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mps.dao;
 
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
 
public class HibernateUtil {
private static SessionFactory sessionFactory;
 
    public static SessionFactory getSessionFactory() {
        try {
            if (sessionFactory == null) {
                //Configuration configuration = new Configuration().configure(HibernateUtil.class.getResource("/hibernate.cfg.xml"));
                Configuration configuration = new Configuration().configure();
                ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
                //StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
                sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            }
        } catch (HibernateException he) {
            //System.err.println("Error creating Session: " + he);
            throw new ExceptionInInitializerError("Error al crear la session "+ he);
        }
        return sessionFactory;
    }
    public static void closeSessionFactory() {
        sessionFactory.close();
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa parace corriendo aun despues de haber terminado

Publicado por Alberto (303 intervenciones) el 09/04/2015 21:41:31
Intenta con lo siguiente.

Session session = HibernateUtil.getSessionFactory().openSession();

Teniendo en cuenta que ya tienes tu clase HibernateUtil.

Comentamos que tal te fue. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 09/04/2015 22:26:50
Nada sigue saliendo.
No tendrá eso que ver con la cache?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa parace corriendo aun despues de haber terminado

Publicado por Alberto (303 intervenciones) el 09/04/2015 22:31:44
Es una AppWeb?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 09/04/2015 22:33:51
Si, JSF e Hibernate y Sql Server
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa parace corriendo aun despues de haber terminado

Publicado por Alberto (303 intervenciones) el 09/04/2015 22:39:10
Para descartar la cache vamos a limpiarla...

No estoy seguro de como se hace en NetBeans pero si estas usando Eclipse primero detén el server, luego selecciona el proyecto y en la ventana de herramientas selecciona Project > Clean... > Clean projects selected below > OK.

Espera a que termine, la verdad no tarda mucho, y vuelve a intentar nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 09/04/2015 22:43:07
Utilizo Netbeans y prácticamente eso lo hago y después compilo, ejecuto el proyecto y la primera vez corre bien pero ya después me manda el error, para que lo vuelva a ejecutar nuevamente bien debo reiniciar el glassfish o el equipo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa parace corriendo aun despues de haber terminado

Publicado por Alberto (303 intervenciones) el 09/04/2015 22:46:11
Ya has intentado realizar un Debug a tu aplicación, de esa manera podrás ver que método y/o variable queda al final...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 09/04/2015 22:55:09
Si ya lo hice, y cuando la ejecuto a modo de debut lo hace bien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa parace corriendo aun despues de haber terminado

Publicado por Alberto (303 intervenciones) el 09/04/2015 23:20:20
Intentaremos "forzar" el cierre del App...

Esta línea de código debe ser la ultima de tu lógica de negocio; es decir, cuando estes seguro que ya termino completamente y de manera correcta.

System.exit(0);

Nos comentas que tal te fue. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

programa parace corriendo aun despues de haber terminado

Publicado por Marco Mendinueta (19 intervenciones) el 10/04/2015 20:36:18
Listo resuelto. Como siempre era algo sencilo que se veia a simple vista y por eso no me daba cuenta.

Resulta que la clase HibernateUtil la sessionFactory es estatica y conserva su valor entre llamadas y yo pretendia crear una sessionFactory cada que hacia una consulta a la base de datos por eso hay que quitar la linea
sessionFactory = HibernateUtil.getSessionFactory();
y crear la session de la siguiente manera
Session session = HibernateUtil.getSessionFactory().openSession();
y listo resolvio mi problema.

A todos aquellos que me colaboraron muchas gracias y que me disculpen si los vuelvo a molestar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar