You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by "Florian B." <fl...@gmail.com> on 2011/09/02 20:03:10 UTC

Lazy loading exception despite of OpenSessionInViewFilter and object loading within a request

Hi

I've got some issues with the OpenSessionInViewFilter I integrated into a
Wicket application to get rid of the LazyLoadingException problem. 

So my problem is. I got a login page with a SignInPanel. When a user tries
to log into the web site his credentials are passed to the authentication()
method of a Session class which extends AuthenticatedWebSession. In this
method a AuthenticationService tries to load the user form the database,
when it succeeds the user is stored in the session. The method in the
AuthenticationService class which loads the user is annotated with
@Transactional. After the user is loaded procession of the request goes on.
During this getRoles() of the session class is called to check the user's
rights. Therefore getRoles() gets called on the user which was stored in the
session before. getRoles() should normally lazy loads the roles of the user
but unfortunately a LazyLoadingException is thrown. 

This behavior is really strange as I thought the OpenSessionInViewFilter
takes care that all requests to the database within on web request use the
same session. 

To examine this issue further I activate logging on the
OpenSessionInViewFilter. This shows me that the session is opened and closed
multiple times by the OpenSessionInViewFilter during the request. 

It is normal that the session got opened and closed multiple times by the
OpenSessionInViewFilter during a request? 

Does any one has an idea why this happens and how to fix this?

*My web.xml *

/<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<display-name>StoreFinder</display-name>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:/applicationContext.xml</param-value>
	</context-param>
	<listener>
	
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<filter>
		<filter-name>wicket.web</filter-name>
		<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
		<init-param>
			<param-name>applicationClassName</param-name>
		
<param-value>com.appandmore.storefinder.backend.core.web.StoreFinderApplication</param-value>
		</init-param>
		<init-param>
			<param-name>configuration</param-name>
			
			<param-value>development</param-value>
		</init-param>
	</filter>
	<filter>
		<filter-name>wicket.session</filter-name>
	
<filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>
		<init-param>
			<param-name>filterName</param-name>
			<param-value>wicket.web</param-value>
		</init-param>
	</filter>
	<filter>
		<filter-name>open.hibernate.session.in.view</filter-name>
	
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
		<init-param>
			<param-name>sessionFactoryBeanName</param-name>
			<param-value>sessionFactory</param-value>
		</init-param>
	</filter>
	
	
	<filter-mapping>
		<filter-name>open.hibernate.session.in.view</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>wicket.web</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
/


*My applicationContext.xml*
/
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
    
    <bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:application.properties</value>
                
            </list>
        </property>
        <property name="ignoreResourceNotFound" value="true"/>
    </bean>
   
   <bean id="authenticationService"
class="com.appandmore.storefinder.backend.core.service.security.AuthenticationServiceImpl">
        <constructor-arg ref="userDao"/>
    </bean>
    
    <bean id="offerDao"
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.OfferDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <bean id="userDao"
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <bean id="roleDao"
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.RoleDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <bean id="imageDao"
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.ImageDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>    
     <bean id="storeDao"
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.StoreDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
        <property name="driverClassName" value="org.h2.Driver"/>
        <property name="url" value="jdbc:h2:file:target/db/"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    
    <bean id="sessionFactory"
         
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
            <props>
                <prop
key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="use_outer_join">true</prop>
                <prop
key="hibernate.cache.use_second_level_cache">false</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop
key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>		
		<prop key="hibernate.hbm2ddl.auto">create-drop</prop>               
                <prop key="hibernate.connection.pool_size">10</prop>
                <prop key="hibernate.jdbc.batch_size">1000</prop>
                <prop
key="hibernate.bytecode.use_reflection_optimizer">true</prop>
            </props>
        </property>
        <property name="annotatedClasses">
            <list>                               
               
<value>com.appandmore.storefinder.backend.core.domain.offer.Offer</value>                
               
<value>com.appandmore.storefinder.backend.core.domain.store.Image</value>
               
<value>com.appandmore.storefinder.backend.core.domain.store.Store</value>
	
<value>com.appandmore.storefinder.backend.core.domain.store.OpeningPeriod</value>

<value>com.appandmore.storefinder.backend.core.domain.store.CommunicationData</value>
               
<value>com.appandmore.storefinder.backend.core.domain.user.Role</value>
               
<value>com.appandmore.storefinder.backend.core.domain.user.User</value>                
               
