Project

General

Profile

bug #6067

CdmEagerLoadingException after having multiple editors open for ~4 hours

Added by Andreas Kohlbecker over 3 years ago. Updated over 3 years ago.

Status:
New
Priority:
New
Assignee:
Category:
taxeditor
Target version:
Start date:
09/12/2016
Due date:
% Done:

0%

Severity:
normal
Found in Version:

Description

Hallo,
nachdem ich über 40 Fenster über lange Zeit (mehrere Stunden) offen hatte, bekam ich die Fehlermeldungen
VG
Henning

ogin : admin
editor version : 4.3.0.201608011912
server : test.e-taxonomy.eu / edit-test
schema version : 4.0.0.0.201604200000
os : Windows 7 6.1 amd64
java : 1.7.0_75
org.eclipse.swt.SWTException: Failed to execute runnable (eu.etaxonomy.taxeditor.remoting.CdmEagerLoadingException: java.lang.NullPointerException)
                at org.eclipse.swt.SWT.error(SWT.java:4282)
                at org.eclipse.swt.SWT.error(SWT.java:4197)
                at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
                at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
                at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
                at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
                at org.eclipse.jface.window.Window.open(Window.java:801)
                at org.eclipse.jface.dialogs.ErrorDialog.open(ErrorDialog.java:360)
                at eu.etaxonomy.taxeditor.model.MessagingUtils$1.run(MessagingUtils.java:268)
                at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
                at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
                at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
                at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
                at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
                at org.eclipse.jface.window.Window.open(Window.java:801)
                at org.eclipse.ui.internal.EditorManager.saveAll(EditorManager.java:1236)
                at org.eclipse.ui.internal.Workbench$19.run(Workbench.java:1189)
                at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
                at org.eclipse.ui.internal.Workbench.saveAllEditors(Workbench.java:1138)
                at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1056)
                at org.eclipse.ui.internal.Workbench.access$15(Workbench.java:1040)
                at org.eclipse.ui.internal.Workbench$25.run(Workbench.java:1284)
                at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
                at org.eclipse.ui.internal.Workbench.close(Workbench.java:1282)
                at org.eclipse.ui.internal.Workbench.close(Workbench.java:1254)
                at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:727)
                at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:715)
                at org.eclipse.ui.internal.WorkbenchWindow$6.run(WorkbenchWindow.java:867)
                at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
                at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:865)
                at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:741)
                at org.eclipse.jface.window.Window$3.shellClosed(Window.java:687)
                at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:98)
                at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
                at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
                at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
                at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
                at org.eclipse.swt.widgets.Decorations.closeWidget(Decorations.java:308)
                at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1677)
                at org.eclipse.swt.widgets.Control.windowProc(Control.java:4530)
                at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
                at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1610)
                at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
                at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972)
                at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
                at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2526)
                at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:498)
                at org.eclipse.swt.widgets.Control.windowProc(Control.java:4623)
                at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
                at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1610)
                at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
                at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972)
                at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
                at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2526)
                at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:498)
                at org.eclipse.swt.widgets.Control.windowProc(Control.java:4623)
                at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
                at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1610)
                at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
                at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972)
                at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
                at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2531)
                at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752)
                at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
                at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
                at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
                at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
                at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
                at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
                at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
                at eu.etaxonomy.taxeditor.Application.start(Application.java:24)
                at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
                at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
                at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
                at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
                at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
                at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
                at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Caused by: eu.etaxonomy.taxeditor.remoting.CdmEagerLoadingException: java.lang.NullPointerException
                at org.hibernate.collection.internal.AbstractPersistentCollection.remoteInitialize(AbstractPersistentCollection.java:1358)
                at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:627)
                at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:167)
                at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:184)
                at org.hibernate.collection.internal.PersistentList.size(PersistentList.java:114)
                at eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection.setSectionTitle(AbstractEntityCollectionSection.java:145)
                at eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection.internalUpdateSection(AbstractEntityCollectionSection.java:171)
                at eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection.setEntity(AbstractEntityCollectionSection.java:133)
                at eu.etaxonomy.taxeditor.view.detail.CdmSectionPart.setFormInput(CdmSectionPart.java:109)
                at org.eclipse.ui.forms.ManagedForm.setInput(ManagedForm.java:238)
                at eu.etaxonomy.taxeditor.view.AbstractCdmDataViewer.refresh(AbstractCdmDataViewer.java:155)
                at eu.etaxonomy.taxeditor.view.AbstractCdmDataViewer.setInput(AbstractCdmDataViewer.java:135)
                at eu.etaxonomy.taxeditor.view.AbstractCdmViewPart.showViewer(AbstractCdmViewPart.java:116)
                at eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart.selectionChanged_internal(SupplementalDataViewPart.java:96)
                at eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart$DelaySelection.run(AbstractCdmEditorViewPart.java:52)
                at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
                at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
                ... 80 more
