-Eric
On 3/1/12 9:43 AM, Drew Wills wrote:
We would get stack traces referring here...https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/layout/dlm/DistributedLayoutManager.java#L461and here...https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/layout/dlm/DistributedLayoutManager.java#L464drew On 3/1/2012 8:31 AM, Eric Dalquist wrote:Drew could you correlate your line 455 with a linenumber on github, ex:https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/layout/dlm/DistributedLayoutManager.java#L455-Eric On 2/29/12 3:48 PM, Drew Wills wrote:Hey folks, I just encountered some behavior in a running instance of uPortal 4 that I can't explain -- is there someone who can help me understand how this is possible? also maybe how to prevent it in the future? User-facing behavior... - User clicks on something to personalize the layout: add tab, remove tab, add portlet, etc. - Nothing happens in the browser, but the requested change is there when the portal page is refreshed - Using a tool like firebug, we can see that the ajax call to /uPortal/api/layout is coming back with an HTTP 400 (bad request) or 500 (internal error) -- which one you get depends on which operation you invoke - So that explains the initial behavior in the browser: the change isn't applied by JavaScript because the jQuery success function is never called - Looking in the logs we discover an NPE in DistributedLayoutManager (pasted at bottom) - Looking at the code, this error explains the server-side behavior: the issue that caused the HTTP 400/500 happened *after* the layout change was applied, so the user sees the change when he refreshes the page - The line that caused the error is this one... this.portalEventFactory.publishFolderAddedToLayoutPortalEvent(this, this.owner, layoutId, node.getId()); - The portalEventFactory member variable is null- That member variable is wired to the layoutManager by Spring as follows@Autowired public void setPortalEventFactory(IPortalEventFactory portalEventFactory) { this.portalEventFactory = portalEventFactory; } - The UpdatePreferencesServlet (after several nested methods) gets it's reference to the layoutManager as follows final IUserLayoutManager userLayoutManager =(IUserLayoutManager)this.beanFactory.getBean(USER_LAYOUT_MANAGER_PROTOTYPE_BEAN_NAME,person, profile); So, I don't understand how the portalEventFactory could be null -- I would think the app context would fail to come up at all. This issue effected only 1 of 2 server nodes, and a restart cleared it up. Any thoughts? drew ** STACK TRACE ** SEVERE: Servlet.service() for servlet MVCDispatcherServlet threw exception java.lang.NullPointerException atorg.jasig.portal.layout.dlm.DistributedLayoutManager.addNode(DistributedLayoutManager.java:455)atorg.jasig.portal.layout.TransientUserLayoutManagerWrapper.addNode(TransientUserLayoutManagerWrapper.java:158)atorg.jasig.portal.layout.dlm.remoting.UpdatePreferencesServlet.addPortlet(UpdatePreferencesServlet.java:576)at sun.reflect.GeneratedMethodAccessor544.invoke(Unknown Source) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597) atorg.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)atorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)atorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)atorg.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585)at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal(ShallowEtagHeaderFilter.java:58)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369)atorg.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)atorg.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:91)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:89)atorg.jasig.portal.spring.security.preauth.PortalPreAuthenticatedProcessingFilter.doFilter(PortalPreAuthenticatedProcessingFilter.java:106)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)atorg.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)atorg.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168)atorg.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)atorg.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)atorg.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)
smime.p7s
Description: S/MIME Cryptographic Signature
