Menu

HibernateUtil-Exception in getCurrentSession

2010-02-23
2013-04-25
  • dilbert elbonia

    dilbert elbonia - 2010-02-23

    Hello. First I'd like to thank Bruno for creating and maintaining Gilead. I decided to move to the 1.3 version (from 1.2.3) but I encountered some problems. I have a service that returns user data to the GWT client. The service uses Spring security to retrieve the "current user" for which the data must be retrieved.

        @Override
        public User getCurrentUser() {
            // Use Spring security to retrieve username
            final String username = getUsername();
            final User user = userDAO.getUserByName(username);
            if (user == null) {
                log.error("User with login: " + username + " not found in database.");
                throw new UsernameNotFoundException("User " + username + " not found.");
            }
            user.setPassword(null);
            return user;
        }
    

    The procedure works fine but after it returns Gilead takes over. The following is the log of what happens after that:
    247583  DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils  - Opening Hibernate Session
    247585  DEBUG org.hibernate.impl.SessionImpl  - opened session at timestamp: 12669256834
    247585  DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils  - Closing Hibernate Session
    247585  DEBUG net.sf.gilead.core.hibernate.HibernateUtil  - Exception during getCurrentSession
    org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
            at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
            at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:622)
            at net.sf.gilead.core.hibernate.HibernateUtil.getCurrentSession(HibernateUtil.java:1574)
            at net.sf.gilead.core.hibernate.HibernateUtil.flushIfNeeded(HibernateUtil.java:853)
            at net.sf.gilead.core.PersistentBeanManager.clone(PersistentBeanManager.java:227)
            at net.sf.gilead.gwt.GileadRPCHelper.parseReturnValue(GileadRPCHelper.java:157)
            at org.gwtwidgets.server.spring.gilead.GileadRPCServiceExporter.invokeMethodOnService(GileadRPCServiceExporter.java:150)
            at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:338)
            at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)
            at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
            at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleRequest(GWTRPCServiceExporter.java:407)
            at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
            at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
            at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:96)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
            at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
            at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
            at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
            at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
            at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
            at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
            at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
            at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
            at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
            at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
            at org.mortbay.jetty.Server.handle(Server.java:324)
            at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
            at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
            at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
            at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
            at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
            at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
            at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
    247595  DEBUG net.sf.gilead.core.LazyKiller  - Detaching com.noveideje.AdminApp.domain.User@200
    247595  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting {role=com.noveideje.AdminApp.domain.User.userAuthorities, class=org.hibernate.collection.PersistentSet, idList=[, ], key=1} to GWT supported type
    247595  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting role to GWT supported type
    247595  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting com.noveideje.AdminApp.domain.User.userAuthorities to GWT supported type
    247595  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting class to GWT supported type
    247596  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting org.hibernate.collection.PersistentSet to GWT supported type
    247596  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting idList to GWT supported type
    247596  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting [, ] to GWT supported type
    247596  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting  to GWT supported type
    247596  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting  to GWT supported type
    247596  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting key to GWT supported type
    247596  DEBUG net.sf.gilead.core.serialization.GwtSerializer  - Converting 1 to GWT supported type
    247596  DEBUG net.sf.gilead.gwt.GileadRPCHelper  - Clone took 13 ms.
    247629  DEBUG org.springframework.web.servlet.DispatcherServlet  - Null ModelAndView returned to DispatcherServlet with name 'dispatcher': assuming HandlerAdapter completed request handling
    247629  DEBUG org.springframework.web.servlet.DispatcherServlet  - Successfully completed request
    247630  DEBUG org.springframework.security.web.access.ExceptionTranslationFilter  - Chain processed normally
    247630  DEBUG org.springframework.security.web.context.SecurityContextPersistenceFilter  - SecurityContextHolder now cleared, as request processing completed

    Essentialy it tells me that it couldn't open a hibernate session. Next, here is the Gilead configuration:
        <bean id="persistentBeanManager" class="net.sf.gilead.core.PersistentBeanManager">
            <property name="persistenceUtil">
                <bean class="net.sf.gilead.core.hibernate.HibernateUtil" p:sessionFactory-ref="sessionFactory"/>
            </property>
            <property name="proxyStore">
                <bean id="proxyStore" class="net.sf.gilead.core.store.stateless.StatelessProxyStore">
                    <property name="proxySerializer">
                        <bean class="net.sf.gilead.core.serialization.GwtProxySerialization"/>
                    </property>
                </bean>
            </property>
        </bean>
    I haven't changed the session factory configuration (it worked fine under 1.2.3). The service also uses gwt-sl 1.1. it is configured like so:
        <bean id="UserGWTRPC" class="org.gwtwidgets.server.spring.gilead.GileadRPCServiceExporter">
            <property name="service" ref="userDetailsService" />
            <property name="serviceInterfaces">
                <!- value-type="com.google.gwt.user.client.rpc.RemoteService"->
                <list>
                    <value>com.remote.IUserManager</value>
                    <value>com.remote.IUserDataManager</value>
                </list>
            </property>
            <property name="beanManager" ref="persistentBeanManager"/>
        </bean>
    IUserDataManager contains the getCurrentUser method that produces the error.
    If You need mora data don't hesitate to ask.
    Thanks in advance.

     
  • Bruno Marchesson

    Hi,

    Do not worry about this message : it is at DEBUG level and was just set to let me know if something is wrong.
    It will be removed in next release since it seems to worry many, many Gilead users.

    Regards
    Bruno

     
  • dilbert elbonia

    dilbert elbonia - 2010-02-23

    Obviously I was not clear enough. The code I sent previously worked with version 1.2.3. After I ported it to 1.3 (and 1.3.1-SNAPSHOT) it stopped working. The call to getCurrentUser ends in failure on the client (it enters the onFailure method of the AsyncCallback<User> interface). I supposed it was because of the HibernateException.

     
  • Bruno Marchesson

    Hi,

    Do you see another exception in GWT console ? I need it to help you solving your issue…

    Regards
    Bruno

     
  • dilbert elbonia

    dilbert elbonia - 2010-02-25

    Hello.
    Well I missed the following exception because the GWT development server somehow swallowed it. I mean it only wrote:
    00:01:50.461  500 - POST /bla/service/user/user (127.0.0.1) 57 bytes
    So I decided to deploy the war on glassfish. I managed to reproduce the error and this time the exception was logged properly. Here it is (in all its ugliness):
    WebModuleException while dispatching incoming RPC call
    java.lang.RuntimeException: com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException
            at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleExporterProcessingException(GWTRPCServiceExporter.java:384)
            at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:353)
            at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)
            at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
            at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleRequest(GWTRPCServiceExporter.java:407)
            at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
            at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
            at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:333)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:96)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
            at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
            at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:313)
            at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
            at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
            at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
            at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
            at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
            at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    Caused by: com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:760)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:723)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:700)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:730)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:712)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:730)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
            at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:609)
            at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:467)
            at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:434)
            at org.gwtwidgets.server.spring.gilead.GileadRPCServiceExporter.invokeMethodOnService(GileadRPCServiceExporter.java:151)
            at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:338)
            … 64 more
    Caused by: java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:616)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:742)
            … 82 more
    Caused by: com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:760)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:723)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:700)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:730)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase.serialize(Map_CustomFieldSerializerBase.java:50)
            at com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer.serialize(HashMap_CustomFieldSerializer.java:36)
            … 87 more
    Caused by: java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:616)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:742)
            … 98 more
    Caused by: com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:760)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:723)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:700)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:730)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase.serialize(Map_CustomFieldSerializerBase.java:50)
            at com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer.serialize(HashMap_CustomFieldSerializer.java:36)
            … 103 more
    Caused by: java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:616)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:742)
            … 114 more
    Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'com.noveideje.AdminApp.domain.User$$EnhancerByCGLIB$$8debdf1b' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = com.noveideje.AdminApp.domain.User@200
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:700)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:730)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:700)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:730)
            at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612)
            at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
            at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:43)
            at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.java:36)
            … 119 more
    Hope this will be more useful. Thanks again for the effort.

    Regards,
    Dilbert

     
  • Bruno Marchesson

    Hi,

    Despite of its ugliness, this stack trace is useful :)
    Nevertheless, the exception is strange : it suggests that Gilead has not been called or has not cloned the output User instance (it is still enhanced), whereas I see in your previous post that Gilead cloned the instance :-/

    Can you check that all your attributes have the appropriate getters and setters ?

    Regards
    Bruno

     
  • dilbert elbonia

    dilbert elbonia - 2010-02-26

    Bruno,
    I couldn't find anything wrong with the getters and setters of the attributes in question (from the stack trace I assume that the User class is the "culprit"). I would like to mention that the same class worked fine with version 1.2.3. The only thing I changed in the User class code is the import from net.sf.gilead.pojo.java5.LightEntity to net.sf.gilead.pojo.gwt.LightEntity. I managed to create a small project with the classes that reproduce the error so I could send it if I could figure out how (apparently this forum does not accept attachments). So I put it here:
    https://docs.google.com/leaf?id=0BzRGFZP1yPUwYjI2ODNmMjQtM2UzNy00NmMzLTg5YTItMzI1Y2Q4NjJmMTQz&hl=en

    I would be grateful if You could take a look. If You need more information don't hesitate to ask. Thanks for the help.
    Dilbert

     
  • Jonathan Burnhams

    I've also got this same issue - gilead 1.3 is letting some hibernate proxies through which is then causing gwt to fail to serialize them

     
  • Bruno Marchesson

    Hi all,

    Sounds bad :-(
    Can you try the current Gilead version (1.3.1-SNAPSHOT), available in Gilead Maven Snapshot repository and tell me if it solves your issue ?

    Regards
    Bruno

    PS : for information, the main persistence refactor between 1.2.3 and 1.3 was about persistent collections. Does it make sense to you ?

     
  • Jonathan Burnhams

    The problem still exists with 3.1.1-SNAPSHOT. I'm stepping through it at the moment and here's where the issue seems to be:

    My server response is like this:

    Object { List }

    At the point it gets to the GWT serialization the inner HibernateProxy has been correctly replaced by null. However inside HibernateObject1 are two hashmaps: _initializationMap and the _proxyInformations

    One of the entries in _proxyInformations is an entry with the key that is the name of the variable for Set1 and a  value that is a hashmap containing: [
    'class' => 'org.hibernate.collection.PersistentSet',
    'role' => full path to Set1,
    'key' => HibernateObject1
    ]

    (above, the strings are actually Gilead StringParameters)

    The problem is that in the above HashMap, the instance of HibernateObject1 that 'key' maps to, contains HibernateObject2  and within that, the original HibernateProxy.

    I don't know what the correct behaviour is here - should _proxyInformations include sets that link back to parent class? If so, then should the proxies have been removed here also?

    I shall continue to investigate but am running out of knowledge! Hope the above makes sense anyways

     
  • Jonathan Burnhams

    Here is another clue:

    In HibernateUtil.serializePersistentCollection, the PersistantCollection being serialized has an object as the key. This object contains an object which contains the hibernate proxy. I think that you need to somehow remove the proxies from the key before it is set (result.put(KEY, collection.getKey());).

    Or the key should be a reference to current object (as there's a bit of a circular link here) rather than an different instance of the object (which doesn't have the proxies removed).

    The circular bit comes from - in the above, the collection's key is object that contains the collection.

    Looking some more at the code, the collection key should be replaced with the toBean present in the call to _persistenceUtil.serializePersistentCollection in ClonePropertyFilter.propagate. However, perhaps this is not the case with all PersistantCollections?

     
  • dilbert elbonia

    dilbert elbonia - 2010-03-04

    Well I can confirm that the error still exists. I also have confirmed that after the service call into my service implementation the GileadRPCServiceExporter (from gwt-sl 1.1 library) calls:

    result = GileadRPCHelper.parseReturnValue(result, beanManager);
    

    If I understand correctly this should remove the cglib enhancements which Hibernate added but it doesn't. It returns the same class in the result variable. This class is not in any collection. It is a single return value although it contains a set of UserAuthority objects.

    Regards.

     
  • Bruno Marchesson

    Hello all,

    First, thanks Jonathan for your investigations : I am now starting to understand what is happening now.

    After looking to your code, the problem seems to come from the composite ID of the UserAuthority, which is the Key of the collection, and that, of course contains persistent entity :-/

    There are some ways to work around the issue you encounter :
        - Replace the composite ID by a technical one. Unless you are working with a legacy database, it is always a good advice, believe me ;-)
        - Use the Gilead Java5 legacy mode (by replacing gwt.LightEntity inheritance with java5.legacy.LightEntity *AND* the GwtProxySerialization mode by JBossProxySerialization) : proxyInformations are thus serialized into a String that is acceptable by GWT serialization process,
         - On my side, I will try to reproduce and fix this issue in GwtProxySerialization class.

    Regards
    Bruno

     
  • dilbert elbonia

    dilbert elbonia - 2010-03-08

    Hi Bruno,
    Thank you very much for investigating this problem. I tried the second proposal (with java5.legacy.LightEntity AND JBossProxySerialization) and it worked fine but in order not to do the refactoring twice I will wait till the issue in GwtProxySerialization class is solved. When it is solved please drop a line here (or let us know in another way) and I will test it in my app.
    Thanks again for the effort.

    Regards,
    Dilbert

     

Log in to post a comment.