Caused by: java.lang.NullPointerException
                at eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl.initializeCollection(CdmGenericDaoImpl.java:785)
                at eu.etaxonomy.cdm.api.service.CommonServiceImpl.initializeCollection(CommonServiceImpl.java:342)
                at sun.reflect.GeneratedMethodAccessor1581.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:497)
                at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
                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.invoke(TransactionInterceptor.java:110)
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
                at com.sun.proxy.$Proxy3375.initializeCollection(Unknown Source)
                at sun.reflect.GeneratedMethodAccessor1581.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:497)
                at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
                at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
                at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:78)
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
                at com.sun.proxy.$Proxy3634.initializeCollection(Unknown Source)
                at sun.reflect.GeneratedMethodAccessor2414.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:497)
                at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:212)
                at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:39)
                at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
                at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCreateResult(RemoteInvocationBasedExporter.java:114)
                at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:74)
                at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
                at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
                at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
                at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
                at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:871)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
                at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
                at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)
                at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)
                at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
                at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:213)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:162)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
                at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
                at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
                at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
                at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
                at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
                at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
                at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
                at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
                at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
                at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
                at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
                at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
                at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
                at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
                at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
                at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
                at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
                at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
                at org.eclipse.jetty.server.Server.handle(Server.java:497)
                at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
                at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
                at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
                at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
                at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
                at java.lang.Thread.run(Thread.java:745)
                at org.springframework.remoting.support.RemoteInvocationUtils.fillInClientStackTraceIfPossible(RemoteInvocationUtils.java:45)
                at org.springframework.remoting.support.RemoteInvocationResult.recreate(RemoteInvocationResult.java:149)
                at org.springframework.remoting.support.RemoteInvocationBasedAccessor.recreateRemoteInvocationResult(RemoteInvocationBasedAccessor.java:85)
                at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:150)
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
                at com.sun.proxy.$Proxy7.initializeCollection(Unknown Source)
                at eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl.initializeCollection(CachedCommonServiceImpl.java:70)
                at org.hibernate.collection.internal.AbstractPersistentCollection.remoteInitialize(AbstractPersistentCollection.java:1340)
                ... 96 more

History

#1 Updated by Andreas Müller over 3 years ago

The relevant code is at CdmGenericDaoImpl.initializeCollection(UUID ownerUuid, ...) line 784

   CdmBase cdmBase = load(ownerUuid, propertyPaths);
   Field field = ReflectionUtils.findField(cdmBase.getClass(), fieldName);

So it looks like owerUuid does not exists anymore. Maybe it was deleted before by one of the many sessions Henning had opened? From the stackstrace we can't say which uuid does not exist anymore.

So we could do the following:

Adjust the code in a way that the NPE is handled as a specific exception clearly explaining to the users that there is a required object that probably has been deleted in the meanwhile and therefore the required action can not be performed.

On cdmlib side this exception handling needs to be generic. More difficult is the editor side where this problem may occur at many different places and the question is if we want to catch and react on it always specifically.

Generally it is a concurrent transaction handling issue and which is a general issue that is not yet discussed and implemented properly.

#2 Updated by Andreas Müller over 3 years ago

  • Assignee changed from Andreas Müller to Katja Luther

#3 Updated by Andreas Kohlbecker over 3 years ago

Henning was about to close some views/editors when this happened.

I think that this exception related to the fresh import that I applied to the running cdm instance while Henning had Editors with old data open.
This is a very unusual situation and I don#t think that we need to invest time for that, therefore i suggest to close this ticket as 'wontfix'.

#4 Updated by Andreas Müller over 3 years ago

So it is you who deleted data in the meanwhile?

However, the general transaction problem exist. No matter if an object is deleted by a fresh import or by some other user or by the same user within an other transaction and it may reappear.

So at least improving the error handling for uuids which do not have a persisted object anymore to me seems like a good idea (also at other places).

Same as creating a new ticket for general transaction handling.

#5 Updated by Andreas Kohlbecker over 3 years ago

Andreas Müller wrote:

So it is you who deleted data in the meanwhile?

Exaclty, the old data was deleted when applied the new import the db.

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 40 MB)