Uploaded image for project: 'Nuxeo Platform'
  1. Nuxeo Platform
  2. NXP-22057

Make it possible to access Home > Alerts tab when you subscribed to notifications

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 9.1-SNAPSHOT
    • Fix Version/s: 9.1
    • Component/s: Notifications
    • Impact type:
      API change
    • Upgrade notes:
      Hide

      Deprecated NotificationManager#getSubscribedDocuments(String prefixedPrincipalName)

      Added NotificationManager#getSubscribedDocuments(String prefixedPrincipalName, String respositoryName)

      Removed UnrestrictedDocFetcher

      Show
      Deprecated NotificationManager#getSubscribedDocuments(String prefixedPrincipalName) Added NotificationManager#getSubscribedDocuments(String prefixedPrincipalName, String respositoryName) Removed UnrestrictedDocFetcher
    • Sprint:
      nxfit 9.1.10
    • Story Points:
      3

      Description

      When you subscribed to notification on a document and you click Home > Alerts, you get an error:

      • on Firefox : There was an error communicating with the server, status: 500
      • On Edge: Page not found error page
        avr. 06, 2017 11:43:10 AM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
        GRAVE: Error Rendering View[/view_home.xhtml]
        org.nuxeo.ecm.core.api.NuxeoException: The DocumentModel is not associated to an open CoreSession: DocumentModelImpl(72603a63-6818-434f-b8d4-b325823f5b7f, path=/default-domain/workspaces/WS1, title=72603a63-6818-434f-b8d4-b325823f5b7f)
        	at org.nuxeo.ecm.core.api.impl.DocumentModelImpl.getSession(DocumentModelImpl.java:378)
        	at org.nuxeo.ecm.core.api.impl.DocumentModelImpl.loadDataModel(DocumentModelImpl.java:448)
        	at org.nuxeo.ecm.core.api.impl.DocumentModelImpl.getDataModel(DocumentModelImpl.java:458)
        	at org.nuxeo.ecm.core.api.impl.DocumentModelImpl.getPart(DocumentModelImpl.java:1219)
        	at org.nuxeo.ecm.core.api.impl.DocumentModelImpl.getProperty(DocumentModelImpl.java:1267)
        	at org.nuxeo.ecm.core.api.impl.DocumentModelImpl.getPropertyValue(DocumentModelImpl.java:1326)
        	at org.nuxeo.ecm.platform.ec.notification.SubscriptionAdapter.getNotificationMap(SubscriptionAdapter.java:80)
        	at org.nuxeo.ecm.platform.ec.notification.SubscriptionAdapter.getUserSubscriptions(SubscriptionAdapter.java:140)
        	at org.nuxeo.ecm.user.center.notification.UserNotificationActions.fetchSubscriptionsFor(UserNotificationActions.java:88)
        	at org.nuxeo.ecm.user.center.notification.UserNotificationActions.getUserSubscriptions(UserNotificationActions.java:68)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:498)
        	at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
        	at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
        	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
        	at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
        	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        	at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:79)
        	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        	at org.nuxeo.ecm.platform.ui.web.util.NuxeoExceptionInterceptor.aroundInvoke(NuxeoExceptionInterceptor.java:80)
        	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        	at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
        	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        	at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
        	at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:196)
        	at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:114)
        	at org.nuxeo.ecm.user.center.notification.UserNotificationActions_$$_javassist_seam_66.getUserSubscriptions(UserNotificationActions_$$_javassist_seam_66.java)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:498)
        	at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
        	at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
        	at org.jboss.seam.Component.callComponentMethod(Component.java:2319)
        	at org.jboss.seam.Component.createInstanceFromFactory(Component.java:2156)
        	at org.jboss.seam.Component.getInstanceFromFactory(Component.java:2127)
        	at org.jboss.seam.Component.getInstance(Component.java:2025)
        	at org.jboss.seam.Component.getInstance(Component.java:1997)
        	at org.jboss.seam.Component.getInstance(Component.java:1991)
        	at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:55)
        	at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:50)
        	at org.jboss.seam.el.SeamELResolver.resolveBase(SeamELResolver.java:148)
        	at org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:51)
        	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
        	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
        	at org.jboss.el.parser.AstIdentifier.getValue(AstIdentifier.java:44)
        	at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
        	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
        	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
        	at javax.faces.component.UIData.getValue(UIData.java:732)
        	at javax.faces.component.UIData.getDataModel(UIData.java:1822)
        	at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
        	at javax.faces.component.UIData.setRowIndex(UIData.java:473)
        	at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:83)
        	at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:864)
        	at javax.faces.component.UIData.encodeBegin(UIData.java:1133)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1855)
        	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
        	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1857)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
        	at org.richfaces.renderkit.RendererBase.renderChildren(RendererBase.java:282)
        	at org.richfaces.renderkit.html.AjaxOutputPanelRenderer.doEncodeChildren(AjaxOutputPanelRenderer.java:57)
        	at org.richfaces.renderkit.RendererBase.encodeChildren(RendererBase.java:158)
        	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1857)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
        	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1860)
        	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:461)
        	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
        	at org.jboss.seam.jsf.SeamViewHandler.renderView(SeamViewHandler.java:188)
        	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
        	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
        	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
        	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
        	at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
        	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        	at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
        	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        	at org.nuxeo.elasticsearch.web.sync.UIThreadMarker.doFilter(UIThreadMarker.java:48)
        	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        	at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.core.management.jtajca.internal.Log4jWebFilter.doFilter(Log4jWebFilter.java:69)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.doFilterInternal(NuxeoAuthenticationFilter.java:441)
        	at org.nuxeo.ecm.platform.ui.web.auth.service.NuxeoAuthFilterChain.doFilter(NuxeoAuthFilterChain.java:51)
        	at org.nuxeo.ecm.platform.ui.web.auth.oauth.NuxeoOAuthFilter.doFilter(NuxeoOAuthFilter.java:122)
        	at org.nuxeo.ecm.platform.ui.web.auth.service.NuxeoAuthFilterChain.doFilter(NuxeoAuthFilterChain.java:49)
        	at org.nuxeo.ecm.platform.ui.web.auth.oauth2.NuxeoOAuth2Filter.doFilter(NuxeoOAuth2Filter.java:83)
        	at org.nuxeo.ecm.platform.ui.web.auth.service.NuxeoAuthFilterChain.doFilter(NuxeoAuthFilterChain.java:49)
        	at org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.doFilter(NuxeoAuthenticationFilter.java:409)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.web.common.exceptionhandling.NuxeoExceptionFilter.doFilter(NuxeoExceptionFilter.java:67)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.web.common.encoding.NuxeoEncodingFilter.doFilter(NuxeoEncodingFilter.java:75)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:747)
        	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485)
        	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:410)
        	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
        	at org.nuxeo.ecm.platform.ui.web.rest.FancyURLFilter.doFilter(FancyURLFilter.java:112)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.web.common.requestcontroller.filter.NuxeoRequestControllerFilter.doFilter(NuxeoRequestControllerFilter.java:146)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.webdav.service.WIRequestFilter.doFilter(WIRequestFilter.java:61)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.doFilterInternal(NuxeoAuthenticationFilter.java:606)
        	at org.nuxeo.ecm.platform.ui.web.auth.service.NuxeoAuthFilterChain.doFilter(NuxeoAuthFilterChain.java:51)
        	at org.nuxeo.ecm.platform.ui.web.auth.oauth.NuxeoOAuthFilter.doFilter(NuxeoOAuthFilter.java:122)
        	at org.nuxeo.ecm.platform.ui.web.auth.service.NuxeoAuthFilterChain.doFilter(NuxeoAuthFilterChain.java:49)
        	at org.nuxeo.ecm.platform.ui.web.auth.oauth2.NuxeoOAuth2Filter.doFilter(NuxeoOAuth2Filter.java:83)
        	at org.nuxeo.ecm.platform.ui.web.auth.service.NuxeoAuthFilterChain.doFilter(NuxeoAuthFilterChain.java:49)
        	at org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.doFilter(NuxeoAuthenticationFilter.java:409)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.web.common.requestcontroller.filter.NuxeoCorsFilter.doFilter(NuxeoCorsFilter.java:51)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.web.common.exceptionhandling.NuxeoExceptionFilter.doFilter(NuxeoExceptionFilter.java:67)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.nuxeo.ecm.platform.web.common.encoding.NuxeoEncodingFilter.doFilter(NuxeoEncodingFilter.java:75)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
        	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
        	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
        	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
        	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        	at java.lang.Thread.run(Thread.java:745)
        

      ----------------------------------------------------------------------------------------------
      This was due to NXP-21334 and the fact that the subscribed documents were fetched in an UnrestrictedSessionRunner: once the unrestricted session was closed, trying to get a property from a data model that hadn't been loaded would throw this exception.

      The solution is to detach the documents within the unrestricted code.
      Note that NXP-22078 would allow more fluent calls involving DocumentModel#detach(boolean loadAll).

      Ideally, we should stop using adapters manipulating the whole document, and just fetch the property that we are interested in, here notif:notifications. Generally speaking, the adapter pattern doesn't work well with unrestricted stuff.

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: