org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) ...

Atlassian JIRA | Matthew Jensen [Atlassian] | 3 years ago
  1. 0

    This manager provides a service to track {{ImageDetails}} for image attachments. When requesting an {{ImageDetails}} object for an attachment it will create on if it does not exist. The {{ThumbnailManager}} uses this service to provide thumbnails for image attachments. This is the flow: # {{DefaultThumbnailManager.getThumbnailInfo}} is called to get the thumbnail for an attachment # This calls {{DefaultImageDetailsManager.getImageDetails}} to see if there is a stored {{ImageDetails}} object for the attachment # If there is none available {{DefaultImageDetailsManager.createImageDetails}} is called to create one, which is then stored. The problem is {{DefaultImageDetailsManager}} does not define what transactions are required. So if you call this method in a READ_ONLY transaction and there is no {{ImageDetails}} available for the attachment, then you get an exception like this: {noformat} org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) ... at com.atlassian.confluence.pages.attachments.DefaultImageDetailsDao.save(DefaultImageDetailsDao.java:23) at com.atlassian.confluence.pInvalidDataAccessApiUsageExceptionages.attachments.DefaultImageDetailsManager.storeImageDetails(DefaultImageDetailsManager.java:69) at com.atlassian.confluence.pages.attachments.DefaultImageDetailsManager.createImageDetails(DefaultImageDetailsManager.java:61) at com.atlassian.confluence.pages.attachments.DefaultImageDetailsManager.getImageDetails(DefaultImageDetailsManager.java:49) at com.atlassian.confluence.pages.thumbnail.DefaultThumbnailManager.getThumbnailInfo(DefaultThumbnailManager.java:128) at com.atlassian.confluence.pages.thumbnail.DefaultThumbnailManager.getThumbnailInfo(DefaultThumbnailManager.java:122) {noformat}

    Atlassian JIRA | 3 years ago | Matthew Jensen [Atlassian]
    org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) ...
  2. 0

    This manager provides a service to track {{ImageDetails}} for image attachments. When requesting an {{ImageDetails}} object for an attachment it will create on if it does not exist. The {{ThumbnailManager}} uses this service to provide thumbnails for image attachments. This is the flow: # {{DefaultThumbnailManager.getThumbnailInfo}} is called to get the thumbnail for an attachment # This calls {{DefaultImageDetailsManager.getImageDetails}} to see if there is a stored {{ImageDetails}} object for the attachment # If there is none available {{DefaultImageDetailsManager.createImageDetails}} is called to create one, which is then stored. The problem is {{DefaultImageDetailsManager}} does not define what transactions are required. So if you call this method in a READ_ONLY transaction and there is no {{ImageDetails}} available for the attachment, then you get an exception like this: {noformat} org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) ... at com.atlassian.confluence.pages.attachments.DefaultImageDetailsDao.save(DefaultImageDetailsDao.java:23) at com.atlassian.confluence.pInvalidDataAccessApiUsageExceptionages.attachments.DefaultImageDetailsManager.storeImageDetails(DefaultImageDetailsManager.java:69) at com.atlassian.confluence.pages.attachments.DefaultImageDetailsManager.createImageDetails(DefaultImageDetailsManager.java:61) at com.atlassian.confluence.pages.attachments.DefaultImageDetailsManager.getImageDetails(DefaultImageDetailsManager.java:49) at com.atlassian.confluence.pages.thumbnail.DefaultThumbnailManager.getThumbnailInfo(DefaultThumbnailManager.java:128) at com.atlassian.confluence.pages.thumbnail.DefaultThumbnailManager.getThumbnailInfo(DefaultThumbnailManager.java:122) {noformat}

    Atlassian JIRA | 3 years ago | Matthew Jensen [Atlassian]
    org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) ...
  3. 0

    InvalidDataAccessApiUsageException: Write operations are not allowed in read-only - Spring Forum

    spring.io | 1 year ago
    org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
  4. Speed up your debug routine!

    Automated exception search integrated into your IDE

  5. 0

    Bamboo throws the following error when trying to search for a user or a second user tries to log in. {noformat} org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) at org.springframework.orm.hibernate.HibernateTemplate$9.doInHibernate(HibernateTemplate.java:567) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:370) at org.springframework.orm.hibernate.HibernateTemplate.save(HibernateTemplate.java:565) at com.atlassian.user.impl.hibernate.DefaultExternalEntityDAO.saveExternalEntity(DefaultExternalEntityDAO.java:55) at com.atlassian.user.impl.hibernate.DefaultExternalEntityDAO.createExternalEntity(DefaultExternalEntityDAO.java:65) at com.atlassian.user.impl.hibernate.CachingExternalEntityDAO.createExternalEntity(CachingExternalEntityDAO.java:41) 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:606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy36.createExternalEntity(Unknown Source) at com.atlassian.user.impl.hibernate.HibernateGroupManager.getCorrespondingExternalEntity(HibernateGroupManager.java:331) at com.atlassian.user.impl.hibernate.HibernateGroupManager.getAllGroupsForUser(HibernateGroupManager.java:85) at com.atlassian.user.impl.hibernate.HibernateGroupManager.getGroups(HibernateGroupManager.java:76) at com.atlassian.user.impl.cache.CachingGroupManager.getGroups(CachingGroupManager.java:95) at com.atlassian.user.impl.delegation.DelegatingGroupManager.getGroups(DelegatingGroupManager.java:93) at sun.reflect.GeneratedMethodAccessor393.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.atlassian.crowd.integration.atlassianuser.DynamicDelegationAccessor$DelegatingInvocationHandler.invoke(DynamicDelegationAccessor.java:125) at com.sun.proxy.$Proxy31.getGroups(Unknown Source) at bucket.user.DefaultUserAccessor.getGroups(DefaultUserAccessor.java:441) at com.atlassian.bamboo.user.BambooUserManagerImpl.getGroupNamesAsList(BambooUserManagerImpl.java:457) at sun.reflect.GeneratedMethodAccessor392.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy50.getGroupNamesAsList(Unknown Source) at com.atlassian.bamboo.user.DefaultBambooUser.getAuthorities(DefaultBambooUser.java:151) at com.atlassian.bamboo.security.ImpersonationHelper.runAs(ImpersonationHelper.java:66) at com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:75) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) at com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:26) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:75) at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:71) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:240) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:148) at com.atlassian.seraph.filter.BambooLoginFilter.doFilter(BambooLoginFilter.java:34) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) at com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:61) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) at com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:100) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) at com.atlassian.bamboo.persistence.BambooSessionInViewFilter.doFilterInternal(BambooSessionInViewFilter.java:31) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.planetj.servlet.filter.compression.CompressingFilter.handleDoFilter(CompressingFilter.java:203) at com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:193) at com.atlassian.bamboo.filter.CompressingFilter.doFilter(CompressingFilter.java:73) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:27) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.core.filters.HeaderSanitisingFilter.doFilter(HeaderSanitisingFilter.java:44) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) {noformat}

    Atlassian JIRA | 2 years ago | Oliver Pereira
    org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition.
  6. 0

    Using the following in a custom authenticator in Confluence 3.5/4.0: com.atlassian.crowd.embedded.api.User crowdUser = crowdService.getUser(user.getName()); ImmutableUser.Builder userBuilder = new ImmutableUser.Builder(); // clone the user before making mods userBuilder.active(crowdUser.isActive()); userBuilder.directoryId(crowdUser.getDirectoryId()); userBuilder.displayName(crowdUser.getDisplayName()); userBuilder.emailAddress(crowdUser.getEmailAddress()); userBuilder.name(crowdUser.getName()); // ... only do the following if name/email is different crowdService.updateUser(userBuilder.toUser()); in one customer environment sometimes produces the following error. Any ideas as to what might be wrong that we could relay to this customer, or is this a problem with our implementation?: org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) at org.springframework.orm.hibernate.HibernateTemplate$11.doInHibernate(HibernateTemplate.java:590) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:370) at org.springframework.orm.hibernate.HibernateTemplate.update(HibernateTemplate.java:588) at org.springframework.orm.hibernate.HibernateTemplate.update(HibernateTemplate.java:584) at com.atlassian.crowd.embedded.hibernate2.HibernateUserDao.update(HibernateUserDao.java:225) at com.atlassian.confluence.user.crowd.CachedCrowdUserDao.update(CachedCrowdUserDao.java:177) at com.atlassian.crowd.directory.AbstractInternalDirectory.updateUser(AbstractInternalDirectory.java:396) at com.atlassian.crowd.manager.directory.DirectoryManagerGeneric.updateUser(DirectoryManagerGeneric.java:352) at com.atlassian.crowd.manager.application.ApplicationServiceGeneric.updateUser(ApplicationServiceGeneric.java:434) at com.atlassian.crowd.embedded.core.CrowdServiceImpl.updateUser(CrowdServiceImpl.java:315) Also posted as question here, but this seems like a bug. Even if the case is that the crowd repository is read-only, then it seems a more appropriate error would be generated. The goal is to have a custom authenticator in Confluence that is able to update user information in Crowd upon authentication via SSO.

    Atlassian JIRA | 5 years ago | Gary Weaver
    org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition.

    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. org.springframework.dao.InvalidDataAccessApiUsageException

      Write operations are not allowed in read-only mode (FlushMode.NEVER): Turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition. at org.springframework.orm.hibernate.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1000) ...

      at com.atlassian.confluence.pages.attachments.DefaultImageDetailsDao.save()
    2. com.atlassian.confluence
      DefaultThumbnailManager.getThumbnailInfo
      1. com.atlassian.confluence.pages.attachments.DefaultImageDetailsDao.save(DefaultImageDetailsDao.java:23)
      2. com.atlassian.confluence.pInvalidDataAccessApiUsageExceptionages.attachments.DefaultImageDetailsManager.storeImageDetails(DefaultImageDetailsManager.java:69)
      3. com.atlassian.confluence.pages.attachments.DefaultImageDetailsManager.createImageDetails(DefaultImageDetailsManager.java:61)
      4. com.atlassian.confluence.pages.attachments.DefaultImageDetailsManager.getImageDetails(DefaultImageDetailsManager.java:49)
      5. com.atlassian.confluence.pages.thumbnail.DefaultThumbnailManager.getThumbnailInfo(DefaultThumbnailManager.java:128)
      6. com.atlassian.confluence.pages.thumbnail.DefaultThumbnailManager.getThumbnailInfo(DefaultThumbnailManager.java:122)
      6 frames