Project

General

Profile

bug #8329

Updated by Andreas Müller over 4 years ago

In E+M test I tried to add a name relationship to Pinus picea (synonym for Abies alba) via Name editor. 

 I added name relationship "is validated" validating" with related name Abies alba Mill. subsp. alba 

 When trying to save this I got the following multirep exception: 

 ~~~~ 
 login : admin 
 editor version : 5.8.0.201906022251 
 server : test.e-taxonomy.eu (edit-test) / euromed 
 schema version : 5.5.0.0.20190221 
 os : Windows Server 2012 R2 6.3 amd64 
 java : 1.8.0_121 
 org.eclipse.e4.core.di.InjectionException: java.lang.IllegalStateException: Multiple representations of the same entity [eu.etaxonomy.cdm.model.agent.Person#2947] are being merged. Detached: [Miller, P.]; Detached: [Miller, P.] 
	 at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:65) 
	 at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:282) 
	 at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:247) 
	 at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:90) 
	 at org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler.save(PartServiceSaveHandler.java:57) 
	 at org.eclipse.ui.internal.WorkbenchWindow$7.save(WorkbenchWindow.java:594) 
	 at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.savePart(PartServiceImpl.java:1390) 
	 at eu.etaxonomy.taxeditor.workbench.SaveHandler.execute(SaveHandler.java:40) 
	 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.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55) 
	 at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:282) 
	 at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:264) 
	 at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132) 
	 at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152) 
	 at org.eclipse.core.commands.Command.executeWithChecks(Command.java:494) 
	 at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:488) 
	 at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210) 
	 at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:433) 
	 at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.handleWidgetSelection(AbstractContributionItem.java:454) 
	 at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem$3.handleEvent(AbstractContributionItem.java:482) 
	 at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
	 at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4418) 
	 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079) 
	 at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4236) 
	 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3824) 
	 at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121) 
	 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) 
	 at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022) 
	 at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150) 
	 at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693) 
	 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) 
	 at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610) 
	 at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) 
	 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:134) 
	 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
	 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) 
	 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) 
	 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673) 
	 at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610) 
	 at org.eclipse.equinox.launcher.Main.run(Main.java:1519) 
 Caused by: java.lang.IllegalStateException: Multiple representations of the same entity [eu.etaxonomy.cdm.model.agent.Person#2947] are being merged. Detached: [Miller, P.]; Detached: [Miller, P.] 
	 at org.hibernate.event.internal.EntityCopyNotAllowedObserver.entityCopyDetected(EntityCopyNotAllowedObserver.java:37) 
	 at org.hibernate.event.internal.MergeContext.put(MergeContext.java:245) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:304) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170) 
	 at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:850) 
	 at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:832) 
	 at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:260) 
	 at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398) 
	 at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) 
	 at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162) 
	 at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:468) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:327) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170) 
	 at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:850) 
	 at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:832) 
	 at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:260) 
	 at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398) 
	 at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) 
	 at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162) 
	 at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:468) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:327) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170) 
	 at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:850) 
	 at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:832) 
	 at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:260) 
	 at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398) 
	 at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) 
	 at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162) 
	 at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:468) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:327) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170) 
	 at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69) 
	 at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:840) 
	 at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:822) 
	 at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:827) 
	 at eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase.merge(CdmEntityDaoBase.java:286) 
	 at eu.etaxonomy.cdm.api.service.ServiceBase.merge(ServiceBase.java:228) 
	 at eu.etaxonomy.cdm.api.service.ServiceBase.merge(ServiceBase.java:42) 
	 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.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$1.proceedWithInvocation(TransactionInterceptor.java:99) 
	 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
	 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
	 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
	 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) 
	 at com.sun.proxy.$Proxy1882.merge(Unknown Source) 
	 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.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.$Proxy2315.merge(Unknown Source) 
	 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.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.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.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.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
	 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.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:748) 
	 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.$Proxy48.merge(Unknown Source) 
	 at eu.etaxonomy.taxeditor.editor.e4.TaxonEditorInputE4.merge(TaxonEditorInputE4.java:428) 
	 at eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4.save(TaxonNameEditorE4.java:409) 
	 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.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55) 
	 ... 48 more 
 ~~~ 

 This seems to be reproducable. To me it looks like the current implementation has a problem that author Mill. is already part of the session via Abies alba Mill. it does not seem to deduplicate the new (but already existing) author correctly when adding it to the session.

Back