<value>com.appandmore.storefinder.backend.core.domain.base.BusinessObject</value>
            </list>
        </property>
        
        <property name="schemaUpdate" value="${hibernate.schemaUpdate}"/>
    </bean>
    
    <tx:annotation-driven/>
    <bean id="transactionManager"
         
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
</beans>
/



*Log of the web request which leads to the exception *(user entered login
data and pressed the login button)

DEBUG - OpenSessionInViewFilter    - Using SessionFactory 'sessionFactory'
for OpenSessionInViewFilter
DEBUG - OpenSessionInViewFilter    - Opening single Hibernate Session in
OpenSessionInViewFilter
INFO  - AuthenticatedSession       - User trys to login with username:
admin@appandmore.com
Hibernate: select this_.id as id4_0_, this_.createdOn as createdOn4_0_,
this_.editedOn as editedOn4_0_, this_.active as active4_0_, this_.email as
email4_0_, this_.firstname as firstname4_0_, this_.lastname as lastname4_0_,
this_.password as password4_0_ from User this_ where this_.email=?
INFO  - AuthenticatedSession       - User 'admin@appandmore.com' is logged
in successfully. 
INFO  - ClassCryptFactory          - using encryption/decryption object
org.apache.wicket.util.crypt.SunJceCrypt@7b6b89ad
DEBUG - OpenSessionInViewFilter    - Closing single Hibernate Session in
OpenSessionInViewFilter
DEBUG - OpenSessionInViewFilter    - Using SessionFactory 'sessionFactory'
for OpenSessionInViewFilter
DEBUG - OpenSessionInViewFilter    - Opening single Hibernate Session in
OpenSessionInViewFilter
ERROR - DefaultExceptionMapper     - Unexpected error occurred
org.apache.wicket.WicketRuntimeException: Can't instantiate page using
constructor public
com.appandmore.storefinder.backend.core.web.page.StoreTablePage()
at
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:173)
	at
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:59)
	at
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:95)
	at
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:43)
	at
org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:107)
	at
org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:266)
	at
org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:160)
	at
org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78)
	at
org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:105)
	at
org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:219)
	at
org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:139)
	at
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:717)
	at
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63)
	at
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
	at
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253)
	at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:160)
	at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:216)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
	at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
	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:712)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
	at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:295)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
	at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
	at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:361)
	at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:155)
	... 36 more
Caused by: org.hibernate.LazyInitializationException: failed to lazily
initialize a collection of role:
com.appandmore.storefinder.backend.core.domain.user.User.roles, no session
or session was closed
	at
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
	at
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
	at
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
	at
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
	at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:186)
	at
com.appandmore.storefinder.backend.core.web.AuthenticatedSession.getRoles(AuthenticatedSession.java:68)
	at
org.apache.wicket.authroles.authentication.AuthenticatedWebApplication.hasAnyRole(AuthenticatedWebApplication.java:78)
	at
org.apache.wicket.authroles.authorization.strategies.role.AbstractRoleAuthorizationStrategy.hasAny(AbstractRoleAuthorizationStrategy.java:62)
	at
org.apache.wicket.authroles.authorization.strategies.role.annotations.AnnotationsRoleAuthorizationStrategy.isInstantiationAuthorized(AnnotationsRoleAuthorizationStrategy.java:60)
	at
org.apache.wicket.authorization.strategies.CompoundAuthorizationStrategy.isInstantiationAuthorized(CompoundAuthorizationStrategy.java:62)
	at org.apache.wicket.Application$1.onInstantiation(Application.java:278)
	at
org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:36)
	at
org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:34)
	at
org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:79)
	at
org.apache.wicket.application.ComponentInstantiationListenerCollection.onInstantiation(ComponentInstantiationListenerCollection.java:32)
	at org.apache.wicket.Component.<init>(Component.java:676)
	at org.apache.wicket.MarkupContainer.<init>(MarkupContainer.java:117)
	at org.apache.wicket.Page.<init>(Page.java:211)
	at org.apache.wicket.Page.<init>(Page.java:175)
	at org.apache.wicket.markup.html.WebPage.<init>(WebPage.java:72)
	at
com.appandmore.storefinder.backend.common.web.page.BasePage.<init>(BasePage.java:30)
	at
com.appandmore.storefinder.backend.core.web.page.StoreTablePage.<init>(StoreTablePage.java:23)
	... 41 more
DEBUG - OpenSessionInViewFilter    - Closing single Hibernate Session in
OpenSessionInViewFilter

--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Lazy-loading-exception-despite-of-OpenSessionInViewFilter-and-object-loading-within-a-request-tp3786744p3786744.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Lazy loading exception despite of OpenSessionInViewFilter and object loading within a request

