1

I'm doing a project in java web, with hibernate, springframework, and glassfish.

When executing the project it falls it is showing the following error:

Glassfish

Grave:   could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
    at com.pojos.Aplicacion$$EnhancerByCGLIB$$abe88be6.getVersionApp(<generated>)
    at com.beans.LoginSdiBean.logear(LoginSdiBean.java:98)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)

Grave:   org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
    at com.pojos.Aplicacion$$EnhancerByCGLIB$$abe88be6.getVersionApp(<generated>)
    at com.beans.LoginSdiBean.logear(LoginSdiBean.java:98)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)

Hibernate

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://star.elrio.cl:3306/star?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">usuario</property>
    <property name="hibernate.connection.password">clave</property>
    <mapping resource="com/DatosOcOriginal.hbm.xml"/>
    <mapping resource="com/Usuario.hbm.xml"/>
    <mapping resource="com/EstadosOc.hbm.xml"/>
    <mapping resource="com/ProyectoCompras.hbm.xml"/>
    <mapping resource="com/Agendamiento.hbm.xml"/>
    <mapping resource="com/Solicitud.hbm.xml"/>
    <mapping resource="com/UsuarioAplicacion.hbm.xml"/>
    <mapping resource="com/Aplicacion.hbm.xml"/>
    <mapping resource="com/AplicacionVersion.hbm.xml"/>
    <mapping resource="com/Propiedad.hbm.xml"/>
    <mapping resource="com/Proyecto.hbm.xml"/>
    <mapping resource="com/DatosCorreo.hbm.xml"/>
    <mapping resource="com/ProyectoTi.hbm.xml"/>
    <mapping resource="com/EventoUsuario.hbm.xml"/>
    <mapping resource="com/Componente.hbm.xml"/>
    <mapping resource="com/Permiso.hbm.xml"/>
    <mapping resource="com/NotaProyecto.hbm.xml"/>
    <mapping resource="com/ArchivosCargados.hbm.xml"/>
    <mapping resource="com/DatosOc.hbm.xml"/>
    <mapping resource="com/Email.hbm.xml"/>
    <mapping resource="com/Evento.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

Where it stops working

 Map<String, UsuarioAplicacion> aplicaciones = usuario.getAplicaciones();
                        System.out.println("aplicacion key"+ aplicaciones.keySet());
                        Set<String> keySet = aplicaciones.keySet();
                        DefaultMenuItem item = null;
                        UsuarioAplicacion ua = null;
                        for (String key : keySet) {
                            ua = (UsuarioAplicacion) aplicaciones.get(key);
            HERE FALLS      item = new DefaultMenuItem(ua.getAplicacion().getNombre());
                            item.setUrl(ua.getAplicacion().getUrl());
                            item.setTitle(ua.getAplicacion().getDescripcion());
                            item.setIcon("../resources/images/" + ua.getAplicacion().getIcono());

                            menuAplicaciones.addElement(item);
                        }

Application

public class Aplicacion  implements java.io.Serializable {

     private String codAplicacion;
     private String nombre;
     private String lenguaje;
     private String autor;
     private Date fechaImplementacion;
     private String descripcion;
     private String versionApp;
     private String url;
     private String icono;
     private Set componentes = new HashSet(0);
     private Set usuarioAplicacions = new HashSet(0);
     private Set propiedads = new HashSet(0);

     private boolean asignada;

     public static final String APLICACION_SDI = "SDI";

     public static final String MSJ_EXITO_ASIGNAR = "Asignación de aplicación actualizada correctamente";

    public Aplicacion() {
    }


