title: Using Spring Boot and Data JPA, getting LazyInitializationException despite the OpenSesionInViewFilter
body: <p>I'm using tapestry 5 with spring boot, using this great little library: <a href="https://github.com/code8/tapestry-boot" rel="nofollow">https://github.com/code8/tapestry-boot</a></p>
  
  <p>However I'm getting the infamous LazyInitializationException despite my use of OpenSesionInViewFilter. Pros and cons of OpenSesionInViewFilter aside, I'd like to get this working with OpenSesionInViewFilter as I'm porting a large legacy application.</p>
  
  <p>My spring boot configuration is</p>
  
  <pre><code>@SpringBootApplication
  public class Launcher {
      public static void main(String[] args) {
          new SpringApplicationBuilder(Launcher.class)
                  .web(true)
                  .run(args);
      }
      @Bean
      public HibernateJpaSessionFactoryBean sessionFactory() {
          return new HibernateJpaSessionFactoryBean();
      }
  
      @Bean
      public FilterRegistrationBean registerOpenSessionInViewFilterBean() {
          FilterRegistrationBean registrationBean = new FilterRegistrationBean();
          OpenSessionInViewFilter filter = new OpenSessionInViewFilter();
          registrationBean.setFilter(filter);
          registrationBean.setOrder(5);
          return registrationBean;
      }
  }
  </code></pre>
  
  <p>I've ensured that OpenSessionInViewFilter is being loaded before the TapestryFilter, and verified this via spring's output on boot. I edited the tapestry-boot library to setOrder(10) on the TapestryFilter.</p>
  
  <p>I've also verified via debugging that OpenSessionInViewFilter is actually creating a session.</p>
  
  <p>In the example stack trace of the LIE below, you can see that OpenSessionInViewFilter is being used.</p>
  
  <p>I have 2 levels of service layers:</p>
  
  <pre><code>Tapestry Pages --&gt; XXManagerImpl (e.g, UserManager) --&gt; JpaRepository
  </code></pre>
  
  <p>My Manager services are annotated like so:</p>
  
  <pre><code>@Service
  @Transactional(propagation = Propagation.REQUIRED)
  public class UserManagerImpl implements UserManager, Serializable
  </code></pre>
  
  <p>My JpaRepositories are not annotated with @Transactional nor @Repository (in case it matters).</p>
  
  <p>The initial data acess works as expected, but when I try to access a Lazy initialized field, I get the LIE.</p>
  
  <p>Root exception:</p>
  
  <pre><code>Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
      at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:147) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
      at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:260) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
      at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:68) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
      at org.mypackage.model.submodel.othermodel$$_jvstde5_1.getName(OtherModel$$_jvstde5_1.java) ~[main/:na]
      at $InternalPropertyConduit_97875b5f2687.get(Unknown Source) ~[na:na]
      at org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:63) ~[tapestry-core-5.4.1.jar:na]
  </code></pre>
  
  <p>Example stack trace:</p>
  
  <pre><code>org.apache.tapestry5.ioc.internal.OperationException: Render queue error in Expansion[PropBinding[expansion mypage/Edit(model.othermodel.name)]]: could not initialize proxy - no Session
      at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:186) ~[tapestry-ioc-5.4.1.jar:na]
      at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:62) ~[tapestry-ioc-5.4.1.jar:na]
      at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:60) ~[tapestry-ioc-5.4.1.jar:na]
      at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1254) ~[tapestry-ioc-5.4.1.jar:na]
      at org.apache.tapestry5.internal.services.RequestOperationTracker.handlePageRender(RequestOperationTracker.java:66) ~[tapestry-core-5.4.1.jar:na]
      at $ComponentRequestHandler_94ac265764f4.handlePageRendewn Source) ~[na:na]
      at $ComponentRequestHandler_94ac2657642d.handlePageRender(Unknown Source) ~[na:na]
      at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:55) ~[tapestry-core-5.4.1.jar:na]
      at $Dispatcher_94ac265764c8.dispatch(Unknown Source) ~[na:na]
      at $Dispatcher_94ac26576473.dispatch(Unknown Source) ~[na:na]
      at org.apache.tapestry5.modules.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:305) ~[tapestry-core-5.4.1.jar:na]
      at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) ~[tapestry-core-5.4.1.jar:na]
      at $RequestHandler_94ac265764c7.service(Unknown Source) [na:na]
      at org.apache.tapestry5.modules.TapestryModule$3.service(TapestryModule.java:846) [tapestry-core-5.4.1.jar:na]
      at $RequestHandler_94ac265764c7.service(Unknown Source) [na:na]
      at org.apache.tapestry5.modules.TapestryModule$2.service(TapestryModule.java:836) [tapestry-core-5.4.1.jar:na]
      at $RequestHandler_94ac265764c7.service(Unknown Source) [na:na]
      at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:89) [tapestry-core-5.4.1.jar:na]
      at $RequestHandler_94ac265764c7.service(Unknown Source) [na:na]
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105) [tapestry-core-5.4.1.jar:na]
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95) [tapestry-core-5.4.1.jar:na]
      at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83) [tapestry-ioc-5.4.1.jar:na]
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119) [tapestry-core-5.4.1.jar:na]
      at $RequestHandler_94ac265764c7.service(Unknown Source) [na:na]
      at $RequestHandler_94ac2657649d.service(Unknown Source) [na:na]
      at org.apache.tapestry5.modules.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:256) [tapestry-core-5.4.1.jar:na]
      apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:45) [tapestry-upload-5.4.1.jar:na]
      at $HttpServletRequestHandler_94ac265764c4.service(Unknown Source) [na:na]
      at org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:59) [tapestry-core-5.4.1.jar:na]
      at $HttpServletRequestHandler_94ac265764c4.service(Unknown Source) [na:na]
      at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) [tapestry-core-5.4.1.jar:na]
      at $HttpServletRequestFilter_94ac2657645a.service(Unknown Source) [na:na]
      at $HttpServletRequestHandler_94ac265764c4.service(Unknown Source) [na:na]
      at org.apache.tapestry5.modules.TapestryModule$1.service(TapestryModule.java:796) [tapestry-core-5.4.1.jar:na]
      at $HttpServletRequestHandler_94ac265764c4.service(Unknown Source) [na:na]
      at $HttpServletRequestHandler_94ac26576458.service(Unknown Source) [na:na]
      at info.code8.tapestry.TapestryFilter.doFilter(TapestryFilter.java:49) [tapestry-boot-0.1.0-SNAPSHOT.jar:na]
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [tomcat-embed-core-8.0.32.jar:8.0.32]
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [tomcat-embed-core-8.0.32.jar:8.0.32]
      at org.springframework.orm.hibernate5.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151) [spring-orm-4.2.5.RELEASE.jar:4.2.5.RELEASE]
  at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.5.RELEASE.jar:4.2.5.RELEASE]
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [tomcat-embed-core-8.0.32.jar:8.0.32]
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
  </code></pre>
  
  <p>Lib versions:</p>
  
  <pre><code>   tapestry           : 5.4.1
     hibernate          : hibernate-core-5.1.0.Final
     spring framework   : 4.2.5.RELEASE
     spring-boot        : 1.3.3.RELEASE
     spring-data-jpa    : 1.10.1.RELEASE   // for  querydsl 4 support
     spring-data-commons: 1.12.1.RELEASE   // for  querydsl 4 support
  </code></pre>