Posted by Jochen Mader <pf...@gmail.com>.
Open session in view is a bad idea with a full fledged ajax-Wicket
application as things get unpredictable pretty fast.
Am 02.09.2011 22:34 schrieb "Sven Meier" <sv...@meiers.net>:
> Hi,
>
> there are multiple requests going on probably (e.g. because of redirects),
>
> You should put a breakpoint into WicketFilter to debug the requests.
>
> HTH
> Sven
>
> On 09/02/2011 08:03 PM, Florian B. wrote:
>> Hi
>>
>> I've got some issues with the OpenSessionInViewFilter I integrated into a
>> Wicket application to get rid of the LazyLoadingException problem.
>>
>> So my problem is. I got a login page with a SignInPanel. When a user
tries
>> to log into the web site his credentials are passed to the
authentication()
>> method of a Session class which extends AuthenticatedWebSession. In this
>> method a AuthenticationService tries to load the user form the database,
>> when it succeeds the user is stored in the session. The method in the
>> AuthenticationService class which loads the user is annotated with
>> @Transactional. After the user is loaded procession of the request goes
on.
>> During this getRoles() of the session class is called to check the user's
>> rights. Therefore getRoles() gets called on the user which was stored in
the
>> session before. getRoles() should normally lazy loads the roles of the
user
>> but unfortunately a LazyLoadingException is thrown.
>>
>> This behavior is really strange as I thought the OpenSessionInViewFilter
>> takes care that all requests to the database within on web request use
the
>> same session.
>>
>> To examine this issue further I activate logging on the
>> OpenSessionInViewFilter. This shows me that the session is opened and
closed
>> multiple times by the OpenSessionInViewFilter during the request.
>>
>> It is normal that the session got opened and closed multiple times by the
>> OpenSessionInViewFilter during a request?
>>
>> Does any one has an idea why this happens and how to fix this?
>>
>> *My web.xml *
>>
>> /<?xml version="1.0" encoding="ISO-8859-1"?>
>> <web-app xmlns="http://java.sun.com/xml/ns/javaee"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
>> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
>> version="2.5">
>> <display-name>StoreFinder</display-name>
>> <context-param>
>> <param-name>contextConfigLocation</param-name>
>> <param-value>classpath:/applicationContext.xml</param-value>
>> </context-param>
>> <listener>
>>
>>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>> </listener>
>>
>> <filter>
>> <filter-name>wicket.web</filter-name>
>> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
>> <init-param>
>> <param-name>applicationClassName</param-name>
>>
>>
<param-value>com.appandmore.storefinder.backend.core.web.StoreFinderApplication</param-value>
>> </init-param>
>> <init-param>
>> <param-name>configuration</param-name>
>>
>> <param-value>development</param-value>
>> </init-param>
>> </filter>
>> <filter>
>> <filter-name>wicket.session</filter-name>
>>
>>
<filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>
>> <init-param>
>> <param-name>filterName</param-name>
>> <param-value>wicket.web</param-value>
>> </init-param>
>> </filter>
>> <filter>
>> <filter-name>open.hibernate.session.in.view</filter-name>
>>
>>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
>> <init-param>
>> <param-name>sessionFactoryBeanName</param-name>
>> <param-value>sessionFactory</param-value>
>> </init-param>
>> </filter>
>>
>>
>> <filter-mapping>
>> <filter-name>open.hibernate.session.in.view</filter-name>
>> <url-pattern>/*</url-pattern>
>> </filter-mapping>
>> <filter-mapping>
>> <filter-name>wicket.web</filter-name>
>> <url-pattern>/*</url-pattern>
>> </filter-mapping>
>> </web-app>
>> /
>>
>>
>> *My applicationContext.xml*
>> /
>> <?xml version="1.0" encoding="UTF-8"?>
>> <beans xmlns="http://www.springframework.org/schema/beans"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xmlns:tx="http://www.springframework.org/schema/tx"
>> xsi:schemaLocation="
>> http://www.springframework.org/schema/beans
>> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>> http://www.springframework.org/schema/tx
>> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
>>
>>
>> <bean id="propertyConfigurer"
>>
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>> <property name="locations">
>> <list>
>> <value>classpath:application.properties</value>
>>
>> </list>
>> </property>
>> <property name="ignoreResourceNotFound" value="true"/>
>> </bean>
>>
>> <bean id="authenticationService"
>>
class="com.appandmore.storefinder.backend.core.service.security.AuthenticationServiceImpl">
>> <constructor-arg ref="userDao"/>
>> </bean>
>>
>> <bean id="offerDao"
>>
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.OfferDaoImpl">
>> <property name="sessionFactory" ref="sessionFactory"/>
>> </bean>
>> <bean id="userDao"
>>
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.UserDaoImpl">
>> <property name="sessionFactory" ref="sessionFactory"/>
>> </bean>
>> <bean id="roleDao"
>>
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.RoleDaoImpl">
>> <property name="sessionFactory" ref="sessionFactory"/>
>> </bean>
>> <bean id="imageDao"
>>
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.ImageDaoImpl">
>> <property name="sessionFactory" ref="sessionFactory"/>
>> </bean>
>> <bean id="storeDao"
>>
class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.StoreDaoImpl">
>> <property name="sessionFactory" ref="sessionFactory"/>
>> </bean>
>>
>> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
>> destroy-method="close">
>> <property name="driverClassName" value="org.h2.Driver"/>
>> <property name="url" value="jdbc:h2:file:target/db/"/>
>> <property name="username" value="${jdbc.username}"/>
>> <property name="password" value="${jdbc.password}"/>
>> </bean>
>>
>> <bean id="sessionFactory"
>>
>>
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
>> <property name="dataSource" ref="dataSource"/>
>> <property name="hibernateProperties">
>> <props>
>> <prop
>> key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
>> <prop key="hibernate.show_sql">true</prop>
>> <prop key="use_outer_join">true</prop>
>> <prop
>> key="hibernate.cache.use_second_level_cache">false</prop>
>> <prop key="hibernate.cache.use_query_cache">true</prop>
>> <prop
>>
key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>

>> <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
>> <prop key="hibernate.connection.pool_size">10</prop>
>> <prop key="hibernate.jdbc.batch_size">1000</prop>
>> <prop
>> key="hibernate.bytecode.use_reflection_optimizer">true</prop>
>> </props>
>> </property>
>> <property name="annotatedClasses">
>> <list>
>>
>> <value>com.appandmore.storefinder.backend.core.domain.offer.Offer</value>

>>
>> <value>com.appandmore.storefinder.backend.core.domain.store.Image</value>
>>
>> <value>com.appandmore.storefinder.backend.core.domain.store.Store</value>
>>
>>
<value>com.appandmore.storefinder.backend.core.domain.store.OpeningPeriod</value>
>>
>>
<value>com.appandmore.storefinder.backend.core.domain.store.CommunicationData</value>
>>
>> <value>com.appandmore.storefinder.backend.core.domain.user.Role</value>
>>
>> <value>com.appandmore.storefinder.backend.core.domain.user.User</value>
>>
>>
<value>com.appandmore.storefinder.backend.core.domain.base.BusinessObject</value>
>> </list>
>> </property>
>>
>> <property name="schemaUpdate" value="${hibernate.schemaUpdate}"/>
>> </bean>
>>
>> <tx:annotation-driven/>
>> <bean id="transactionManager"
>>
>> class="org.springframework.orm.hibernate3.HibernateTransactionManager">
>> <property name="sessionFactory" ref="sessionFactory"/>
>> </bean>
>> </beans>
>> /
>>
>>
>>
>> *Log of the web request which leads to the exception *(user entered login
>> data and pressed the login button)
>>
>> DEBUG - OpenSessionInViewFilter - Using SessionFactory 'sessionFactory'
>> for OpenSessionInViewFilter
>> DEBUG - OpenSessionInViewFilter - Opening single Hibernate Session in
>> OpenSessionInViewFilter
>> INFO - AuthenticatedSession - User trys to login with username:
>> admin@appandmore.com
>> Hibernate: select this_.id as id4_0_, this_.createdOn as createdOn4_0_,
>> this_.editedOn as editedOn4_0_, this_.active as active4_0_, this_.email
as
>> email4_0_, this_.firstname as firstname4_0_, this_.lastname as
lastname4_0_,
>> this_.password as password4_0_ from User this_ where this_.email=?
>> INFO - AuthenticatedSession - User 'admin@appandmore.com' is logged
>> in successfully.
>> INFO - ClassCryptFactory - using encryption/decryption object
>> org.apache.wicket.util.crypt.SunJceCrypt@7b6b89ad
>> DEBUG - OpenSessionInViewFilter - Closing single Hibernate Session in
>> OpenSessionInViewFilter
>> DEBUG - OpenSessionInViewFilter - Using SessionFactory 'sessionFactory'
>> for OpenSessionInViewFilter
>> DEBUG - OpenSessionInViewFilter - Opening single Hibernate Session in
>> OpenSessionInViewFilter
>> ERROR - DefaultExceptionMapper - Unexpected error occurred
>> org.apache.wicket.WicketRuntimeException: Can't instantiate page using
>> constructor public
>> com.appandmore.storefinder.backend.core.web.page.StoreTablePage()
>> at
>>
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:173)
>> at
>>
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:59)
>> at
>>
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:95)
>> at
>>
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:43)
>> at
>>
org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:107)
>> at
>>
org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:266)
>> at
>>
org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:160)
>> at
>>
org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78)
>> at
>>
org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:105)
>> at
>>
org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:219)
>> at
>>
org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:139)
>> at
>>
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:717)
>> at
>>
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63)
>> at
>>
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
>> at
>>
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253)
>> at
>>
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:160)
>> at
>>
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:216)
>> at
>>
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
>> at
>>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
>> at
>>
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>> at
>>
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
>> at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
>> 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:712)
>> at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>> at
>>
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
>> at
>>
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>> at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>> at org.mortbay.jetty.Server.handle(Server.java:295)
>> at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
>> at
>>
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
>> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
>> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
>> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
>> at
>>
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:361)
>> at
>>
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
>> Caused by: java.lang.reflect.InvocationTargetException
>> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>> at
>>
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>> at
>>
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>> at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>> at
>>
org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:155)
>> ... 36 more
>> Caused by: org.hibernate.LazyInitializationException: failed to lazily
>> initialize a collection of role:
>> com.appandmore.storefinder.backend.core.domain.user.User.roles, no
session
>> or session was closed
>> at
>>
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
>> at
>>
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
>> at
>>
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
>> at
>>
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
>> at
org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:186)
>> at
>>
com.appandmore.storefinder.backend.core.web.AuthenticatedSession.getRoles(AuthenticatedSession.java:68)
>> at
>>
org.apache.wicket.authroles.authentication.AuthenticatedWebApplication.hasAnyRole(AuthenticatedWebApplication.java:78)
>> at
>>
org.apache.wicket.authroles.authorization.strategies.role.AbstractRoleAuthorizationStrategy.hasAny(AbstractRoleAuthorizationStrategy.java:62)
>> at
>>
org.apache.wicket.authroles.authorization.strategies.role.annotations.AnnotationsRoleAuthorizationStrategy.isInstantiationAuthorized(AnnotationsRoleAuthorizationStrategy.java:60)
>> at
>>
org.apache.wicket.authorization.strategies.CompoundAuthorizationStrategy.isInstantiationAuthorized(CompoundAuthorizationStrategy.java:62)
>> at org.apache.wicket.Application$1.onInstantiation(Application.java:278)
>> at
>>
org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:36)
>> at
>>
org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:34)
>> at
>>
org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:79)
>> at
>>
org.apache.wicket.application.ComponentInstantiationListenerCollection.onInstantiation(ComponentInstantiationListenerCollection.java:32)
>> at org.apache.wicket.Component.<init>(Component.java:676)
>> at org.apache.wicket.MarkupContainer.<init>(MarkupContainer.java:117)
>> at org.apache.wicket.Page.<init>(Page.java:211)
>> at org.apache.wicket.Page.<init>(Page.java:175)
>> at org.apache.wicket.markup.html.WebPage.<init>(WebPage.java:72)
>> at
>>
com.appandmore.storefinder.backend.common.web.page.BasePage.<init>(BasePage.java:30)
>> at
>>
com.appandmore.storefinder.backend.core.web.page.StoreTablePage.<init>(StoreTablePage.java:23)
>> ... 41 more
>> DEBUG - OpenSessionInViewFilter - Closing single Hibernate Session in
>> OpenSessionInViewFilter
>>
>> --
>> View this message in context:
http://apache-wicket.1842946.n4.nabble.com/Lazy-loading-exception-despite-of-OpenSessionInViewFilter-and-object-loading-within-a-request-tp3786744p3786744.html
>> Sent from the Users forum mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>

Re: Lazy loading exception despite of OpenSessionInViewFilter and object loading within a request

Posted by "Florian B." <fl...@gmail.com>.
You're right. The redirect form the login page to the application's home page
seems to be a new request. I've simply tested it by trying to access the
user's roles directly after the user was retrieved from the database and
before the redirect to the application's home page. Here the roles could be
loaded without lazy loading exception. 

So thanks for the tip!

--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Lazy-loading-exception-despite-of-OpenSessionInViewFilter-and-object-loading-within-a-request-tp3786744p3790692.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Lazy loading exception despite of OpenSessionInViewFilter and object loading within a request

Posted by Sven Meier <sv...@meiers.net>.
Hi,

there are multiple requests going on probably (e.g. because of redirects),

You should put a breakpoint into WicketFilter to debug the requests.

HTH
Sven

On 09/02/2011 08:03 PM, Florian B. wrote:
> Hi
> 
> I've got some issues with the OpenSessionInViewFilter I integrated into a
> Wicket application to get rid of the LazyLoadingException problem. 
> 
> So my problem is. I got a login page with a SignInPanel. When a user tries
> to log into the web site his credentials are passed to the authentication()
> method of a Session class which extends AuthenticatedWebSession. In this
> method a AuthenticationService tries to load the user form the database,
> when it succeeds the user is stored in the session. The method in the
> AuthenticationService class which loads the user is annotated with
> @Transactional. After the user is loaded procession of the request goes on.
> During this getRoles() of the session class is called to check the user's
> rights. Therefore getRoles() gets called on the user which was stored in the
> session before. getRoles() should normally lazy loads the roles of the user
> but unfortunately a LazyLoadingException is thrown. 
> 
> This behavior is really strange as I thought the OpenSessionInViewFilter
> takes care that all requests to the database within on web request use the
> same session. 
> 
> To examine this issue further I activate logging on the
> OpenSessionInViewFilter. This shows me that the session is opened and closed
> multiple times by the OpenSessionInViewFilter during the request. 
> 
> It is normal that the session got opened and closed multiple times by the
> OpenSessionInViewFilter during a request? 
> 
> Does any one has an idea why this happens and how to fix this?
> 
> *My web.xml *
> 
> /<?xml version="1.0" encoding="ISO-8859-1"?>
> <web-app xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
> 	version="2.5">
> 	<display-name>StoreFinder</display-name>
> 	<context-param>
> 		<param-name>contextConfigLocation</param-name>
> 		<param-value>classpath:/applicationContext.xml</param-value>
> 	</context-param>
> 	<listener>
> 	
> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
> 	</listener>
> 	
> 	<filter>
> 		<filter-name>wicket.web</filter-name>
> 		<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
> 		<init-param>
> 			<param-name>applicationClassName</param-name>
> 		
> <param-value>com.appandmore.storefinder.backend.core.web.StoreFinderApplication</param-value>
> 		</init-param>
> 		<init-param>
> 			<param-name>configuration</param-name>
> 			
> 			<param-value>development</param-value>
> 		</init-param>
> 	</filter>
> 	<filter>
> 		<filter-name>wicket.session</filter-name>
> 	
> <filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>
> 		<init-param>
> 			<param-name>filterName</param-name>
> 			<param-value>wicket.web</param-value>
> 		</init-param>
> 	</filter>
> 	<filter>
> 		<filter-name>open.hibernate.session.in.view</filter-name>
> 	
> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
> 		<init-param>
> 			<param-name>sessionFactoryBeanName</param-name>
> 			<param-value>sessionFactory</param-value>
> 		</init-param>
> 	</filter>
> 	
> 	
> 	<filter-mapping>
> 		<filter-name>open.hibernate.session.in.view</filter-name>
> 		<url-pattern>/*</url-pattern>
> 	</filter-mapping>
> 	<filter-mapping>
> 		<filter-name>wicket.web</filter-name>
> 		<url-pattern>/*</url-pattern>
> 	</filter-mapping>
> </web-app>
> /
> 
> 
> *My applicationContext.xml*
> /
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>        xmlns:tx="http://www.springframework.org/schema/tx"
>        xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
> http://www.springframework.org/schema/tx
> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
>     
>     
>     <bean id="propertyConfigurer"
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>         <property name="locations">
>             <list>
>                 <value>classpath:application.properties</value>
>                 
>             </list>
>         </property>
>         <property name="ignoreResourceNotFound" value="true"/>
>     </bean>
>    
>    <bean id="authenticationService"
> class="com.appandmore.storefinder.backend.core.service.security.AuthenticationServiceImpl">
>         <constructor-arg ref="userDao"/>
>     </bean>
>     
>     <bean id="offerDao"
> class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.OfferDaoImpl">
>         <property name="sessionFactory" ref="sessionFactory"/>
>     </bean>
>     <bean id="userDao"
> class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.UserDaoImpl">
>         <property name="sessionFactory" ref="sessionFactory"/>
>     </bean>
>     <bean id="roleDao"
> class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.RoleDaoImpl">
>         <property name="sessionFactory" ref="sessionFactory"/>
>     </bean>
>     <bean id="imageDao"
> class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.ImageDaoImpl">
>         <property name="sessionFactory" ref="sessionFactory"/>
>     </bean>    
>      <bean id="storeDao"
> class="com.appandmore.storefinder.backend.core.infrastructure.hibernate.StoreDaoImpl">
>         <property name="sessionFactory" ref="sessionFactory"/>
>     </bean>
>     
>     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
> destroy-method="close">
>         <property name="driverClassName" value="org.h2.Driver"/>
>         <property name="url" value="jdbc:h2:file:target/db/"/>
>         <property name="username" value="${jdbc.username}"/>
>         <property name="password" value="${jdbc.password}"/>
>     </bean>
>     
>     <bean id="sessionFactory"
>          
> class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
>         <property name="dataSource" ref="dataSource"/>
>         <property name="hibernateProperties">
>             <props>
>                 <prop
> key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
>                 <prop key="hibernate.show_sql">true</prop>
>                 <prop key="use_outer_join">true</prop>
>                 <prop
> key="hibernate.cache.use_second_level_cache">false</prop>
>                 <prop key="hibernate.cache.use_query_cache">true</prop>
>                 <prop
> key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>		
> 		<prop key="hibernate.hbm2ddl.auto">create-drop</prop>               
>                 <prop key="hibernate.connection.pool_size">10</prop>
>                 <prop key="hibernate.jdbc.batch_size">1000</prop>
>                 <prop
> key="hibernate.bytecode.use_reflection_optimizer">true</prop>
>             </props>
>         </property>
>         <property name="annotatedClasses">
>             <list>                               
>                
> <value>com.appandmore.storefinder.backend.core.domain.offer.Offer</value>                
>                
> <value>com.appandmore.storefinder.backend.core.domain.store.Image</value>
>                
> <value>com.appandmore.storefinder.backend.core.domain.store.Store</value>
> 	
> <value>com.appandmore.storefinder.backend.core.domain.store.OpeningPeriod</value>
> 
> <value>com.appandmore.storefinder.backend.core.domain.store.CommunicationData</value>
>                
> <value>com.appandmore.storefinder.backend.core.domain.user.Role</value>
>                
> <value>com.appandmore.storefinder.backend.core.domain.user.User</value>                
>                
> <value>com.appandmore.storefinder.backend.core.domain.base.BusinessObject</value>
>             </list>
>         </property>
>         
>         <property name="schemaUpdate" value="${hibernate.schemaUpdate}"/>
>     </bean>
>     
>     <tx:annotation-driven/>
>     <bean id="transactionManager"
>          
> class="org.springframework.orm.hibernate3.HibernateTransactionManager">
>         <property name="sessionFactory" ref="sessionFactory"/>
>     </bean>
> </beans>
> /
> 
> 
> 
> *Log of the web request which leads to the exception *(user entered login
> data and pressed the login button)
> 
> DEBUG - OpenSessionInViewFilter    - Using SessionFactory 'sessionFactory'
> for OpenSessionInViewFilter
> DEBUG - OpenSessionInViewFilter    - Opening single Hibernate Session in
> OpenSessionInViewFilter
> INFO  - AuthenticatedSession       - User trys to login with username:
> admin@appandmore.com
> Hibernate: select this_.id as id4_0_, this_.createdOn as createdOn4_0_,
> this_.editedOn as editedOn4_0_, this_.active as active4_0_, this_.email as
> email4_0_, this_.firstname as firstname4_0_, this_.lastname as lastname4_0_,
> this_.password as password4_0_ from User this_ where this_.email=?
> INFO  - AuthenticatedSession       - User 'admin@appandmore.com' is logged
> in successfully. 
> INFO  - ClassCryptFactory          - using encryption/decryption object
> org.apache.wicket.util.crypt.SunJceCrypt@7b6b89ad
> DEBUG - OpenSessionInViewFilter    - Closing single Hibernate Session in
> OpenSessionInViewFilter
> DEBUG - OpenSessionInViewFilter    - Using SessionFactory 'sessionFactory'
> for OpenSessionInViewFilter
> DEBUG - OpenSessionInViewFilter    - Opening single Hibernate Session in
> OpenSessionInViewFilter
> ERROR - DefaultExceptionMapper     - Unexpected error occurred
> org.apache.wicket.WicketRuntimeException: Can't instantiate page using
> constructor public
> com.appandmore.storefinder.backend.core.web.page.StoreTablePage()
> at
> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:173)
> 	at
> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:59)
> 	at
> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:95)
> 	at
> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:43)
> 	at
> org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:107)
> 	at
> org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:266)
> 	at
> org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:160)
> 	at
> org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78)
> 	at
> org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:105)
> 	at
> org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:219)
> 	at
> org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:139)
> 	at
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:717)
> 	at
> org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63)
> 	at
> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
> 	at
> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253)
> 	at
> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:160)
> 	at
> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:216)
> 	at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
> 	at
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
> 	at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
> 	at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
> 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> 	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:712)
> 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> 	at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
> 	at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> 	at org.mortbay.jetty.Server.handle(Server.java:295)
> 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
> 	at
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
> 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
> 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
> 	at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:361)
> 	at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> Caused by: java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> 	at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> 	at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> 	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> 	at
> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:155)
> 	... 36 more
> Caused by: org.hibernate.LazyInitializationException: failed to lazily
> initialize a collection of role:
> com.appandmore.storefinder.backend.core.domain.user.User.roles, no session
> or session was closed
> 	at
> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
> 	at
> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
> 	at
> org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
> 	at
> org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
> 	at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:186)
> 	at
> com.appandmore.storefinder.backend.core.web.AuthenticatedSession.getRoles(AuthenticatedSession.java:68)
> 	at
> org.apache.wicket.authroles.authentication.AuthenticatedWebApplication.hasAnyRole(AuthenticatedWebApplication.java:78)
> 	at
> org.apache.wicket.authroles.authorization.strategies.role.AbstractRoleAuthorizationStrategy.hasAny(AbstractRoleAuthorizationStrategy.java:62)
> 	at
> org.apache.wicket.authroles.authorization.strategies.role.annotations.AnnotationsRoleAuthorizationStrategy.isInstantiationAuthorized(AnnotationsRoleAuthorizationStrategy.java:60)
> 	at
> org.apache.wicket.authorization.strategies.CompoundAuthorizationStrategy.isInstantiationAuthorized(CompoundAuthorizationStrategy.java:62)
> 	at org.apache.wicket.Application$1.onInstantiation(Application.java:278)
> 	at
> org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:36)
> 	at
> org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:34)
> 	at
> org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:79)
> 	at
> org.apache.wicket.application.ComponentInstantiationListenerCollection.onInstantiation(ComponentInstantiationListenerCollection.java:32)
> 	at org.apache.wicket.Component.<init>(Component.java:676)
> 	at org.apache.wicket.MarkupContainer.<init>(MarkupContainer.java:117)
> 	at org.apache.wicket.Page.<init>(Page.java:211)
> 	at org.apache.wicket.Page.<init>(Page.java:175)
> 	at org.apache.wicket.markup.html.WebPage.<init>(WebPage.java:72)
> 	at
> com.appandmore.storefinder.backend.common.web.page.BasePage.<init>(BasePage.java:30)
> 	at
> com.appandmore.storefinder.backend.core.web.page.StoreTablePage.<init>(StoreTablePage.java:23)
> 	... 41 more
> DEBUG - OpenSessionInViewFilter    - Closing single Hibernate Session in
> OpenSessionInViewFilter
> 
> --
> View this message in context: http://apache-wicket.1842946.n4.nabble.com/Lazy-loading-exception-despite-of-OpenSessionInViewFilter-and-object-loading-within-a-request-tp3786744p3786744.html
> Sent from the Users forum mailing list archive at Nabble.com.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: 1.5: How to get Page instance from RequestCycle in IRequestCycleListener

Posted by Martin Grigorov <mg...@apache.org>.
See how org.apache.wicket.protocol.http.RequestLoggerRequestCycleListener
does this.

On Sat, Sep 3, 2011 at 4:35 AM,  <bh...@actrix.gen.nz> wrote:
> Hi,
>
> in 1.4, I could get the last page instance with
> WebRequestCycle#getResponsePage()
>
>
> In 1.5, I cannot find org.apache.wicket.Page instances, only
> IRequestablePage, and this indirectly via
> (RenderPageRequestHandler)getActiveRequestHandler()
>
> Any help is appreciated.
>
> Kind Regards,
>
> Bernard
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


1.5: How to get Page instance from RequestCycle in IRequestCycleListener

Posted by bh...@actrix.gen.nz.
Hi,

in 1.4, I could get the last page instance with
WebRequestCycle#getResponsePage()


In 1.5, I cannot find org.apache.wicket.Page instances, only
IRequestablePage, and this indirectly via
(RenderPageRequestHandler)getActiveRequestHandler()

Any help is appreciated.

Kind Regards,

Bernard

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org