    public Aplicacion(String codAplicacion, String nombre, String autor, Date fechaImplementacion, String descripcion, String versionApp) {
        this.codAplicacion = codAplicacion;
        this.nombre = nombre;
        this.autor = autor;
        this.fechaImplementacion = fechaImplementacion;
        this.descripcion = descripcion;
        this.versionApp = versionApp;
    }
    public Aplicacion(String codAplicacion, String nombre, String lenguaje, String autor, Date fechaImplementacion, String descripcion, String versionApp, Set componentes, Set usuarioAplicacions, Set propiedads) {
       this.codAplicacion = codAplicacion;
       this.nombre = nombre;
       this.lenguaje = lenguaje;
       this.autor = autor;
       this.fechaImplementacion = fechaImplementacion;
       this.descripcion = descripcion;
       this.versionApp = versionApp;
       this.componentes = componentes;
       this.usuarioAplicacions = usuarioAplicacions;
       this.propiedads = propiedads;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 17 * hash + (this.codAplicacion != null ? this.codAplicacion.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Aplicacion other = (Aplicacion) obj;
        if ((this.codAplicacion == null) ? (other.codAplicacion != null) : !this.codAplicacion.equals(other.codAplicacion)) {
            return false;
        }
        return true;
    }


    public String getCodAplicacion() {
        return this.codAplicacion;
    }

    public void setCodAplicacion(String codAplicacion) {
        this.codAplicacion = codAplicacion;
    }
    public String getNombre() {
        return this.nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getLenguaje() {
        return this.lenguaje;
    }

    public void setLenguaje(String lenguaje) {
        this.lenguaje = lenguaje;
    }
    public String getAutor() {
        return this.autor;
    }

    public void setAutor(String autor) {
        this.autor = autor;
    }
    public Date getFechaImplementacion() {
        return this.fechaImplementacion;
    }

    public void setFechaImplementacion(Date fechaImplementacion) {
        this.fechaImplementacion = fechaImplementacion;
    }
    public String getDescripcion() {
        return this.descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
    public String getVersionApp() {
        return this.versionApp;
    }

    public void setVersionApp(String versionApp) {
        this.versionApp = versionApp;
    }
    public Set getComponentes() {
        return this.componentes;
    }

    public void setComponentes(Set componentes) {
        this.componentes = componentes;
    }
    public Set getUsuarioAplicacions() {
        return this.usuarioAplicacions;
    }

    public void setUsuarioAplicacions(Set usuarioAplicacions) {
        this.usuarioAplicacions = usuarioAplicacions;
    }
    public Set getPropiedads() {
        return this.propiedads;
    }

    public void setPropiedads(Set propiedads) {
        this.propiedads = propiedads;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getIcono() {
        return icono;
    }

    public void setIcono(String icono) {
        this.icono = icono;
    }

    public boolean isAsignada() {
        return asignada;
    }

    public void setAsignada(boolean asignada) {
        this.asignada = asignada;
    }




}

I've been with this for a few days and I've seen several similar questions but the answers do not work.

Patrick
  • 4,472
  • 9
  • 54
  • 85
Rarilex
  • 23
  • 1
  • 3

2 Answers2

0

Aplicacion inside UsuarioAplicacion is lazy loading. Which version of hibernate are you using? Try below code:

Hibernate.initialize(ua.getAplicacion());

Since Hibernate 4.2, you can set below property also

<property name="hibernate.enable_lazy_load_no_trans">true</property>
Amit K Bist
  • 6,395
  • 1
  • 9
  • 25
  • I am using hibernate 3.6, I think and add the line of code and it does not work it shows the same error thanks – Rarilex Aug 24 '17 at 17:32
  • Please check https://stackoverflow.com/questions/21574236/org-hibernate-lazyinitializationexception-could-not-initialize-proxy-no-sess and http://javarevisited.blogspot.com/2014/04/orghibernatelazyinitializationException-Could-not-initialize-proxy-no-session-hibernate-java.html – Amit K Bist Aug 24 '17 at 17:40
0

You did not post content of Usuario.hbm.xml but I guess relationship between User and Application is XxxToMany (One user relates to many Apps). Default fetch type of ToMany relationship is LAZY which means when you load a user, the real collection of his Applications is not loaded but only a proxy. When you need to access to an application's name, the proxy loads real application data for you. Unfortunately, when you access to that name, you are out of a @Transactional context and no session is available. This causes the famous LazyInitializationException.

To solve this, you must put code to load user and fetch all his applications in a @Transactional method.

In my early days in JPA/Hibernate, I used code like this:

@Transactinal
public User loadUserWithApps(long userId){
    User user = ...
    user.getApplications().size(); // This line will do the trick, but it also creates N+1 problem
}

the .size() will trigger JPA provider to load real data into application list but it also create N+1 problem (in this case N == 1).

You may want to use join fetch or EntityGraph to avoid this.

ThanhLoyal
  • 303
  • 1
  • 11